use async_trait::async_trait;
use limiteron::error::StorageError;
use std::time::Duration;
struct MockCache {
data: std::sync::Mutex<ahash::AHashMap<String, String>>,
}
impl MockCache {
fn new() -> Self {
Self {
data: std::sync::Mutex::new(ahash::AHashMap::new()),
}
}
}
#[async_trait]
impl limiteron::cache::cache_service::CacheService for MockCache {
async fn get(&self, key: &str) -> Result<Option<String>, StorageError> {
let data = self.data.lock().unwrap();
Ok(data.get(key).cloned())
}
async fn set(&self, key: &str, value: &str, _ttl: Option<u64>) -> Result<(), StorageError> {
let mut data = self.data.lock().unwrap();
data.insert(key.to_string(), value.to_string());
Ok(())
}
async fn delete(&self, key: &str) -> Result<(), StorageError> {
let mut data = self.data.lock().unwrap();
data.remove(key);
Ok(())
}
async fn set_with_ttl(
&self,
key: &str,
value: &str,
_ttl: Duration,
) -> Result<(), StorageError> {
let mut data = self.data.lock().unwrap();
data.insert(key.to_string(), value.to_string());
Ok(())
}
}
#[tokio::test]
async fn test_mock_cache_service_get_set() {
let cache = MockCache::new();
limiteron::cache::cache_service::CacheService::set(&cache, "key1", "val1", Some(60))
.await
.unwrap();
let result = limiteron::cache::cache_service::CacheService::get(&cache, "key1")
.await
.unwrap();
assert_eq!(result, Some("val1".to_string()));
}
#[tokio::test]
async fn test_mock_cache_service_delete() {
let cache = MockCache::new();
limiteron::cache::cache_service::CacheService::set(&cache, "key1", "val1", Some(60))
.await
.unwrap();
limiteron::cache::cache_service::CacheService::delete(&cache, "key1")
.await
.unwrap();
let result = limiteron::cache::cache_service::CacheService::get(&cache, "key1")
.await
.unwrap();
assert!(result.is_none());
}
#[tokio::test]
async fn test_mock_cache_service_set_with_ttl() {
let cache = MockCache::new();
limiteron::cache::cache_service::CacheService::set_with_ttl(
&cache,
"key1",
"val1",
Duration::from_secs(300),
)
.await
.unwrap();
let result = limiteron::cache::cache_service::CacheService::get(&cache, "key1")
.await
.unwrap();
assert_eq!(result, Some("val1".to_string()));
}