mirror of
https://github.com/n0-computer/noq.git
synced 2026-09-23 11:45:25 +00:00
Test interaction between large datagram frames and ACKs
This commit is contained in:
committed by
Dirkjan Ochtman
parent
55be92985a
commit
50708cf120
@@ -3074,3 +3074,32 @@ fn gso_truncation() {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Verify that a large application datagram is sent successfully when an ACK frame too large to fit
|
||||
/// alongside it is also queued, in exactly 2 UDP datagrams.
|
||||
#[test]
|
||||
fn large_datagram_with_acks() {
|
||||
let _guard = subscribe();
|
||||
let mut pair = Pair::default();
|
||||
let (client_ch, server_ch) = pair.connect();
|
||||
|
||||
// Force the client to generate a large ACK frame by dropping several packets
|
||||
for _ in 0..10 {
|
||||
pair.server_conn_mut(server_ch).ping();
|
||||
pair.drive_server();
|
||||
pair.client.inbound.pop_back();
|
||||
pair.server_conn_mut(server_ch).ping();
|
||||
pair.drive_server();
|
||||
}
|
||||
|
||||
let max_size = pair.client_datagrams(client_ch).max_size().unwrap();
|
||||
let msg = Bytes::from(vec![0; max_size]);
|
||||
pair.client_datagrams(client_ch)
|
||||
.send(msg.clone(), true)
|
||||
.unwrap();
|
||||
let initial_datagrams = pair.client_conn_mut(client_ch).stats().udp_tx.datagrams;
|
||||
pair.drive();
|
||||
let final_datagrams = pair.client_conn_mut(client_ch).stats().udp_tx.datagrams;
|
||||
assert_eq!(pair.server_datagrams(server_ch).recv().unwrap(), msg);
|
||||
assert_eq!(final_datagrams - initial_datagrams, 2);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user