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 1a0885a6faad3a99dcf6589417959756499ba933..e5227d086b356159977ceb21f83ae3871d6efb3a 100644 |
--- a/net/quic/quic_sent_packet_manager_test.cc |
+++ b/net/quic/quic_sent_packet_manager_test.cc |
@@ -113,6 +113,32 @@ class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { |
packets_.back(), 0u, NULL); |
} |
+ void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _)) |
+ .Times(1).WillOnce(Return(true)); |
+ SerializedPacket packet(CreatePacket(sequence_number)); |
+ manager_.OnSerializedPacket(packet, clock_.ApproximateNow()); |
+ manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), |
+ packet.packet->length(), NOT_RETRANSMISSION, |
+ HAS_RETRANSMITTABLE_DATA); |
+ } |
+ |
+ // Based on QuicConnection's WritePendingRetransmissions. |
+ void RetransmitNextPacket( |
+ QuicPacketSequenceNumber retransmission_sequence_number) { |
+ EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
+ EXPECT_CALL(*send_algorithm_, |
+ OnPacketSent(_, retransmission_sequence_number, _, _, _)) |
+ .Times(1).WillOnce(Return(true)); |
+ const QuicSentPacketManager::PendingRetransmission pending = |
+ manager_.NextPendingRetransmission(); |
+ manager_.OnRetransmittedPacket( |
+ pending.sequence_number, retransmission_sequence_number); |
+ manager_.OnPacketSent(retransmission_sequence_number, |
+ clock_.ApproximateNow(), 1000, |
+ pending.transmission_type, HAS_RETRANSMITTABLE_DATA); |
+ } |
+ |
testing::StrictMock<MockHelper> helper_; |
QuicSentPacketManager manager_; |
vector<QuicPacket*> packets_; |
@@ -202,6 +228,11 @@ TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
QuicPacketSequenceNumber unacked[] = { 2 }; |
VerifyUnackedPackets(unacked, arraysize(unacked)); |
VerifyRetransmittablePackets(NULL, 0); |
+ |
+ // Verify that if the retransmission alarm does fire to abandon packet 2, |
+ // the sent packet manager is not notified, since there is no retransmittable |
+ // data outstanding. |
+ manager_.OnRetransmissionTimeout(); |
} |
TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
@@ -221,6 +252,11 @@ TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
QuicPacketSequenceNumber unacked[] = { 3 }; |
VerifyUnackedPackets(unacked, arraysize(unacked)); |
VerifyRetransmittablePackets(NULL, 0); |
+ |
+ // Verify that if the retransmission alarm does fire to abandon packet 3, |
+ // the sent packet manager is not notified, since there is no retransmittable |
+ // data outstanding. |
+ manager_.OnRetransmissionTimeout(); |
} |
TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
@@ -796,14 +832,12 @@ TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
} |
- EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); |
manager_.OnRetransmissionTimeout(); |
} |
TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { |
- EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(1); |
EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
.WillOnce(Return(delay)); |
@@ -814,7 +848,6 @@ TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { |
} |
TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { |
- EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
QuicTime::Delta delay = QuicTime::Delta::FromSeconds(500); |
EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
.WillOnce(Return(delay)); |
@@ -825,6 +858,7 @@ TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { |
} |
TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { |
+ SendDataPacket(1); |
QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
.WillRepeatedly(Return(delay)); |
@@ -833,14 +867,17 @@ TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { |
for (int i = 0; i < 5; ++i) { |
EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); |
delay = delay.Add(delay); |
+ EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); |
EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
manager_.OnRetransmissionTimeout(); |
+ RetransmitNextPacket(i + 2); |
} |
} |
TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { |
FLAGS_limit_rto_increase_for_tests = true; |
+ SendDataPacket(1); |
QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
.WillRepeatedly(Return(delay)); |
@@ -848,8 +885,10 @@ TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { |
// No backoff for the first 5 retransmissions. |
for (int i = 0; i < 5; ++i) { |
EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); |
+ EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); |
EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
manager_.OnRetransmissionTimeout(); |
+ RetransmitNextPacket(i + 2); |
} |
// Then backoff starts |