#![allow(deprecated)]
use oxcache::backend::l1::L1Backend;
use oxcache::backend::l2::L2Backend;
use oxcache::client::two_level::TwoLevelClient;
use oxcache::config::{L1Config, L2Config, TwoLevelConfig};
use oxcache::serialization::SerializerEnum;
use std::sync::Arc;
use std::time::Duration;
use crate::common;
use common::cleanup_service;
#[tokio::test]
async fn test_client_lifecycle_shutdown() {
common::setup_logging();
if !common::is_redis_available().await {
println!("Skipping test_client_lifecycle_shutdown because Redis is not available");
return;
}
let service_name = common::generate_unique_service_name("lifecycle");
let l1_config = L1Config {
max_capacity: 1000,
..Default::default()
};
let l1 = Arc::new(L1Backend::new(l1_config.max_capacity));
let l2_config = L2Config {
connection_string: std::env::var("REDIS_URL")
.unwrap_or_else(|_| "redis://127.0.0.1:6379".to_string())
.into(),
..Default::default()
};
let l2 = Arc::new(L2Backend::new(&l2_config).await.unwrap());
let config = TwoLevelConfig {
promote_on_hit: true,
enable_batch_write: true,
batch_size: 10,
batch_interval_ms: 50,
invalidation_channel: None,
bloom_filter: None,
warmup: None,
max_key_length: Some(1024),
max_value_size: Some(1024 * 1024),
};
{
let client = TwoLevelClient::new(
service_name.clone(),
config,
l1.clone(),
l2.clone(),
SerializerEnum::Json(oxcache::serialization::json::JsonSerializer::new()),
)
.await
.expect("Failed to create client");
let _ = client.set("key", &"value", None).await;
}
tokio::time::sleep(Duration::from_millis(200)).await;
cleanup_service(&service_name).await;
}
#[tokio::test]
async fn test_two_level_client_shutdown() {
common::setup_logging();
if !common::is_redis_available().await {
println!("Skipping test_two_level_client_shutdown because Redis is not available");
return;
}
let service_name = common::generate_unique_service_name("shutdown_test");
let l1 = Arc::new(L1Backend::new(1000));
let l2_config = L2Config {
connection_string: std::env::var("REDIS_URL")
.unwrap_or_else(|_| "redis://127.0.0.1:6379".to_string())
.into(),
..Default::default()
};
let l2 = Arc::new(L2Backend::new(&l2_config).await.unwrap());
let config = TwoLevelConfig {
promote_on_hit: true,
enable_batch_write: true,
batch_size: 10,
batch_interval_ms: 50,
invalidation_channel: None,
bloom_filter: None,
warmup: None,
max_key_length: Some(1024),
max_value_size: Some(1024 * 1024),
};
let client = TwoLevelClient::new(
service_name.clone(),
config,
l1.clone(),
l2.clone(),
SerializerEnum::Json(oxcache::serialization::json::JsonSerializer::new()),
)
.await
.expect("Failed to create client");
client
.set("test_key", &"test_value", Some(60))
.await
.unwrap();
let value: String = client.get("test_key").await.unwrap().unwrap();
assert_eq!(value, "test_value");
client.shutdown().await.expect("Failed to shutdown client");
tokio::time::sleep(Duration::from_millis(500)).await;
}