Make core integration test permissions explicit (#39655)

## What changed

- Run local and remote compaction test turns with approvals disabled and an unrestricted permission profile.
- Keep the full test harness available where compaction turns need the configured model and working directory.
- Enable the Windows sandbox for managed-network unified exec process-event coverage.
- Update request snapshots to reflect the resulting `danger-full-access` sandbox metadata.

GitOrigin-RevId: 38eb46ca6ab28246d738e31eab900b2825072c7d
This commit is contained in:
pakrym-oai
2026-08-20 07:52:35 +00:00
committed by copyberry
parent 7ece061767
commit 1802a65571
6 changed files with 36 additions and 15 deletions
+9 -9
View File
@@ -1041,14 +1041,13 @@ async fn multiple_auto_compact_per_task_runs_after_token_limit_hit() {
let server = start_mock_server().await;
let non_openai_provider_name = non_openai_model_provider(&server).name;
let codex = test_codex()
let test = test_codex()
.with_config(move |config| {
config.model_provider.name = non_openai_provider_name;
})
.build(&server)
.await
.expect("build codex")
.codex;
.expect("build codex");
// user message
let user_message = "create an app";
@@ -1146,14 +1145,15 @@ async fn multiple_auto_compact_per_task_runs_after_token_limit_hit() {
let request_log = mount_sse_sequence(&server, bodies).await;
// Start the conversation with the user message
codex
.start_or_steer_turn(TurnInputRequest::user_input(vec![UserInput::Text {
text: user_message.into(),
text_elements: Vec::new(),
}]))
test.codex
.start_or_steer_turn(disabled_permission_user_turn(
user_message,
test.cwd.path().to_path_buf(),
test.session_configured.model.clone(),
))
.await
.expect("submit user input");
wait_for_event(&codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
wait_for_event(&test.codex, |ev| matches!(ev, EventMsg::TurnComplete(_))).await;
// collect the requests payloads from the model
let requests_payloads = request_log.requests();
+13 -3
View File
@@ -36,8 +36,10 @@ use codex_protocol::models::ContentItem;
use codex_protocol::models::FunctionCallOutputBody;
use codex_protocol::models::FunctionCallOutputContentItem;
use codex_protocol::models::FunctionCallOutputPayload;
use codex_protocol::models::PermissionProfile;
use codex_protocol::models::ResponseItem;
use codex_protocol::openai_models::InputModality;
use codex_protocol::protocol::AskForApproval;
use codex_protocol::protocol::ConversationStartParams;
use codex_protocol::protocol::EventMsg;
use codex_protocol::protocol::InterAgentCommunication;
@@ -220,6 +222,14 @@ fn test_codex() -> TestCodexBuilder {
})
}
fn unrestricted_user_turn(items: Vec<UserInput>) -> TurnInputRequest {
TurnInputRequest::user_input(items).with_thread_settings(ThreadSettingsOverrides {
approval_policy: Some(AskForApproval::Never),
permission_profile: Some(PermissionProfile::Disabled),
..Default::default()
})
}
fn remote_realtime_test_codex_builder(
realtime_server: &responses::WebSocketTestServer,
) -> TestCodexBuilder {
@@ -1096,7 +1106,7 @@ async fn assert_remote_manual_compact_request_parity(
.await;
codex
.start_or_steer_turn(TurnInputRequest::user_input(vec![UserInput::Text {
.start_or_steer_turn(unrestricted_user_turn(vec![UserInput::Text {
text: "TURN_ONE_USER".to_string(),
text_elements: Vec::new(),
}]))
@@ -2045,7 +2055,7 @@ async fn remote_compact_runs_automatically() -> Result<()> {
.await;
codex
.start_or_steer_turn(TurnInputRequest::user_input(vec![UserInput::Text {
.start_or_steer_turn(unrestricted_user_turn(vec![UserInput::Text {
text: "hello remote compact".into(),
text_elements: Vec::new(),
}]))
@@ -4564,7 +4574,7 @@ async fn snapshot_request_shape_remote_mid_turn_compaction_multi_summary_reinjec
.await;
codex
.start_or_steer_turn(TurnInputRequest::user_input(vec![UserInput::Text {
.start_or_steer_turn(unrestricted_user_turn(vec![UserInput::Text {
text: "USER_ONE".to_string(),
text_elements: Vec::new(),
}]))
@@ -9,8 +9,11 @@ use codex_history::RolloutItem;
use codex_history::RolloutLine;
use codex_login::CodexAuth;
use codex_protocol::config_types::ServiceTier;
use codex_protocol::models::PermissionProfile;
use codex_protocol::protocol::AskForApproval;
use codex_protocol::protocol::EventMsg;
use codex_protocol::protocol::Op;
use codex_protocol::protocol::ThreadSettingsOverrides;
use codex_protocol::user_input::UserInput;
use core_test_support::hooks::trust_discovered_hooks;
use core_test_support::responses;
@@ -606,7 +609,13 @@ async fn capture_from_requests(
async fn submit_user_input(codex: &codex_core::CodexThread, items: Vec<UserInput>) -> Result<()> {
codex
.start_or_steer_turn(TurnInputRequest::user_input(items))
.start_or_steer_turn(TurnInputRequest::user_input(items).with_thread_settings(
ThreadSettingsOverrides {
approval_policy: Some(AskForApproval::Never),
permission_profile: Some(PermissionProfile::Disabled),
..Default::default()
},
))
.await?;
wait_for_turn_complete(codex).await;
Ok(())
@@ -12,7 +12,7 @@ Scenario: After five varied API-key-auth turns, remote manual compaction omits s
- "thread_id": "<UUID>",
- "turn_id": "<UUID>",
- "x-codex-installation-id": "<UUID>",
- "x-codex-turn-metadata": "{\"installation_id\":\"<UUID>\",\"session_id\":\"<UUID>\",\"thread_id\":\"<UUID>\",\"agent_name\":\"/root\",\"turn_id\":\"<UUID>\",\"window_id\":\"<UUID>:0\",\"request_kind\":\"turn\",\"root_turn_id\":\"<UUID>\",\"sandbox\":\"<SANDBOX>\",\"sandbox_mode\":\"read-only\",\"auto_review_enabled\":false,\"node_repl_auto_review_required\":false,\"node_repl_disabled\":false,\"turn_started_at_unix_ms\":<UNIX_MS>}",
- "x-codex-turn-metadata": "{\"installation_id\":\"<UUID>\",\"session_id\":\"<UUID>\",\"thread_id\":\"<UUID>\",\"agent_name\":\"/root\",\"turn_id\":\"<UUID>\",\"window_id\":\"<UUID>:0\",\"request_kind\":\"turn\",\"root_turn_id\":\"<UUID>\",\"sandbox\":\"<SANDBOX>\",\"sandbox_mode\":\"danger-full-access\",\"auto_review_enabled\":false,\"node_repl_auto_review_required\":false,\"node_repl_disabled\":false,\"turn_started_at_unix_ms\":<UNIX_MS>}",
- "x-codex-window-id": "<UUID>:0"
- },
- "include": [
@@ -12,7 +12,7 @@ Scenario: After five varied ChatGPT-auth turns, remote manual compaction reuses
- "thread_id": "<UUID>",
- "turn_id": "<UUID>",
- "x-codex-installation-id": "<UUID>",
- "x-codex-turn-metadata": "{\"installation_id\":\"<UUID>\",\"session_id\":\"<UUID>\",\"thread_id\":\"<UUID>\",\"agent_name\":\"/root\",\"turn_id\":\"<UUID>\",\"window_id\":\"<UUID>:0\",\"request_kind\":\"turn\",\"root_turn_id\":\"<UUID>\",\"sandbox\":\"<SANDBOX>\",\"sandbox_mode\":\"read-only\",\"auto_review_enabled\":false,\"node_repl_auto_review_required\":false,\"node_repl_disabled\":false,\"turn_started_at_unix_ms\":<UNIX_MS>}",
- "x-codex-turn-metadata": "{\"installation_id\":\"<UUID>\",\"session_id\":\"<UUID>\",\"thread_id\":\"<UUID>\",\"agent_name\":\"/root\",\"turn_id\":\"<UUID>\",\"window_id\":\"<UUID>:0\",\"request_kind\":\"turn\",\"root_turn_id\":\"<UUID>\",\"sandbox\":\"<SANDBOX>\",\"sandbox_mode\":\"danger-full-access\",\"auto_review_enabled\":false,\"node_repl_auto_review_required\":false,\"node_repl_disabled\":false,\"turn_started_at_unix_ms\":<UNIX_MS>}",
- "x-codex-window-id": "<UUID>:0"
- },
- "include": [
@@ -656,6 +656,8 @@ timeout = 900
config.set_windows_elevated_sandbox_enabled(/*value*/ true);
}
if managed_network {
#[cfg(windows)]
config.set_windows_sandbox_enabled(/*value*/ true);
config.approvals_reviewer = ApprovalsReviewer::AutoReview;
config.bypass_hook_trust = true;
}