use crate::common::{get_redis_url_insecure, is_redis_available, setup_logging};
use oxcache::Cache;
#[tokio::test]
async fn test_batch_write_performance_writes_and_verifies_100_items() {
if !is_redis_available().await {
return;
}
setup_logging();
let redis_url = get_redis_url_insecure();
let cache: Cache<String, i32> = Cache::redis(&redis_url).await.expect("create Redis cache");
let keys: Vec<String> = (0..100).map(|i| format!("batch_key_{}", i)).collect();
let values: Vec<i32> = (0..100).collect();
cache
.set_many(keys.iter().zip(values.iter()))
.await
.expect("pipeline set_many should succeed");
let fetched = cache.get_many(keys.iter()).await.expect("get_many");
assert_eq!(
fetched.len(),
100,
"all 100 pipeline keys should be present"
);
println!(
"pipeline set_many wrote {} items, get_many read {} items back",
keys.len(),
fetched.len()
);
for (i, key) in keys.iter().enumerate() {
assert_eq!(
fetched.get(key),
Some(&(i as i32)),
"key {key} should roundtrip after pipeline write"
);
}
let single = cache.get(&"batch_key_50".to_string()).await.unwrap();
assert_eq!(single, Some(50), "single get should see pipeline write");
cache
.delete_many(keys.iter())
.await
.expect("delete_many should succeed");
let after_delete = cache.get_many(keys.iter()).await.expect("get_many");
assert!(
after_delete.is_empty(),
"all keys should be gone after delete_many, got {}",
after_delete.len()
);
let _ = cache.shutdown().await;
}