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..900573bdef3eabc8ed98ee25e1439e123c7f2253 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,36 @@ 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); |
+ |
+ // Now neuter all unacked unencrypted packets, which occurs when the |
+ // connection goes forward secure. |
+ manager_.NeuterUnencryptedPackets(); |
+ QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
+ 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 = 2; |
+ received_info.missing_packets.insert(1); |
+ ExpectUpdatedRtt(2); |
+ 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. |