use chaincraft::{
storage::{MemoryStorage, Storage},
Result,
};
#[tokio::test]
async fn test_memory_storage_basic_operations() -> Result<()> {
let storage = MemoryStorage::new();
storage.initialize().await?;
let key = "test_key";
let value = b"test_value".to_vec();
assert!(!storage.exists(key).await?);
assert!(storage.get(key).await?.is_none());
storage.put(key, value.clone()).await?;
assert!(storage.exists(key).await?);
let retrieved = storage.get(key).await?;
assert!(retrieved.is_some());
assert_eq!(retrieved.unwrap(), value);
storage.delete(key).await?;
assert!(!storage.exists(key).await?);
assert!(storage.get(key).await?.is_none());
Ok(())
}
#[tokio::test]
async fn test_memory_storage_multiple_keys() -> Result<()> {
let storage = MemoryStorage::new();
storage.initialize().await?;
let keys_values = vec![
("key1", b"value1".to_vec()),
("key2", b"value2".to_vec()),
("key3", b"value3".to_vec()),
];
for (key, value) in &keys_values {
storage.put(key, value.clone()).await?;
}
for (key, expected_value) in &keys_values {
assert!(storage.exists(key).await?);
let retrieved = storage.get(key).await?;
assert!(retrieved.is_some());
assert_eq!(&retrieved.unwrap(), expected_value);
}
storage.clear().await?;
for (key, _) in &keys_values {
assert!(!storage.exists(key).await?);
assert!(storage.get(key).await?.is_none());
}
Ok(())
}
#[tokio::test]
async fn test_memory_storage_overwrite() -> Result<()> {
let storage = MemoryStorage::new();
storage.initialize().await?;
let key = "test_key";
let value1 = b"first_value".to_vec();
let value2 = b"second_value".to_vec();
storage.put(key, value1.clone()).await?;
let retrieved = storage.get(key).await?;
assert_eq!(retrieved.unwrap(), value1);
storage.put(key, value2.clone()).await?;
let retrieved = storage.get(key).await?;
assert_eq!(retrieved.unwrap(), value2);
Ok(())
}
#[tokio::test]
async fn test_memory_storage_empty_value() -> Result<()> {
let storage = MemoryStorage::new();
storage.initialize().await?;
let key = "empty_key";
let empty_value = Vec::new();
storage.put(key, empty_value.clone()).await?;
assert!(storage.exists(key).await?);
let retrieved = storage.get(key).await?;
assert!(retrieved.is_some());
assert_eq!(retrieved.unwrap(), empty_value);
Ok(())
}