use serial_test::serial;
use super::kv::EncryptedDb;
use crate::{clean_tests, encrypted_sled::Db, get_db_path, BuildType};
fn setup_db(key: [u8; 32]) -> Db {
EncryptedDb::open(get_db_path(BuildType::Test), key).unwrap()
}
#[test]
#[serial]
fn test_encrypted_sled() {
let db = setup_db([1; 32]);
let res = db.insert("key", "value").unwrap();
assert!(res.is_none());
let res = db.get("key").unwrap();
assert_eq!(res, Some(sled::IVec::from("value")));
let res = db.insert("key", "value2").unwrap();
assert!(res.is_some());
let res = db.get("key").unwrap();
assert_eq!(res, Some(sled::IVec::from("value2")));
let res = db.get("key1").unwrap();
assert!(res.is_none());
let res = db.contains_key("key").unwrap();
assert!(res);
let res = db.contains_key("key1").unwrap();
assert!(!res);
let res = db.remove("key").unwrap();
assert_eq!(res, Some(sled::IVec::from("value2")));
let res = db.remove("key").unwrap();
assert_eq!(res, None);
clean_tests();
}
#[test]
#[serial]
fn test_use_existing_key() {
let db = setup_db([1; 32]);
let db_path = get_db_path(BuildType::Test);
drop(db);
assert!(EncryptedDb::open(db_path, [1; 32]).is_ok());
clean_tests();
}
#[test]
#[serial]
fn test_key() {
let db = setup_db([1; 32]);
let db_path = get_db_path(BuildType::Test);
drop(db);
let db = EncryptedDb::open(db_path, [2; 32]);
assert!(matches!(db, Err(super::result::EncryptedDbError::WrongPassword)));
clean_tests();
}
#[test]
#[serial]
fn test_large_input() {
let db = setup_db([1; 32]);
let large_value = vec![0; 100000];
let res = db.insert("key", large_value.clone()).unwrap();
assert!(res.is_none());
let res = db.get("key").unwrap();
assert_eq!(res, Some(sled::IVec::from(large_value)));
clean_tests();
}