From 78a05ab0c103975c3403a56645de4facdb2a2021 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 20 Apr 2026 06:51:30 +0200 Subject: [PATCH] test_infra: Test stale process group is replaced Spawn a process that exits immediately, then spawn another under the same test name. Verify the stale group is detected and a fresh group is created for the second child. Signed-off-by: Anatol Belski --- test_infra/src/lib.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test_infra/src/lib.rs b/test_infra/src/lib.rs index 6fa77302a..bfdccf0c6 100644 --- a/test_infra/src/lib.rs +++ b/test_infra/src/lib.rs @@ -2657,4 +2657,29 @@ mod unit_tests { fn process_registry_cleanup_unknown() { assert!(!ProcessRegistry::cleanup("nonexistent")); } + + #[test] + fn process_registry_stale_group_replaced() { + let name = "test_stale_group"; + + let mut cmd1 = Command::new("sleep"); + cmd1.arg("0"); + let mut child1 = ProcessRegistry::spawn(name, &mut cmd1).unwrap(); + let pid1 = child1.id(); + let _ = child1.wait(); + + // Group is now stale. Next spawn should create a fresh group. + let mut cmd2 = Command::new("sleep"); + cmd2.arg("60"); + let mut child2 = ProcessRegistry::spawn(name, &mut cmd2).unwrap(); + let pid2 = child2.id(); + + assert_ne!(pid1, pid2); + let pgid2 = unsafe { libc::getpgid(pid2 as i32) }; + assert_eq!(pgid2, pid2 as i32); + + assert!(ProcessRegistry::cleanup(name)); + let _ = child2.wait(); + assert!(!is_alive(pid2)); + } }