mirror of
https://github.com/openai/codex.git
synced 2026-10-19 17:28:46 +00:00
60 lines
1.6 KiB
Rust
60 lines
1.6 KiB
Rust
use tokio::io::AsyncWriteExt;
|
|
use tokio::io::duplex;
|
|
|
|
use super::ClientMessage;
|
|
use super::HostRequest;
|
|
use super::MAX_FRAME_BYTES;
|
|
use super::read_frame;
|
|
use super::write_frame;
|
|
|
|
#[tokio::test]
|
|
async fn frame_round_trip_preserves_message() {
|
|
let (mut client, mut server) = duplex(1024);
|
|
let message = ClientMessage::Request {
|
|
id: 7,
|
|
request: HostRequest::CreateSession,
|
|
};
|
|
|
|
write_frame(&mut client, &message)
|
|
.await
|
|
.expect("write frame");
|
|
let decoded = read_frame(&mut server).await.expect("read frame");
|
|
|
|
assert!(matches!(
|
|
decoded,
|
|
Some(ClientMessage::Request {
|
|
id: 7,
|
|
request: HostRequest::CreateSession,
|
|
})
|
|
));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn frame_round_trip_supports_payloads_larger_than_sixteen_mib() {
|
|
let (mut client, mut server) = duplex(64 * 1024);
|
|
let payload = "x".repeat(17 * 1024 * 1024);
|
|
|
|
let (write_result, read_result) = tokio::join!(
|
|
write_frame(&mut client, &payload),
|
|
read_frame::<_, String>(&mut server),
|
|
);
|
|
|
|
write_result.expect("write frame");
|
|
assert_eq!(read_result.expect("read frame"), Some(payload));
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn read_frame_rejects_lengths_above_allocation_limit() {
|
|
let (mut client, mut server) = duplex(16);
|
|
client
|
|
.write_u32(u32::try_from(MAX_FRAME_BYTES + 1).expect("frame limit fits in u32"))
|
|
.await
|
|
.expect("write frame length");
|
|
|
|
let error = read_frame::<_, String>(&mut server)
|
|
.await
|
|
.expect_err("reject oversized frame");
|
|
|
|
assert_eq!(error.kind(), std::io::ErrorKind::InvalidData);
|
|
}
|