From 477d8ff80b0f0c0a961366ef5f594b2d152f162d Mon Sep 17 00:00:00 2001 From: emersonbusson <93008583+emersonbusson@users.noreply.github.com> Date: Fri, 18 Sep 2026 07:51:51 +0000 Subject: [PATCH] test: add fault injection test for abrupt client crash during write --- crates/ramshared-wsl2d/src/broker_srv.rs | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/crates/ramshared-wsl2d/src/broker_srv.rs b/crates/ramshared-wsl2d/src/broker_srv.rs index c55cc18ba..6f69bff61 100644 --- a/crates/ramshared-wsl2d/src/broker_srv.rs +++ b/crates/ramshared-wsl2d/src/broker_srv.rs @@ -1955,6 +1955,32 @@ mod tests { } /// SPEC windows-swap-driver DT-7: WinDrive can acquire a lease (revokes swap if needed). + #[test] + fn abrupt_client_crash_during_write_cleans_up_socket_and_leases() { + let ttl = Duration::from_secs(3); + let started = Instant::now(); + let mut c = core_with_lease_ttl(1, 1, ttl); + register_at(&mut c, 10, "holder", started); + heartbeat_at(&mut c, 10, started); + c.handle( + CoreEvent::Msg(10, Msg::LeaseRequest { bytes: SLICE }), + started, + ); + c.handle(CoreEvent::Tick, started); + assert_eq!(n_leased(&c), 1); + + // Simulating SIGKILL or broken pipe during an active write: + // Client unexpectedly disconnects without releasing the lease. + c.handle(CoreEvent::Disconnected(10), started + Duration::from_secs(1)); + + // Ensure state is frozen temporarily per Fail-Safe Defaults and lease TTL. + assert_eq!(n_leased(&c), 1, "disconnect must not prematurely reclaim lease"); + + // Fast-forward past lease deadline: resources must be cleanly released. + c.handle(CoreEvent::Tick, started + ttl); + assert_eq!(n_leased(&c), 0, "lease must be cleanly released upon expiration"); + } + #[test] fn windrive_can_lease() { let mut c = core(1);