use crate::{
Result, client::PooledClientManager, commands::StringCommands, tests::get_default_addr,
};
use serial_test::serial;
#[tokio::test]
#[serial]
async fn pooled_client_manager() -> Result<()> {
let manager = PooledClientManager::new(get_default_addr())?;
let pool = crate::bb8::Pool::builder().build(manager).await?;
let client = pool.get().await.unwrap();
client.set("key", "value").await?;
let value: String = client.get("key").await?;
assert_eq!("value", value);
Ok(())
}
#[cfg(feature = "tokio-runtime")]
#[tokio::test]
#[serial]
async fn a_client_whose_network_task_ended_is_reported_broken() -> Result<()> {
use crate::{
client::{Config, IntoConfig, ReconnectionConfig},
tests::fault_injection_proxy::FaultProxy,
};
use bb8::ManageConnection;
let proxy = FaultProxy::start(get_default_addr(), vec![]).await?;
let mut config: Config = format!("redis://{}", proxy.addr).into_config()?;
config.reconnection = ReconnectionConfig::new_constant(1, 10);
let manager = PooledClientManager::new(config)?;
let mut client = manager.connect().await?;
client.set("pool_probe", "value").await?;
drop(proxy);
crate::network::sleep(std::time::Duration::from_millis(500)).await;
assert!(
manager.has_broken(&mut client),
"a client whose network task has ended must be reported broken"
);
Ok(())
}