From ff8609b6d435039fb282e6ffe78eaa6684bf27ea Mon Sep 17 00:00:00 2001 From: Benjamin Saunders Date: Sun, 28 Apr 2024 20:32:56 -0700 Subject: [PATCH] Verify that GSO is used for simple large streams --- quinn-proto/src/tests/mod.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/quinn-proto/src/tests/mod.rs b/quinn-proto/src/tests/mod.rs index 9752d5c6b..8735cab69 100644 --- a/quinn-proto/src/tests/mod.rs +++ b/quinn-proto/src/tests/mod.rs @@ -2990,3 +2990,25 @@ fn endpoint_and_connection_impl_send_sync() { is_send_sync::(); is_send_sync::(); } + +#[test] +fn stream_gso() { + let _guard = subscribe(); + let mut pair = Pair::default(); + let (client_ch, _) = pair.connect(); + + let s = pair.client_streams(client_ch).open(Dir::Uni).unwrap(); + + let initial_ios = pair.client_conn_mut(client_ch).stats().udp_tx.ios; + + // Send 20KiB of stream data, which comfortably fits inside two `tests::util::MAX_DATAGRAMS` + // datagram batches + info!("sending"); + for _ in 0..20 { + pair.client_send(client_ch, s).write(&[0; 1024]).unwrap(); + } + pair.client_send(client_ch, s).finish().unwrap(); + pair.drive(); + let final_ios = pair.client_conn_mut(client_ch).stats().udp_tx.ios; + assert_eq!(final_ios - initial_ios, 2); +}