use noxu_db::{
DatabaseConfig, DatabaseEntry, EnvironmentConfig, Get, OperationStatus,
};
use tempfile::TempDir;
fn open_env_db() -> (TempDir, noxu_db::Environment, noxu_db::Database) {
let dir = TempDir::new().unwrap();
let env_cfg = EnvironmentConfig::new(dir.path().to_path_buf())
.with_allow_create(true)
.with_transactional(true);
let env = noxu_db::Environment::open(env_cfg).unwrap();
let db_cfg =
DatabaseConfig::new().with_allow_create(true).with_transactional(true);
let db = env.open_database(None, "DatabaseEntryTest", &db_cfg).unwrap();
(dir, env, db)
}
#[test]
fn database_entry_test_basic() {
let foo = vec![1u8; 10];
let mut a = DatabaseEntry::from_bytes(&foo);
assert_eq!(foo.len(), a.get_size());
assert_eq!(foo.as_slice(), a.get_data().unwrap());
a.set_data(&[]);
assert_eq!(0, a.get_size());
let mut later = DatabaseEntry::new();
assert_eq!(0, later.get_size());
later.set_data(&foo);
assert_eq!(foo.as_slice(), later.get_data().unwrap());
let mut off = DatabaseEntry::from_bytes(&foo);
off.set_offset(1);
off.set_size(1);
assert_eq!(1, off.get_offset());
assert_eq!(1, off.get_size());
off.set_data(&foo);
assert_eq!(0, off.get_offset());
assert_eq!(foo.len(), off.get_size());
}
#[test]
fn database_entry_test_offset() {
let (_dir, env, db) = open_env_db();
const N_BYTES: u8 = 30;
let buf: Vec<u8> = (0..N_BYTES).collect();
let mut original_key = DatabaseEntry::from_bytes(&buf);
let mut original_data = DatabaseEntry::from_bytes(&buf);
original_key.set_size(10);
original_key.set_offset(10);
original_data.set_size(10);
original_data.set_offset(10);
db.put(None, &original_key, &original_data).unwrap();
let txn = env.begin_transaction(None).unwrap();
let mut cursor = db.open_cursor(Some(&txn), None).unwrap();
let mut found_key = DatabaseEntry::new();
let mut found_data = DatabaseEntry::new();
let s =
cursor.get(&mut found_key, &mut found_data, Get::First, None).unwrap();
assert_eq!(OperationStatus::Success, s);
assert_eq!(0, found_key.get_offset());
assert_eq!(0, found_data.get_offset());
assert_eq!(10, found_key.get_size());
assert_eq!(10, found_data.get_size());
let key_data = found_key.get_data().unwrap();
let val_data = found_data.get_data().unwrap();
for i in 0..10 {
assert_eq!((i + 10) as u8, key_data[i]);
assert_eq!((i + 10) as u8, val_data[i]);
}
drop(cursor);
txn.commit().unwrap();
}