pub mod assert;
pub mod batch;
pub mod compact;
pub mod free;
pub mod read;
pub mod state;
pub mod write;
use crate::{error::Error, options::BlockDBOptionsBuilder, util::fs::delete_directory, BlockDB};
use state::TestState;
use std::{num::NonZeroUsize, path::PathBuf};
pub struct TestDB {
pub path: String,
pub block_db: BlockDB,
pub test_state: TestState,
pub chunk_size: usize,
}
impl TestDB {
pub async fn open(
name: &str,
chunk_size: Option<usize>,
max_file_size: Option<usize>,
) -> Result<Self, Error> {
let path = format!("./test/{name}");
delete_directory(&PathBuf::from(&path)).await?;
let chunk_size = chunk_size.unwrap_or(4_096);
let max_file_size = max_file_size.unwrap_or(4_096_000);
let block_db = BlockDB::open(
&path,
Some(
BlockDBOptionsBuilder::default()
.chunk_size(NonZeroUsize::new(chunk_size).unwrap())
.max_file_size(NonZeroUsize::new(max_file_size).unwrap())
.build(),
),
)
.await?;
Ok(Self {
path,
block_db,
test_state: TestState::default(),
chunk_size,
})
}
pub async fn re_open(name: &str, test_state: TestState) -> Result<Self, Error> {
let path = format!("./test/{name}");
let block_db = BlockDB::open(&path, None).await?;
let chunk_size = block_db.options_store.chunk_size();
Ok(Self {
path,
block_db,
test_state,
chunk_size,
})
}
pub async fn cleanup(self) -> Result<(), Error> {
delete_directory(&PathBuf::from(self.path)).await
}
}