def setUp(self): self.INITIAL_SPACE = QuicPacketSpace() self.HANDSHAKE_SPACE = QuicPacketSpace() self.ONE_RTT_SPACE = QuicPacketSpace() self.recovery = QuicPacketRecovery(is_client_without_1rtt=False, send_probe=send_probe) self.recovery.spaces = [ self.INITIAL_SPACE, self.HANDSHAKE_SPACE, self.ONE_RTT_SPACE, ]
def setUp(self): self.INITIAL_SPACE = QuicPacketSpace() self.HANDSHAKE_SPACE = QuicPacketSpace() self.ONE_RTT_SPACE = QuicPacketSpace() self.recovery = QuicPacketRecovery( peer_completed_address_validation=True, send_probe=send_probe ) self.recovery.spaces = [ self.INITIAL_SPACE, self.HANDSHAKE_SPACE, self.ONE_RTT_SPACE, ]
class QuicPacketRecoveryTest(TestCase): def setUp(self): self.INITIAL_SPACE = QuicPacketSpace() self.HANDSHAKE_SPACE = QuicPacketSpace() self.ONE_RTT_SPACE = QuicPacketSpace() self.recovery = QuicPacketRecovery(is_client_without_1rtt=False, send_probe=send_probe) self.recovery.spaces = [ self.INITIAL_SPACE, self.HANDSHAKE_SPACE, self.ONE_RTT_SPACE, ] def test_discard_space(self): self.recovery.discard_space(self.INITIAL_SPACE) def test_on_packet_lost_crypto(self): packet = QuicSentPacket( epoch=tls.Epoch.INITIAL, in_flight=True, is_ack_eliciting=True, is_crypto_packet=True, packet_number=0, packet_type=PACKET_TYPE_INITIAL, sent_bytes=1280, sent_time=123.45, ) space = self.INITIAL_SPACE self.recovery.on_packet_sent(packet, space) self.assertEqual(self.recovery.bytes_in_flight, 1280) self.assertEqual(space.ack_eliciting_in_flight, 1) self.assertEqual(len(space.sent_packets), 1) self.recovery.on_packet_lost(packet, space) self.assertEqual(self.recovery.bytes_in_flight, 0) self.assertEqual(space.ack_eliciting_in_flight, 0) self.assertEqual(len(space.sent_packets), 0)
class QuicPacketRecoveryTest(TestCase): def setUp(self): self.INITIAL_SPACE = QuicPacketSpace() self.HANDSHAKE_SPACE = QuicPacketSpace() self.ONE_RTT_SPACE = QuicPacketSpace() self.recovery = QuicPacketRecovery( initial_rtt=0.1, peer_completed_address_validation=True, send_probe=send_probe, ) self.recovery.spaces = [ self.INITIAL_SPACE, self.HANDSHAKE_SPACE, self.ONE_RTT_SPACE, ] def test_discard_space(self): self.recovery.discard_space(self.INITIAL_SPACE) def test_on_ack_received_ack_eliciting(self): packet = QuicSentPacket( epoch=tls.Epoch.ONE_RTT, in_flight=True, is_ack_eliciting=True, is_crypto_packet=False, packet_number=0, packet_type=PACKET_TYPE_ONE_RTT, sent_bytes=1280, sent_time=0.0, ) space = self.ONE_RTT_SPACE # packet sent self.recovery.on_packet_sent(packet, space) self.assertEqual(self.recovery.bytes_in_flight, 1280) self.assertEqual(space.ack_eliciting_in_flight, 1) self.assertEqual(len(space.sent_packets), 1) # packet ack'd self.recovery.on_ack_received(space, ack_rangeset=RangeSet([range(0, 1)]), ack_delay=0.0, now=10.0) self.assertEqual(self.recovery.bytes_in_flight, 0) self.assertEqual(space.ack_eliciting_in_flight, 0) self.assertEqual(len(space.sent_packets), 0) # check RTT self.assertTrue(self.recovery._rtt_initialized) self.assertEqual(self.recovery._rtt_latest, 10.0) self.assertEqual(self.recovery._rtt_min, 10.0) self.assertEqual(self.recovery._rtt_smoothed, 10.0) def test_on_ack_received_non_ack_eliciting(self): packet = QuicSentPacket( epoch=tls.Epoch.ONE_RTT, in_flight=True, is_ack_eliciting=False, is_crypto_packet=False, packet_number=0, packet_type=PACKET_TYPE_ONE_RTT, sent_bytes=1280, sent_time=123.45, ) space = self.ONE_RTT_SPACE # packet sent self.recovery.on_packet_sent(packet, space) self.assertEqual(self.recovery.bytes_in_flight, 1280) self.assertEqual(space.ack_eliciting_in_flight, 0) self.assertEqual(len(space.sent_packets), 1) # packet ack'd self.recovery.on_ack_received(space, ack_rangeset=RangeSet([range(0, 1)]), ack_delay=0.0, now=10.0) self.assertEqual(self.recovery.bytes_in_flight, 0) self.assertEqual(space.ack_eliciting_in_flight, 0) self.assertEqual(len(space.sent_packets), 0) # check RTT self.assertFalse(self.recovery._rtt_initialized) self.assertEqual(self.recovery._rtt_latest, 0.0) self.assertEqual(self.recovery._rtt_min, math.inf) self.assertEqual(self.recovery._rtt_smoothed, 0.0) def test_on_packet_lost_crypto(self): packet = QuicSentPacket( epoch=tls.Epoch.INITIAL, in_flight=True, is_ack_eliciting=True, is_crypto_packet=True, packet_number=0, packet_type=PACKET_TYPE_INITIAL, sent_bytes=1280, sent_time=0.0, ) space = self.INITIAL_SPACE self.recovery.on_packet_sent(packet, space) self.assertEqual(self.recovery.bytes_in_flight, 1280) self.assertEqual(space.ack_eliciting_in_flight, 1) self.assertEqual(len(space.sent_packets), 1) self.recovery._detect_loss(space, now=1.0) self.assertEqual(self.recovery.bytes_in_flight, 0) self.assertEqual(space.ack_eliciting_in_flight, 0) self.assertEqual(len(space.sent_packets), 0)