| 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 a0ac58e437868ad136d163816796220b12ae993a..a83c21704af0ab298988d3d876791c41fbad0137 100644
|
| --- a/net/quic/quic_sent_packet_manager_test.cc
|
| +++ b/net/quic/quic_sent_packet_manager_test.cc
|
| @@ -149,6 +149,16 @@ class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> {
|
| HAS_RETRANSMITTABLE_DATA);
|
| }
|
|
|
| + void SendFecPacket(QuicPacketSequenceNumber sequence_number) {
|
| + EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _))
|
| + .Times(1).WillOnce(Return(true));
|
| + SerializedPacket packet(CreateFecPacket(sequence_number));
|
| + manager_.OnSerializedPacket(packet);
|
| + manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
|
| + packet.packet->length(), NOT_RETRANSMISSION,
|
| + NO_RETRANSMITTABLE_DATA);
|
| + }
|
| +
|
| // Based on QuicConnection's WritePendingRetransmissions.
|
| void RetransmitNextPacket(
|
| QuicPacketSequenceNumber retransmission_sequence_number) {
|
| @@ -407,6 +417,40 @@ TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
|
| EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
|
| }
|
|
|
| +TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) {
|
| + SendDataPacket(1);
|
| + SendDataPacket(2);
|
| + SendFecPacket(3);
|
| + SendDataPacket(4);
|
| +
|
| + // Ack 2 and 3, and mark 1 as revived.
|
| + ReceivedPacketInfo received_info;
|
| + received_info.largest_observed = 3;
|
| + received_info.missing_packets.insert(1);
|
| + received_info.revived_packets.insert(1);
|
| + EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
|
| + EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2);
|
| + manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
|
| +
|
| + EXPECT_FALSE(manager_.HasPendingRetransmissions());
|
| + QuicPacketSequenceNumber unacked[] = { 1, 4 };
|
| + VerifyUnackedPackets(unacked, arraysize(unacked));
|
| + EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
|
| + QuicPacketSequenceNumber retransmittable[] = { 4 };
|
| + VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
|
| +
|
| + // Ack the 4th packet and expect the 1st to be considered lost.
|
| + received_info.largest_observed = 4;
|
| + EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
|
| + EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _));
|
| + EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _));
|
| + EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _));
|
| + manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
|
| +
|
| + EXPECT_FALSE(manager_.HasPendingRetransmissions());
|
| + VerifyRetransmittablePackets(NULL, 0);
|
| +}
|
| +
|
| TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
|
| SendDataPacket(1);
|
| RetransmitAndSendPacket(1, 2);
|
|
|