mirror of
https://github.com/openai/codex.git
synced 2026-04-25 23:24:55 +00:00
## Summary\n- add an exec-server package-local test helper binary that can run exec-server and fs-helper flows\n- route exec-server filesystem tests through that helper instead of cross-crate codex helper binaries\n- stop relying on Bazel-only extra binary wiring for these tests\n\n## Testing\n- not run (per repo guidance for codex changes) --------- Co-authored-by: Codex <noreply@openai.com>
78 lines
2.3 KiB
Rust
78 lines
2.3 KiB
Rust
use std::path::Path;
|
|
|
|
use codex_arg0::Arg0DispatchPaths;
|
|
use codex_arg0::Arg0PathEntryGuard;
|
|
use codex_arg0::arg0_dispatch;
|
|
use tempfile::TempDir;
|
|
|
|
pub struct TestBinaryDispatchGuard {
|
|
_codex_home: TempDir,
|
|
arg0: Arg0PathEntryGuard,
|
|
_previous_codex_home: Option<std::ffi::OsString>,
|
|
}
|
|
|
|
impl TestBinaryDispatchGuard {
|
|
pub fn paths(&self) -> &Arg0DispatchPaths {
|
|
self.arg0.paths()
|
|
}
|
|
}
|
|
|
|
pub enum TestBinaryDispatchMode {
|
|
DispatchArg0Only,
|
|
Skip,
|
|
InstallAliases,
|
|
}
|
|
|
|
pub fn configure_test_binary_dispatch<F>(
|
|
codex_home_prefix: &str,
|
|
classify: F,
|
|
) -> Option<TestBinaryDispatchGuard>
|
|
where
|
|
F: FnOnce(&str, Option<&str>) -> TestBinaryDispatchMode,
|
|
{
|
|
let mut args = std::env::args_os();
|
|
let argv0 = args.next().unwrap_or_default();
|
|
let exe_name = Path::new(&argv0)
|
|
.file_name()
|
|
.and_then(|name| name.to_str())
|
|
.unwrap_or("");
|
|
let argv1 = args.next();
|
|
match classify(exe_name, argv1.as_deref().and_then(|arg| arg.to_str())) {
|
|
TestBinaryDispatchMode::DispatchArg0Only => {
|
|
let _ = arg0_dispatch();
|
|
None
|
|
}
|
|
TestBinaryDispatchMode::Skip => None,
|
|
TestBinaryDispatchMode::InstallAliases => {
|
|
let codex_home = match tempfile::Builder::new().prefix(codex_home_prefix).tempdir() {
|
|
Ok(codex_home) => codex_home,
|
|
Err(error) => panic!("failed to create test CODEX_HOME: {error}"),
|
|
};
|
|
let previous_codex_home = std::env::var_os("CODEX_HOME");
|
|
// Safety: this runs from a test ctor before test threads begin.
|
|
unsafe {
|
|
std::env::set_var("CODEX_HOME", codex_home.path());
|
|
}
|
|
|
|
let arg0 = match arg0_dispatch() {
|
|
Some(arg0) => arg0,
|
|
None => panic!("failed to configure arg0 dispatch aliases for test binary"),
|
|
};
|
|
match previous_codex_home.as_ref() {
|
|
Some(value) => unsafe {
|
|
std::env::set_var("CODEX_HOME", value);
|
|
},
|
|
None => unsafe {
|
|
std::env::remove_var("CODEX_HOME");
|
|
},
|
|
}
|
|
|
|
Some(TestBinaryDispatchGuard {
|
|
_codex_home: codex_home,
|
|
arg0,
|
|
_previous_codex_home: previous_codex_home,
|
|
})
|
|
}
|
|
}
|
|
}
|