From 4b9d05a18504f10a577ee351735ef9d21643ab2b Mon Sep 17 00:00:00 2001 From: DuProcess <273172371+DuProcess@users.noreply.github.com> Date: Sun, 12 Jul 2026 12:18:09 -0400 Subject: [PATCH] Cover traced ticket reattach recovery --- tests/integration_smoke.rs | 57 +++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/tests/integration_smoke.rs b/tests/integration_smoke.rs index 9eb34d3..157e3bd 100644 --- a/tests/integration_smoke.rs +++ b/tests/integration_smoke.rs @@ -152,21 +152,41 @@ fn write_server_config_with_retransmit_window( } fn start_server(dir: &tempfile::TempDir, config: &std::path::Path) -> Child { + start_server_with_trace(dir, config, None) +} + +fn start_server_with_trace( + dir: &tempfile::TempDir, + config: &std::path::Path, + trace: Option<&Path>, +) -> Child { let server = env!("CARGO_BIN_EXE_dosh-server"); - let child = Command::new(server) + let mut command = Command::new(server); + command .arg("serve") .arg("--config") .arg(config) .env("HOME", dir.path()) .stdout(Stdio::null()) - .stderr(Stdio::null()) - .spawn() - .unwrap(); + .stderr(Stdio::null()); + if let Some(trace) = trace { + command.env("DOSH_TRACE", trace); + } + let child = command.spawn().unwrap(); thread::sleep(Duration::from_millis(500)); child } fn attach_once(dir: &tempfile::TempDir, port: u16, cache: bool) -> std::process::Output { + attach_once_with_trace(dir, port, cache, None) +} + +fn attach_once_with_trace( + dir: &tempfile::TempDir, + port: u16, + cache: bool, + trace: Option<&Path>, +) -> std::process::Output { let client = env!("CARGO_BIN_EXE_dosh-client"); let mut cmd = Command::new(client); cmd.arg("--local-auth") @@ -181,6 +201,9 @@ fn attach_once(dir: &tempfile::TempDir, port: u16, cache: bool) -> std::process: if !cache { cmd.arg("--no-cache"); } + if let Some(trace) = trace { + cmd.env("DOSH_TRACE", trace); + } cmd.output().unwrap() } @@ -1564,7 +1587,9 @@ fn ticket_attach_after_server_restart_smoke() { let dir = tempfile::tempdir().unwrap(); let port = free_udp_port(); let config = write_server_config(&dir, port); - let mut server = start_server(&dir, &config); + let server_trace = dir.path().join("server-trace.log"); + let client_trace = dir.path().join("client-trace.log"); + let mut server = start_server_with_trace(&dir, &config, Some(&server_trace)); let first = attach_once(&dir, port, true); let _ = server.kill(); let _ = server.wait(); @@ -1574,8 +1599,8 @@ fn ticket_attach_after_server_restart_smoke() { String::from_utf8_lossy(&first.stderr) ); - let mut server = start_server(&dir, &config); - let second = attach_once(&dir, port, true); + let mut server = start_server_with_trace(&dir, &config, Some(&server_trace)); + let second = attach_once_with_trace(&dir, port, true, Some(&client_trace)); let _ = server.kill(); let _ = server.wait(); let stderr = String::from_utf8_lossy(&second.stderr); @@ -1584,6 +1609,24 @@ fn ticket_attach_after_server_restart_smoke() { stderr.contains("udp_ticket_attach_ready"), "stderr={stderr}" ); + let server_trace = fs::read_to_string(&server_trace).unwrap(); + let client_trace = fs::read_to_string(&client_trace).unwrap(); + assert!( + server_trace.contains("event=server.ticket_attach_start"), + "server trace={server_trace}" + ); + assert!( + server_trace.contains("event=server.ticket_attach_ok"), + "server trace={server_trace}" + ); + assert!( + client_trace.contains("event=client.ticket_attach_start"), + "client trace={client_trace}" + ); + assert!( + client_trace.contains("event=client.ticket_attach_ok"), + "client trace={client_trace}" + ); } #[test]