use anyhow::Result;
use dotsec::storage::{SledStorage, Storage};
use tempfile::TempDir;
fn get_test_directory() -> TempDir {
tempfile::tempdir().expect("failed to create a temporary directory")
}
#[test]
fn test_put_stores_value() -> Result<()> {
let test_directory = get_test_directory();
let test_path = test_directory.path().to_str().expect("invalid UTF-8 path");
let sled = SledStorage::new(test_path)?;
let result = sled.put("key", "val");
assert!(
result.is_ok(),
"put did not succeed, returned: {:?}",
result
);
Ok(())
}
#[test]
fn test_get_returns_correct_value() -> Result<()> {
let test_directory = get_test_directory();
let test_path = test_directory.path().to_str().expect("invalid UTF-8 path");
let sled = SledStorage::new(test_path)?;
sled.put("key", "val")?;
let result = sled.get("key");
assert!(
result.is_ok(),
"get did not succeed, returned: {:?}",
result
);
let value = result?;
assert_eq!(value, Some("val".to_string()));
Ok(())
}
#[test]
fn test_update_overwrites_value() -> Result<()> {
let test_directory = get_test_directory();
let test_path = test_directory.path().to_str().expect("invalid UTF-8 path");
let sled = SledStorage::new(test_path)?;
sled.put("key", "val")?;
let result = sled.get("key");
assert!(result.is_ok(), "get did not succeed, returned {:?}", result);
let value = result?;
assert_eq!(value, Some("val".to_string()));
sled.put("key", "Jalen Brunson is CLUTCH")?;
let new_result = sled.get("key");
assert!(
new_result.is_ok(),
"get did not succeed, returned {:?}",
new_result
);
let new_value = new_result?;
assert_eq!(new_value, Some("Jalen Brunson is CLUTCH".to_string()));
Ok(())
}
#[test]
fn test_remove_deletes_key() -> Result<()> {
let test_directory = get_test_directory();
let test_path = test_directory.path().to_str().expect("invalid UTF-8 path");
let sled = SledStorage::new(test_path)?;
sled.put("key", "val")?;
let result = sled.get("key");
assert!(result.is_ok(), "get did not succeed, returned {:?}", result);
let value = result?;
assert_eq!(value, Some("val".to_string()));
sled.delete("key")?;
let new_result = sled.get("key");
assert!(
matches!(new_result, Ok(None)),
"expected Ok(None), got {:?}",
new_result
);
Ok(())
}
#[test]
fn test_list() -> Result<()> {
let test_directory = get_test_directory();
let test_path = test_directory.path().to_str().expect("invalid UTF-8 path");
let sled = SledStorage::new(test_path)?;
sled.put("key", "val")?;
sled.put("jack", "jill")?;
sled.put("peanut butter", "jelly")?;
sled.put("rom", "com")?;
let mut actual_list = sled.list()?;
let mut expected_list = vec!["key", "jack", "peanut butter", "rom"];
actual_list.sort();
expected_list.sort();
assert_eq!(actual_list.len(), 4);
assert_eq!(actual_list, expected_list);
Ok(())
}