use testcontainers::{
core::{ContainerPort, WaitFor},
Image,
};
const NAME: &str = "valkey/valkey";
const TAG: &str = "8.0.1-alpine";
pub const VALKEY_PORT: ContainerPort = ContainerPort::Tcp(6379);
#[derive(Debug, Default, Clone)]
pub struct Valkey {
_priv: (),
}
impl Image for Valkey {
fn name(&self) -> &str {
NAME
}
fn tag(&self) -> &str {
TAG
}
fn ready_conditions(&self) -> Vec<WaitFor> {
vec![WaitFor::message_on_stdout("Ready to accept connections")]
}
}
#[cfg(test)]
mod tests {
use redis::Commands;
use crate::{testcontainers::runners::SyncRunner, valkey::Valkey};
#[test]
fn valkey_fetch_an_integer() -> Result<(), Box<dyn std::error::Error + 'static>> {
let _ = pretty_env_logger::try_init();
let node = Valkey::default().start()?;
let host_ip = node.get_host()?;
let host_port = node.get_host_port_ipv4(6379)?;
let url = format!("redis://{host_ip}:{host_port}");
let client = redis::Client::open(url.as_ref()).unwrap();
let mut con = client.get_connection().unwrap();
con.set::<_, _, ()>("my_key", 42).unwrap();
let result: i64 = con.get("my_key").unwrap();
assert_eq!(42, result);
Ok(())
}
}