| use codex_code_mode_protocol::grpc; |
| use pretty_assertions::assert_eq; |
| use prost::Message; |
|
|
| use super::request; |
| use super::request_with_maximum; |
|
|
| #[test] |
| fn completion_size_includes_the_protobuf_envelope() { |
| let output = serde_json::Value::String("a".repeat(100)); |
| let raw_json_bytes = serde_json::to_vec(&output).expect("valid JSON").len(); |
| let completion = request_with_maximum("session", "invocation", Ok(output), raw_json_bytes); |
|
|
| assert!(matches!( |
| completion.outcome, |
| Some(grpc::complete_tool_call_request::Outcome::Failed(grpc::ToolCallFailed { |
| message, |
| })) if message.contains("encoded bytes exceeds the gRPC message limit") |
| )); |
| } |
|
|
| #[test] |
| fn delegate_errors_larger_than_64_kib_are_preserved() { |
| let error = "🦀".repeat(64 * 1024); |
| let completion = request("session", "invocation", Err(error.clone())); |
| let Some(grpc::complete_tool_call_request::Outcome::Failed(failure)) = completion.outcome |
| else { |
| panic!("expected a failed tool completion"); |
| }; |
|
|
| assert_eq!(failure.message, error); |
| } |
|
|
| #[test] |
| fn completion_at_exact_message_limit_is_accepted() { |
| let value = serde_json::json!({ "ok": true }); |
| let expected = request("session", "invocation", Ok(value.clone())); |
| let actual = request_with_maximum("session", "invocation", Ok(value), expected.encoded_len()); |
|
|
| assert_eq!(actual, expected); |
| } |
|
|