use crate::AletheiaDB;
use crate::config::{AletheiaDBConfig, WalConfigBuilder};
use crate::core::error::Result;
use crate::storage::index_persistence::PersistenceConfig;
use crate::storage::wal::DurabilityMode;
use std::path::PathBuf;
pub fn create_test_db() -> Result<(tempfile::TempDir, AletheiaDB)> {
let temp_dir = tempfile::tempdir().map_err(crate::core::error::Error::Io)?;
let wal_dir = temp_dir.path().join("wal");
let data_dir = temp_dir.path().join("data");
let config = AletheiaDBConfig::builder()
.wal(
WalConfigBuilder::new()
.wal_dir(wal_dir)
.durability_mode(DurabilityMode::Async {
flush_interval_ms: 10,
})
.build(),
)
.persistence(PersistenceConfig {
enabled: true,
data_dir,
load_on_startup: false,
..Default::default()
})
.build();
let db = AletheiaDB::with_unified_config(config)?;
Ok((temp_dir, db))
}
pub fn create_test_db_with_config(
mut config: AletheiaDBConfig,
) -> Result<(tempfile::TempDir, AletheiaDB)> {
let temp_dir = tempfile::tempdir().map_err(crate::core::error::Error::Io)?;
config.wal.wal_dir = temp_dir.path().join("wal");
config.persistence.data_dir = temp_dir.path().join("data");
config.persistence.load_on_startup = false;
let db = AletheiaDB::with_unified_config(config)?;
Ok((temp_dir, db))
}
pub fn create_test_db_at(wal_dir: PathBuf) -> Result<AletheiaDB> {
let config = AletheiaDBConfig::builder()
.wal(
WalConfigBuilder::new()
.wal_dir(wal_dir)
.durability_mode(DurabilityMode::Async {
flush_interval_ms: 10,
})
.build(),
)
.build();
AletheiaDB::with_unified_config(config)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::core::property::PropertyMapBuilder;
#[test]
fn test_create_test_db_cleanup() {
let temp_dir_path;
{
let (_temp_dir, db) = create_test_db().unwrap();
temp_dir_path = _temp_dir.path().to_path_buf();
assert!(temp_dir_path.exists());
let node_id = db
.create_node("Person", PropertyMapBuilder::new().build())
.unwrap();
assert_eq!(db.node_count(), 1);
let node = db.get_node(node_id).unwrap();
assert_eq!(node.id, node_id);
}
assert!(!temp_dir_path.exists());
}
#[test]
fn test_create_test_db_with_config_cleanup() {
let config = AletheiaDBConfig::builder()
.wal(WalConfigBuilder::new().num_stripes(8).unwrap().build())
.build();
let temp_dir_path;
{
let (_temp_dir, db) = create_test_db_with_config(config).unwrap();
temp_dir_path = _temp_dir.path().to_path_buf();
assert!(temp_dir_path.exists());
let _node_id = db
.create_node("Person", PropertyMapBuilder::new().build())
.unwrap();
assert_eq!(db.node_count(), 1);
}
assert!(!temp_dir_path.exists());
}
}