| Index: net/quic/quic_sent_packet_manager_test.cc
|
| diff --git a/net/quic/quic_sent_packet_manager_test.cc b/net/quic/quic_sent_packet_manager_test.cc
|
| index 7d0bfeddd5675df3445e6c22589d9fa48075f3ab..aef7c10a7c03a4634d32b400f6c2bc4b8c8c3ecd 100644
|
| --- a/net/quic/quic_sent_packet_manager_test.cc
|
| +++ b/net/quic/quic_sent_packet_manager_test.cc
|
| @@ -191,6 +191,7 @@ class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> {
|
| SerializedPacket packet(CreateDataPacket(sequence_number));
|
| packet.retransmittable_frames->AddStreamFrame(
|
| new QuicStreamFrame(1, false, 0, IOVector()));
|
| + packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE);
|
| manager_.OnSerializedPacket(packet);
|
| manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
|
| packet.packet->length(), NOT_RETRANSMISSION,
|
| @@ -981,6 +982,41 @@ TEST_F(QuicSentPacketManagerTest,
|
| EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
|
| }
|
|
|
| +TEST_F(QuicSentPacketManagerTest,
|
| + CryptoHandshakeRetransmissionThenNeuterAndAck) {
|
| + // Send 1 crypto packet.
|
| + SendCryptoPacket(1);
|
| + EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
|
| +
|
| + // Retransmit the crypto packet as 2.
|
| + manager_.OnRetransmissionTimeout();
|
| + RetransmitNextPacket(2);
|
| +
|
| + // Retransmit the crypto packet as 3.
|
| + manager_.OnRetransmissionTimeout();
|
| + RetransmitNextPacket(3);
|
| +
|
| + // Now neuter all unacked unencrypted packets, which occurs when the
|
| + // connection goes forward secure.
|
| + manager_.NeuterUnencryptedPackets();
|
| + QuicPacketSequenceNumber unacked[] = { 1, 2, 3};
|
| + VerifyUnackedPackets(unacked, arraysize(unacked));
|
| + VerifyRetransmittablePackets(NULL, 0);
|
| + EXPECT_FALSE(manager_.HasPendingRetransmissions());
|
| + EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
|
| + EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
|
| +
|
| + // Ensure both packets get discarded when packet 2 is acked.
|
| + ReceivedPacketInfo received_info;
|
| + received_info.largest_observed = 3;
|
| + received_info.missing_packets.insert(1);
|
| + received_info.missing_packets.insert(2);
|
| + ExpectUpdatedRtt(3);
|
| + manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
|
| + VerifyUnackedPackets(NULL, 0);
|
| + VerifyRetransmittablePackets(NULL, 0);
|
| +}
|
| +
|
| TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
|
| QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
|
| // Serialize two data packets and send the latter.
|
| @@ -998,6 +1034,44 @@ TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
|
| EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
|
| }
|
|
|
| +TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) {
|
| + QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50);
|
| + QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt(
|
| + min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
|
| + EXPECT_EQ(min_rtt,
|
| + QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt());
|
| + EXPECT_EQ(min_rtt,
|
| + QuicSentPacketManagerPeer::GetRttStats(
|
| + &manager_)->recent_min_rtt());
|
| +
|
| + // Send two packets with no prior bytes in flight.
|
| + SendDataPacket(1);
|
| + SendDataPacket(2);
|
| +
|
| + clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100));
|
| + // Ack two packets with 100ms RTT observations.
|
| + ReceivedPacketInfo received_info;
|
| + received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
|
| + received_info.largest_observed = 1;
|
| + ExpectAck(1);
|
| + manager_.OnIncomingAck(received_info, clock_.Now());
|
| +
|
| + // First ack does not change recent min rtt.
|
| + EXPECT_EQ(min_rtt,
|
| + QuicSentPacketManagerPeer::GetRttStats(
|
| + &manager_)->recent_min_rtt());
|
| +
|
| + received_info.largest_observed = 2;
|
| + ExpectAck(2);
|
| + manager_.OnIncomingAck(received_info, clock_.Now());
|
| +
|
| + EXPECT_EQ(min_rtt,
|
| + QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt());
|
| + EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100),
|
| + QuicSentPacketManagerPeer::GetRttStats(
|
| + &manager_)->recent_min_rtt());
|
| +}
|
| +
|
| TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
|
| // Send 100 packets and then ensure all are abandoned when the RTO fires.
|
| const size_t kNumSentPackets = 100;
|
|
|