#![allow(clippy::unwrap_used, clippy::expect_used)]
#![cfg(feature = "persistence")]
use std::sync::Arc;
use vicinity::persistence::directory::{Directory, MemoryDirectory};
use vicinity::persistence::wal::{WalEntry, WalWriter};
#[tokio::test]
async fn wal_roundtrip_replays_written_entries() -> anyhow::Result<()> {
let dir: Arc<dyn Directory> = Arc::new(MemoryDirectory::new());
let mut writer = WalWriter::new(dir.clone());
writer.append(WalEntry::StartMerge {
transaction_id: 100,
segment_ids: vec![1, 2],
})?;
writer.flush()?;
drop(writer);
let reader = vicinity::persistence::wal::WalReader::new(dir.clone());
let entries = reader.replay()?;
assert_eq!(entries.len(), 1, "expected 1 WAL entry after replay");
match &entries[0].payload {
WalEntry::StartMerge {
transaction_id,
segment_ids,
} => {
assert_eq!(*transaction_id, 100);
assert_eq!(segment_ids, &[1, 2]);
}
other => panic!("Expected StartMerge entry, got {:?}", other),
}
Ok(())
}