From 8e6f70ad0d4334b8345d626247d18596e486fd8f Mon Sep 17 00:00:00 2001 From: viyatb-oai Date: Fri, 8 May 2026 21:35:44 -0700 Subject: [PATCH] test(rmcp-client): retry transient unix script exec race Co-authored-by: Codex noreply@openai.com --- codex-rs/rmcp-client/src/program_resolver.rs | 21 +++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/codex-rs/rmcp-client/src/program_resolver.rs b/codex-rs/rmcp-client/src/program_resolver.rs index 3666b1871b..395b330d7d 100644 --- a/codex-rs/rmcp-client/src/program_resolver.rs +++ b/codex-rs/rmcp-client/src/program_resolver.rs @@ -75,10 +75,25 @@ mod tests { #[tokio::test] async fn test_unix_executes_script_without_extension() -> Result<()> { let env = TestExecutableEnv::new()?; - let mut cmd = Command::new(&env.program_name); - cmd.envs(&env.mcp_env); + // Linux can transiently report ETXTBSY while the freshly written test + // script is becoming executable on the backing filesystem. + let mut retries = 0; + let output = loop { + let mut cmd = Command::new(&env.program_name); + cmd.envs(&env.mcp_env); + + let output = cmd.output().await; + if !output + .as_ref() + .is_err_and(|err| err.kind() == std::io::ErrorKind::ExecutableFileBusy) + || retries == 2 + { + break output; + } + retries += 1; + tokio::time::sleep(std::time::Duration::from_millis(10)).await; + }; - let output = cmd.output().await; assert!( output.is_ok(), "Unix should execute PATH-resolved scripts directly: {output:?}"