diff --git a/crates/spt/tests/twohost_cli.rs b/crates/spt/tests/twohost_cli.rs index 9d3bb07..520878d 100644 --- a/crates/spt/tests/twohost_cli.rs +++ b/crates/spt/tests/twohost_cli.rs @@ -65,7 +65,7 @@ use std::collections::BTreeMap; use std::io::Read; use std::path::{Path, PathBuf}; -use std::process::{Child, Command, Output, Stdio}; +use std::process::{Child, Command, Stdio}; use std::sync::{Arc, Mutex}; use std::thread; use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; @@ -210,15 +210,7 @@ fn rig_wait(what: &str, deadline: Duration, mut probe: impl FnMut() -> bool) { panic!("never converged on the rig: {what}"); } -fn output_bounded(mut cmd: Command, deadline: Duration) -> Output { - let (tx, rx) = std::sync::mpsc::channel(); - thread::spawn(move || { - let _ = tx.send(cmd.output()); - }); - rx.recv_timeout(deadline) - .expect("captured spt call must complete within its deadline") - .expect("run spt") -} + fn ready_pid(path: &Path) -> Option { let s = std::fs::read_to_string(path).ok()?; @@ -250,10 +242,7 @@ fn kill_pid(pid: u32) { let _ = Command::new("kill").args(["-9", &pid.to_string()]).output(); } -fn sibling_bin(name: &str) -> PathBuf { - PathBuf::from(env!("CARGO_BIN_EXE_spt")) - .with_file_name(format!("{name}{}", std::env::consts::EXE_SUFFIX)) -} + /// One REAL `spt daemon run` under `home`, readiness-gated on `brain.ready`, /// reaped SCOPED on drop (stop verb first, then pid kills) — a rung-assert @@ -308,7 +297,7 @@ impl DaemonGuard { cmd.no_window() .args(["daemon", "stop"]) .env("SPT_HOME", &self.home); - let out = output_bounded(cmd, Duration::from_secs(30)); + let out = common::output_bounded(cmd, Duration::from_secs(30)); println!( "GATED: daemon stop rc={:?} out={} err={}", out.status.code(), @@ -344,7 +333,7 @@ impl Drop for DaemonGuard { cmd.no_window() .args(["daemon", "stop"]) .env("SPT_HOME", &self.home); - let _ = output_bounded(cmd, Duration::from_secs(20)); + let _ = common::output_bounded(cmd, Duration::from_secs(20)); self.reap_pids(); } } @@ -541,7 +530,7 @@ fn gated_cli_role_b() { let home = TempDir::new().expect("temp home"); std::env::set_var("SPT_HOME", home.path()); let spt = PathBuf::from(env!("CARGO_BIN_EXE_spt")); - let mock_session = sibling_bin("mock-session"); + let mock_session = common::sibling_bin("mock-session"); assert!( mock_session.exists(), "the dummy-harness program must be built: {} \ @@ -904,7 +893,7 @@ fn gated_cli_role_b() { list.no_window() .args(["knock", "list", "--for", ID_FORKGAP]) .env("SPT_HOME", home.path()); - let out = output_bounded(list, Duration::from_secs(60)); + let out = common::output_bounded(list, Duration::from_secs(60)); let listing = String::from_utf8_lossy(&out.stdout).to_string(); assert!( listing.contains("unable to RESOLVE"), @@ -943,7 +932,7 @@ fn gated_cli_role_b() { "--admit-node", ]) .env("SPT_HOME", home.path()); - let out = output_bounded(grant, Duration::from_secs(60)); + let out = common::output_bounded(grant, Duration::from_secs(60)); let echo = String::from_utf8_lossy(&out.stdout).to_string(); assert!( out.status.success(), @@ -978,7 +967,7 @@ fn gated_cli_role_b() { "--admit-node", ]) .env("SPT_HOME", home.path()); - let out = output_bounded(quiet, Duration::from_secs(60)); + let out = common::output_bounded(quiet, Duration::from_secs(60)); let quiet_echo = String::from_utf8_lossy(&out.stdout).to_string(); let quiet_err = String::from_utf8_lossy(&out.stderr).to_string(); // [int->REQ-ACL-GRANT-NODES-POLICY] @@ -1129,7 +1118,7 @@ fn gated_cli_role_a() { wake.no_window() .args(["endpoint", "wake", &wake_target]) .env("SPT_HOME", home.path()); - let out = output_bounded(wake, Duration::from_secs(120)); + let out = common::output_bounded(wake, Duration::from_secs(120)); // TAG:value tokens paint on STDERR across the ecosystem (cmd_rest's // eprintln! arms) — stdout stays reserved for payload surfaces. let stderr = String::from_utf8_lossy(&out.stderr); @@ -1200,7 +1189,7 @@ fn gated_cli_role_a() { &rig.subnet, ]) .env("SPT_HOME", home.path()); - let out = output_bounded(fork, Duration::from_secs(180)); + let out = common::output_bounded(fork, Duration::from_secs(180)); let fork_err = String::from_utf8_lossy(&out.stderr).to_string(); assert!( fork_err.contains("FORKED:"), @@ -1262,7 +1251,7 @@ fn gated_cli_role_a() { "--send-only", ]) .env("SPT_HOME", home.path()); - let out = output_bounded(knock, Duration::from_secs(120)); + let out = common::output_bounded(knock, Duration::from_secs(120)); let knock_out = String::from_utf8_lossy(&out.stdout).to_string(); let knock_err = String::from_utf8_lossy(&out.stderr).to_string(); assert!(