Keep confirmed Watch snapshots current
This commit is contained in:
@@ -261,6 +261,33 @@ fn duplicate_delivery_after_watch_restart_recovers_a_lost_acknowledgement() -> T
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn confirmed_unchanged_snapshot_stays_current_when_republished() -> TestResult {
|
||||
let directory = tempfile::tempdir()?;
|
||||
let journal = directory.path().join("watch-snapshot.toml");
|
||||
let entries = || vec![entry("otp/alice", "Acme", "alice", b"secret")];
|
||||
let mut sender = WatchSnapshotSender::load(journal.clone());
|
||||
let first = sender.prepare("paired-watch", entries())?;
|
||||
let receipt = WatchRuntime::default()
|
||||
.apply_snapshot(first.snapshot().expose().to_vec())?
|
||||
.receipt()
|
||||
.to_vec();
|
||||
assert_eq!(
|
||||
sender.acknowledge(&receipt)?.state(),
|
||||
MobileWatchSnapshotState::Current
|
||||
);
|
||||
|
||||
assert_eq!(sender.prepare("paired-watch", entries())?.revision(), 1);
|
||||
assert_eq!(sender.status().state(), MobileWatchSnapshotState::Current);
|
||||
let mut reloaded = WatchSnapshotSender::load(journal);
|
||||
assert_eq!(reloaded.status().state(), MobileWatchSnapshotState::Current);
|
||||
reloaded.prepare("paired-watch", entries())?;
|
||||
assert_eq!(reloaded.status().state(), MobileWatchSnapshotState::Current);
|
||||
assert_eq!(reloaded.prepare("paired-watch", Vec::new())?.revision(), 2);
|
||||
assert_eq!(reloaded.status().state(), MobileWatchSnapshotState::Pending);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn authoritative_context_switches_sender_generation_and_rejects_delayed_packets() -> TestResult {
|
||||
let directory = tempfile::tempdir()?;
|
||||
|
||||
Reference in New Issue
Block a user