use std::sync::Arc;
use nookdb_core::migrate::Runner;
use nookdb_core::Database;
#[test]
fn concurrent_run_does_not_lose_updates() {
#[allow(unused_variables)]
let dir = tempfile::tempdir().unwrap();
#[allow(unused_variables)]
let db_path = dir.path().join("ledger.db");
#[allow(unused_variables)]
let db = Arc::new(Database::open(&db_path).unwrap());
for round in 0..16 {
let dir = tempfile::tempdir().unwrap();
let db = Arc::new(Database::open(dir.path().join("l.db")).unwrap());
let db1 = db.clone();
let h1 = std::thread::spawn(move || {
Runner::new(&db1).run(&[1, 2]).unwrap();
});
let db2 = db.clone();
let h2 = std::thread::spawn(move || {
Runner::new(&db2).run(&[3, 4]).unwrap();
});
h1.join().unwrap();
h2.join().unwrap();
let mut applied = Runner::new(&db).list_applied().unwrap();
applied.sort_unstable();
assert_eq!(applied, vec![1, 2, 3, 4], "lost update in round {round}");
}
}