diff --git a/codex-rs/core/tests/suite/input_validation.rs b/codex-rs/core/tests/suite/input_validation.rs new file mode 100644 index 0000000000..3a284f1071 --- /dev/null +++ b/codex-rs/core/tests/suite/input_validation.rs @@ -0,0 +1,37 @@ +use codex_core::protocol::EventMsg; +use codex_core::protocol::Op; +use codex_protocol::user_input::UserInput; +use core_test_support::responses::start_mock_server; +use core_test_support::test_codex::test_codex; +use core_test_support::wait_for_event_with_timeout; +use std::sync::Arc; +use std::time::Duration; + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn interrupt_tool_records_history_entries() { + let server = start_mock_server().await; + + let fixture = test_codex().build(&server).await.unwrap(); + let codex = Arc::clone(&fixture.codex); + + let wait_timeout = Duration::from_millis(100); + + let input_300_tokens = "token ".repeat(300_000); + + codex + .submit(Op::UserInput { + items: vec![UserInput::Text { + text: input_300_tokens, + }], + }) + .await + .unwrap(); + + let error_event = + wait_for_event_with_timeout(&codex, |ev| matches!(ev, EventMsg::Error(_)), wait_timeout) + .await; + let EventMsg::Error(error_event) = error_event else { + unreachable!("wait_for_event_with_timeout returned unexpected payload"); + }; + assert_eq!(error_event.message, "invalid input: input too large"); +}