diff --git a/neqo-transport/src/connection/tests/handshake.rs b/neqo-transport/src/connection/tests/handshake.rs index 4238a19e6d..5691693ce9 100644 --- a/neqo-transport/src/connection/tests/handshake.rs +++ b/neqo-transport/src/connection/tests/handshake.rs @@ -1255,6 +1255,33 @@ fn server_initial_retransmits_identical() { } } +#[test] +fn server_triggered_initial_retransmits_identical() { + let mut now = now(); + let mut client = default_client(); + let mut server = default_server(); + + let ci = client.process(None, now).dgram(); + now += DEFAULT_RTT / 2; + let si1 = server.process(ci.as_ref(), now); + let stats1 = server.stats().frame_tx; + + // Drop si and wait for client to retransmit. + let pto = client.process_output(now).callback(); + now += pto; + let ci = client.process_output(now).dgram(); + + // Feed the RTX'ed ci into the server before its PTO fires. The server + // should process it and then retransmit its Initial packet including + // any coalesced Handshake data. + let si2 = server.process(ci.as_ref(), now); + let stats2 = server.stats().frame_tx; + assert_eq!(si1.dgram().unwrap().len(), si2.dgram().unwrap().len()); + assert_eq!(stats2.all, stats1.all * 2); + assert_eq!(stats2.crypto, stats1.crypto * 2); + assert_eq!(stats2.ack, stats1.ack * 2); +} + #[test] fn client_handshake_retransmits_identical() { let mut now = now(); @@ -1289,23 +1316,3 @@ fn client_handshake_retransmits_identical() { ); } } - -#[test] -fn quicgo() { - let mut now = now(); - let mut client = default_client(); - let mut server = default_server(); - - let ci = client.process(None, now).dgram(); - now += DEFAULT_RTT / 2; - _ = server.process(ci.as_ref(), now); - - // Drop si and wait for client to retransmit. - let pto = client.process_output(now).callback(); - now += pto; - let ci = client.process_output(now).dgram(); - - // Server processes the retransmitted Initial packet. - // now += DEFAULT_RTT / 2; - _ = server.process(ci.as_ref(), now); -}