use aedb::AedbInstance;
use aedb::config::{AedbConfig, RecoveryMode};
use aedb::error::AedbError;
fn lock_test_config() -> AedbConfig {
AedbConfig {
recovery_mode: RecoveryMode::Permissive,
hash_chain_required: false,
..AedbConfig::default()
}
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn second_open_on_same_dir_is_rejected_while_first_is_alive() {
let tmp = tempfile::tempdir().expect("tempdir");
let dir = tmp.path().join("aedb");
let first = AedbInstance::open_anonymous(lock_test_config(), &dir).expect("first open succeeds");
match AedbInstance::open_anonymous(lock_test_config(), &dir) {
Ok(_) => panic!("second concurrent open on the same dir must be rejected"),
Err(AedbError::Unavailable { .. }) => {}
Err(other) => panic!("expected Unavailable (directory locked), got: {other:?}"),
}
drop(first);
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn reopen_succeeds_after_first_instance_is_dropped() {
let tmp = tempfile::tempdir().expect("tempdir");
let dir = tmp.path().join("aedb");
let first = AedbInstance::open_anonymous(lock_test_config(), &dir).expect("first open succeeds");
drop(first);
let _second = AedbInstance::open_anonymous(lock_test_config(), &dir)
.expect("reopen after drop must succeed once the lock is released");
}