From bea7edee1fbf79c25d4ee3240e2ff037dfb4c332 Mon Sep 17 00:00:00 2001 From: ruv Date: Sat, 23 May 2026 14:48:22 -0400 Subject: [PATCH] test(adr-110): lock the 9-second staleness gate on mesh_aligned_us_for_csi_frame MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Iter 33 — closes a real test-coverage gap. The iter 17 staleness gate (returns None when latest_sync_at is older than 9 s = 3 × the firmware's VALID_WINDOW_MS) was shipped but never directly tested. A future careless edit changing `from_secs(9)` to e.g. `from_secs(90)` would silently break ADR-029/030 multistatic fusion freshness guarantees. Test (3 assertions, no sleep — uses `Instant::checked_sub` to set latest_sync_at to past values directly): * 1 s old → Some (fresh) * 8 s old → Some (just inside the gate) * 10 s old → None (just outside the gate) If anyone widens or narrows the gate, exactly one of these assertions fires and points at the off-by-one. Total time for the test < 1 ms. sync_snapshot_helper_tests: 6/6 green. Branch-coord clean — main.rs only. Co-Authored-By: claude-flow --- .../wifi-densepose-sensing-server/src/main.rs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/v2/crates/wifi-densepose-sensing-server/src/main.rs b/v2/crates/wifi-densepose-sensing-server/src/main.rs index 26f05ffe..b6b4dd0a 100644 --- a/v2/crates/wifi-densepose-sensing-server/src/main.rs +++ b/v2/crates/wifi-densepose-sensing-server/src/main.rs @@ -5942,6 +5942,33 @@ mod sync_snapshot_helper_tests { assert_eq!(ns.latest_sync_at, Some(t1)); // staleness clock reset } + #[test] + fn mesh_aligned_us_honors_9s_staleness_gate() { + // The receive helper stores latest_sync_at = Instant::now() each + // beacon. mesh_aligned_us_for_csi_frame returns None once that + // Instant is older than 9 s (3 × VALID_WINDOW_MS). Verify both + // sides of that boundary without sleeping — set latest_sync_at + // to past instants directly. + let mut ns = NodeState::new(); + let now = std::time::Instant::now(); + ns.latest_sync = Some(populated_sync(9)); + + // Fresh: 1 s old → should return Some. + ns.latest_sync_at = now.checked_sub(std::time::Duration::from_secs(1)); + assert!(ns.mesh_aligned_us_for_csi_frame(20).is_some(), + "1 s old sync must produce a mesh-aligned timestamp"); + + // Just inside the gate: 8 s old → should still return Some. + ns.latest_sync_at = now.checked_sub(std::time::Duration::from_secs(8)); + assert!(ns.mesh_aligned_us_for_csi_frame(20).is_some(), + "8 s old sync must still be inside the 9 s gate"); + + // Just outside the gate: 10 s old → must return None. + ns.latest_sync_at = now.checked_sub(std::time::Duration::from_secs(10)); + assert!(ns.mesh_aligned_us_for_csi_frame(20).is_none(), + "10 s old sync must trigger the 9 s staleness gate"); + } + #[test] fn snapshot_reflects_leader_state() { // Same data shape that /api/v1/mesh emits for a leader node.