mirror of
https://github.com/openai/codex.git
synced 2026-05-15 16:53:05 +00:00
## Why `CODEX_RS_SSE_FIXTURE` let integration-style CLI, exec, and TUI tests bypass the normal Responses transport by reading SSE from local files. That kept test-only behavior wired through production client code. The affected tests can stay hermetic by using the existing `core_test_support::responses` mock server and passing `openai_base_url` instead. ## What Changed - Removed the `CODEX_RS_SSE_FIXTURE` flag, `codex_api::stream_from_fixture`, the `env-flags` dependency, and the checked-in SSE fixture files. - Repointed the affected core, exec, and TUI tests at `MockServer` with the existing SSE event constructors. - Removed the Bazel test data plumbing for the deleted fixtures and refreshed cargo/Bazel lock state. ## Verification - `cargo build -p codex-cli` - `cargo test -p codex-api` - `cargo test -p codex-core --test all responses_api_stream_cli` - `cargo test -p codex-core --test all integration_creates_and_checks_session_file` - `cargo test -p codex-exec --test all ephemeral` - `cargo test -p codex-exec --test all resume` - `cargo test -p codex-tui --test all resume_startup_does_not_consume_model_availability_nux_count` - `just bazel-lock-update` - `just bazel-lock-check` - `just fix -p codex-api -p codex-core -p codex-exec -p codex-tui` - `git diff --check`
68 lines
2.0 KiB
Rust
68 lines
2.0 KiB
Rust
#![cfg(not(target_os = "windows"))]
|
|
#![allow(clippy::expect_used, clippy::unwrap_used)]
|
|
|
|
use core_test_support::responses;
|
|
use core_test_support::skip_if_no_network;
|
|
use core_test_support::test_codex_exec::test_codex_exec;
|
|
use walkdir::WalkDir;
|
|
use wiremock::MockServer;
|
|
|
|
fn exec_sse_response() -> String {
|
|
responses::sse(vec![
|
|
responses::ev_response_created("resp-ephemeral"),
|
|
responses::ev_assistant_message("msg-ephemeral", "ephemeral response"),
|
|
responses::ev_completed("resp-ephemeral"),
|
|
])
|
|
}
|
|
|
|
fn session_rollout_count(home_path: &std::path::Path) -> usize {
|
|
let sessions_dir = home_path.join("sessions");
|
|
if !sessions_dir.exists() {
|
|
return 0;
|
|
}
|
|
|
|
WalkDir::new(sessions_dir)
|
|
.into_iter()
|
|
.filter_map(Result::ok)
|
|
.filter(|entry| entry.file_type().is_file())
|
|
.filter(|entry| entry.file_name().to_string_lossy().ends_with(".jsonl"))
|
|
.count()
|
|
}
|
|
|
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
|
async fn persists_rollout_file_by_default() -> anyhow::Result<()> {
|
|
skip_if_no_network!(Ok(()));
|
|
|
|
let test = test_codex_exec();
|
|
let server = MockServer::start().await;
|
|
let _response_mock = responses::mount_sse_once(&server, exec_sse_response()).await;
|
|
|
|
test.cmd_with_server(&server)
|
|
.arg("--skip-git-repo-check")
|
|
.arg("default persistence behavior")
|
|
.assert()
|
|
.code(0);
|
|
|
|
assert_eq!(session_rollout_count(test.home_path()), 1);
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
|
async fn does_not_persist_rollout_file_in_ephemeral_mode() -> anyhow::Result<()> {
|
|
skip_if_no_network!(Ok(()));
|
|
|
|
let test = test_codex_exec();
|
|
let server = MockServer::start().await;
|
|
let _response_mock = responses::mount_sse_once(&server, exec_sse_response()).await;
|
|
|
|
test.cmd_with_server(&server)
|
|
.arg("--skip-git-repo-check")
|
|
.arg("--ephemeral")
|
|
.arg("ephemeral behavior")
|
|
.assert()
|
|
.code(0);
|
|
|
|
assert_eq!(session_rollout_count(test.home_path()), 0);
|
|
Ok(())
|
|
}
|