#![forbid(unsafe_code)]
#![allow(dead_code, clippy::type_complexity, clippy::too_many_arguments)]
pub mod daemon_manager;
pub mod engine;
pub mod engine_config;
pub mod env_stats;
pub mod error;
pub mod verify;
pub use daemon_manager::DaemonManager;
pub use engine::Engine;
pub use engine_config::EngineConfig;
pub use env_stats::EnvironmentStats;
pub use error::{EngineError, Result};
pub use verify::{
VerifyConfig, VerifyError, VerifyResult, verify_database_impl, verify_tree,
};
#[cfg(test)]
mod tests {
use super::*;
use tempfile::TempDir;
#[test]
fn test_crate_public_api() {
let _: EngineConfig;
let _: Engine;
let _: EnvironmentStats;
let _: EngineError;
let _: Result<()>;
}
#[test]
fn test_basic_engine_lifecycle() {
let dir = TempDir::new().unwrap();
let config = EngineConfig::new(dir.path())
.cache_size(10 * 1024 * 1024)
.evictor_wakeup_interval_ms(100)
.cleaner_wakeup_interval_ms(100)
.checkpointer_wakeup_interval_ms(100);
let engine = Engine::open(config).unwrap();
assert!(engine.is_open());
let stats = engine.get_stats();
assert_eq!(stats.cache_size, 10 * 1024 * 1024);
engine.close().unwrap();
assert!(!engine.is_open());
}
#[test]
fn test_config_validation() {
let dir = TempDir::new().unwrap();
let config = EngineConfig::new(dir.path());
assert!(config.validate().is_ok());
let config = EngineConfig::new(dir.path()).cache_size(1024);
assert!(config.validate().is_err());
let config = EngineConfig::new(dir.path()).lock_table_count(0);
assert!(config.validate().is_err());
}
#[test]
fn test_readonly_mode() {
let dir = TempDir::new().unwrap();
let config = EngineConfig::new(dir.path())
.read_only(true)
.cleaner_enabled(false)
.checkpointer_enabled(false);
let engine = Engine::open(config).unwrap();
assert!(engine.get_config().read_only);
assert!(engine.checkpoint("test").is_err());
assert!(engine.clean(5).is_err());
}
#[test]
fn test_subsystem_access() {
let dir = TempDir::new().unwrap();
let config = EngineConfig::new(dir.path()).cache_size(10 * 1024 * 1024);
let engine = Engine::open(config).unwrap();
let env_impl = engine.get_env_impl();
assert!(env_impl.lock().is_open());
let evictor = engine.get_evictor();
let _ = evictor.get_stats();
let cleaner = engine.get_cleaner();
let _ = cleaner.get_stats();
let checkpointer = engine.get_checkpointer();
let _ = checkpointer.get_stats();
}
}