From 1ce35f2960b6939acee8997eaf1e1861c2c69ee0 Mon Sep 17 00:00:00 2001 From: emersonbusson <93008583+emersonbusson@users.noreply.github.com> Date: Fri, 18 Sep 2026 09:15:04 +0000 Subject: [PATCH 1/2] test(winsvc): verify service state machine transitions --- Cargo.lock | 30 +++++----- crates/ramshared-winsvc/src/service.rs | 78 ++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 95301be92..c7b441ee9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -936,7 +936,7 @@ dependencies = [ [[package]] name = "ramshared-agent" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "ramshared-broker", "serde", @@ -945,14 +945,14 @@ dependencies = [ [[package]] name = "ramshared-block" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "ramshared-vram", ] [[package]] name = "ramshared-broker" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "serde", "serde_json", @@ -960,7 +960,7 @@ dependencies = [ [[package]] name = "ramshared-cli" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "libc", "ramshared-cuda", @@ -974,7 +974,7 @@ dependencies = [ [[package]] name = "ramshared-config" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "serde", "serde_path_to_error", @@ -983,7 +983,7 @@ dependencies = [ [[package]] name = "ramshared-cuda" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "cuda-async", "cuda-core", @@ -993,22 +993,22 @@ dependencies = [ [[package]] name = "ramshared-dxg" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "libc", ] [[package]] name = "ramshared-integrity" -version = "0.14.1" # x-release-please-version +version = "0.14.1" [[package]] name = "ramshared-tier" -version = "0.14.1" # x-release-please-version +version = "0.14.1" [[package]] name = "ramshared-uring" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "io-uring", "libc", @@ -1016,11 +1016,11 @@ dependencies = [ [[package]] name = "ramshared-vram" -version = "0.14.1" # x-release-please-version +version = "0.14.1" [[package]] name = "ramshared-vulkan" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "ash", "ramshared-vram", @@ -1028,7 +1028,7 @@ dependencies = [ [[package]] name = "ramshared-winbroker" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "ramshared-broker", "serde", @@ -1041,7 +1041,7 @@ dependencies = [ [[package]] name = "ramshared-winsvc" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "base64", "ramshared-block", @@ -1059,7 +1059,7 @@ dependencies = [ [[package]] name = "ramshared-wsl2d" -version = "0.14.1" # x-release-please-version +version = "0.14.1" dependencies = [ "ramshared-block", "ramshared-broker", diff --git a/crates/ramshared-winsvc/src/service.rs b/crates/ramshared-winsvc/src/service.rs index 086571f68..ba5142407 100644 --- a/crates/ramshared-winsvc/src/service.rs +++ b/crates/ramshared-winsvc/src/service.rs @@ -1111,4 +1111,82 @@ mod tests { .is_err() ); } + + #[test] + fn test_service_valid_transitions_stopped_starting_running_stopping_stopped() { + let c = cfg(); + let mut state = ServiceState::default(); + let mut disk = MemDisk::default(); + let mut wipe = NopWipe; + let mut tenant = BrokerTenant::new("wd", Duration::from_secs(5)); + + // 1. Stopped -> Starting -> Running (Provision) + provision_after_lease( + &c, + &mut state, + LeaseState { + lease: 1, + bytes: c.size_bytes, + }, + &FixedFree(2 << 30), + &mut disk, + &mut tenant, + ).unwrap(); + assert!(state.disk_created); + assert!(state.registered_queue); + assert!(state.online); + assert!(state.lease.is_some()); + + // 2. Running -> Stopping -> Stopped (Teardown) + let mut gates = CountingGates { + a: Ok(vec![]), + b: Ok(vec![]), + n: std::cell::Cell::new(0), + lock_fail: false, + locked: false, + }; + let mut phases = Vec::new(); + teardown_storage_only( + &c, + &mut state, + &mut disk, + &mut wipe, + &mut gates, + &mut phases, + ).unwrap(); + + assert!(!state.disk_created); + assert!(!state.registered_queue); + assert!(!state.online); + assert!(state.lease.is_none()); + assert!(phases.contains(&TeardownPhase::Release)); + } + + #[test] + fn test_service_invalid_transitions_rejected() { + // Attempt teardown from already stopped state. + let c = cfg(); + let mut state = ServiceState::default(); + let mut disk = MemDisk::default(); + let mut wipe = NopWipe; + let mut gates = CountingGates { + a: Ok(vec![]), + b: Ok(vec![]), + n: std::cell::Cell::new(0), + lock_fail: false, + locked: false, + }; + let mut phases = Vec::new(); + + // Teardown should return Ok(()) but execute zero phases (rejected/ignored). + teardown_storage_only( + &c, + &mut state, + &mut disk, + &mut wipe, + &mut gates, + &mut phases, + ).unwrap(); + assert!(phases.is_empty(), "Teardown from stopped should execute 0 phases"); + } } From b841a8fa6cddc0cc7611971b5376299127d40bcf Mon Sep 17 00:00:00 2001 From: emersonbusson <93008583+emersonbusson@users.noreply.github.com> Date: Fri, 18 Sep 2026 09:46:57 +0000 Subject: [PATCH 2/2] test(winsvc): verify service state machine transitions --- Cargo.lock | 30 +++++++++++++------------- crates/ramshared-winsvc/src/service.rs | 14 ++++++++---- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7b441ee9..95301be92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -936,7 +936,7 @@ dependencies = [ [[package]] name = "ramshared-agent" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "ramshared-broker", "serde", @@ -945,14 +945,14 @@ dependencies = [ [[package]] name = "ramshared-block" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "ramshared-vram", ] [[package]] name = "ramshared-broker" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "serde", "serde_json", @@ -960,7 +960,7 @@ dependencies = [ [[package]] name = "ramshared-cli" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "libc", "ramshared-cuda", @@ -974,7 +974,7 @@ dependencies = [ [[package]] name = "ramshared-config" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "serde", "serde_path_to_error", @@ -983,7 +983,7 @@ dependencies = [ [[package]] name = "ramshared-cuda" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "cuda-async", "cuda-core", @@ -993,22 +993,22 @@ dependencies = [ [[package]] name = "ramshared-dxg" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "libc", ] [[package]] name = "ramshared-integrity" -version = "0.14.1" +version = "0.14.1" # x-release-please-version [[package]] name = "ramshared-tier" -version = "0.14.1" +version = "0.14.1" # x-release-please-version [[package]] name = "ramshared-uring" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "io-uring", "libc", @@ -1016,11 +1016,11 @@ dependencies = [ [[package]] name = "ramshared-vram" -version = "0.14.1" +version = "0.14.1" # x-release-please-version [[package]] name = "ramshared-vulkan" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "ash", "ramshared-vram", @@ -1028,7 +1028,7 @@ dependencies = [ [[package]] name = "ramshared-winbroker" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "ramshared-broker", "serde", @@ -1041,7 +1041,7 @@ dependencies = [ [[package]] name = "ramshared-winsvc" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "base64", "ramshared-block", @@ -1059,7 +1059,7 @@ dependencies = [ [[package]] name = "ramshared-wsl2d" -version = "0.14.1" +version = "0.14.1" # x-release-please-version dependencies = [ "ramshared-block", "ramshared-broker", diff --git a/crates/ramshared-winsvc/src/service.rs b/crates/ramshared-winsvc/src/service.rs index ba5142407..c6118854c 100644 --- a/crates/ramshared-winsvc/src/service.rs +++ b/crates/ramshared-winsvc/src/service.rs @@ -1131,7 +1131,8 @@ mod tests { &FixedFree(2 << 30), &mut disk, &mut tenant, - ).unwrap(); + ) + .unwrap(); assert!(state.disk_created); assert!(state.registered_queue); assert!(state.online); @@ -1153,7 +1154,8 @@ mod tests { &mut wipe, &mut gates, &mut phases, - ).unwrap(); + ) + .unwrap(); assert!(!state.disk_created); assert!(!state.registered_queue); @@ -1186,7 +1188,11 @@ mod tests { &mut wipe, &mut gates, &mut phases, - ).unwrap(); - assert!(phases.is_empty(), "Teardown from stopped should execute 0 phases"); + ) + .unwrap(); + assert!( + phases.is_empty(), + "Teardown from stopped should execute 0 phases" + ); } }