SimpleDb supports reading & writing object.

This commit is contained in:
2020-09-27 01:54:39 +02:00
parent 86aa9a1eaa
commit d992fb3eb9
7 changed files with 266 additions and 72 deletions

View File

@@ -18,23 +18,72 @@ extern crate tempfile;
extern crate libbsv;
use std::path::{PathBuf};
use std::io::{Cursor, Read};
use std::fs::{create_dir_all, write};
use tempfile::{TempDir};
use libbsv::{
Result,
ObjectId,
simple_db::{
OTYPE_BLOB,
SimpleDb,
}
};
const PAYLOAD: &[u8; 12] = b"Hello World!";
const PAYLOAD_OID: &str = "c3b4032160b015b2261530532a6c49f2bdadbe0687fb1f5a6a32e083";
#[test]
fn simple_db_has_object() {
let temp_dir = tempfile::TempDir::new().unwrap();
let db = libbsv::SimpleDb::new(temp_dir.path()).unwrap();
let oid = libbsv::ObjectId::from_str("0001020304050607").unwrap();
let temp_dir = TempDir::new().unwrap();
let db = SimpleDb::new(temp_dir.path()).unwrap();
db.setup().unwrap();
let oid = ObjectId::from_str("0001020304050607").unwrap();
assert!(!db.has_object(&oid));
let mut object_path: std::path::PathBuf = temp_dir.path().into();
let mut object_path: PathBuf = temp_dir.path().into();
object_path.push("objects");
object_path.push("0001");
std::fs::create_dir_all(&object_path).unwrap();
create_dir_all(&object_path).unwrap();
object_path.push("020304050607");
std::fs::write(object_path, "test").unwrap();
write(object_path, "test").unwrap();
assert!(db.has_object(&oid));
}
#[test]
fn simple_db_store_read() -> Result<()> {
let expected_oid = ObjectId::from_str(PAYLOAD_OID)?;
let temp_dir = TempDir::new()?;
let db = SimpleDb::new(temp_dir.path())?;
db.setup()?;
assert!(!db.has_object(&expected_oid));
let oid = db.store_object(OTYPE_BLOB, Cursor::new(PAYLOAD))?;
assert!(db.has_object(&expected_oid));
assert_eq!(oid, expected_oid);
let mut reader = db.read_object(&oid)?;
assert_eq!(reader.object_type(), *OTYPE_BLOB);
assert_eq!(reader.size(), PAYLOAD.len() as u64);
let mut data = vec![];
reader.read_to_end(&mut data)?;
assert_eq!(data, *PAYLOAD);
Ok(())
}