OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 }; | 25 }; |
26 | 26 |
27 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { | 27 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { |
28 protected: | 28 protected: |
29 QuicSentPacketManagerTest() | 29 QuicSentPacketManagerTest() |
30 : manager_(true, &helper_, &clock_, kFixRate), | 30 : manager_(true, &helper_, &clock_, kFixRate), |
31 send_algorithm_(new StrictMock<MockSendAlgorithm>) { | 31 send_algorithm_(new StrictMock<MockSendAlgorithm>) { |
32 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); | 32 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); |
33 // Disable tail loss probes for most tests. | 33 // Disable tail loss probes for most tests. |
34 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); | 34 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); |
| 35 // Advance the time 1s so the send times are never QuicTime::Zero. |
| 36 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
35 } | 37 } |
36 | 38 |
37 ~QuicSentPacketManagerTest() { | 39 ~QuicSentPacketManagerTest() { |
38 STLDeleteElements(&packets_); | 40 STLDeleteElements(&packets_); |
39 } | 41 } |
40 | 42 |
41 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 43 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
42 size_t num_packets) { | 44 size_t num_packets) { |
43 if (num_packets == 0) { | 45 if (num_packets == 0) { |
44 EXPECT_FALSE(manager_.HasUnackedPackets()); | 46 EXPECT_FALSE(manager_.HasUnackedPackets()); |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 237 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
236 | 238 |
237 // No unacked packets remain. | 239 // No unacked packets remain. |
238 VerifyUnackedPackets(NULL, 0); | 240 VerifyUnackedPackets(NULL, 0); |
239 VerifyRetransmittablePackets(NULL, 0); | 241 VerifyRetransmittablePackets(NULL, 0); |
240 } | 242 } |
241 | 243 |
242 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 244 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
243 SendDataPacket(1); | 245 SendDataPacket(1); |
244 RetransmitPacket(1, 2); | 246 RetransmitPacket(1, 2); |
| 247 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 248 clock_.AdvanceTime(rtt); |
245 | 249 |
246 // Ack 1 but not 2. | 250 // Ack 1 but not 2. |
247 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); | 251 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt)); |
| 252 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
248 ReceivedPacketInfo received_info; | 253 ReceivedPacketInfo received_info; |
249 received_info.largest_observed = 1; | 254 received_info.largest_observed = 1; |
250 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 255 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow())); |
251 | 256 |
252 // 2 remains unacked, but no packets have retransmittable data. | 257 // 2 remains unacked, but no packets have retransmittable data. |
253 QuicPacketSequenceNumber unacked[] = { 2 }; | 258 QuicPacketSequenceNumber unacked[] = { 2 }; |
254 VerifyUnackedPackets(unacked, arraysize(unacked)); | 259 VerifyUnackedPackets(unacked, arraysize(unacked)); |
255 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 260 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
256 VerifyRetransmittablePackets(NULL, 0); | 261 VerifyRetransmittablePackets(NULL, 0); |
257 | 262 |
258 // Verify that the retransmission alarm would not fire, | 263 // Verify that the retransmission alarm would not fire, |
259 // since there is no retransmittable data outstanding. | 264 // since there is no retransmittable data outstanding. |
260 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 265 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
261 } | 266 } |
262 | 267 |
263 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { | 268 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { |
264 SendDataPacket(1); | 269 SendDataPacket(1); |
265 RetransmitPacket(1, 2); | 270 RetransmitPacket(1, 2); |
266 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _)) | 271 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _)) |
267 .WillOnce(Return(true)); | 272 .WillOnce(Return(true)); |
268 manager_.OnPacketSent(2, clock_.ApproximateNow(), 1000, | 273 manager_.OnPacketSent(2, clock_.ApproximateNow(), 1000, |
269 NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 274 NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 275 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 276 clock_.AdvanceTime(rtt); |
270 | 277 |
271 // First, ACK packet 1 which makes packet 2 non-retransmittable. | 278 // First, ACK packet 1 which makes packet 2 non-retransmittable. |
272 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); | 279 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt)); |
| 280 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
273 ReceivedPacketInfo received_info; | 281 ReceivedPacketInfo received_info; |
274 received_info.largest_observed = 1; | 282 received_info.largest_observed = 1; |
275 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 283 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow())); |
276 | 284 |
277 SendDataPacket(3); | 285 SendDataPacket(3); |
278 SendDataPacket(4); | 286 SendDataPacket(4); |
279 SendDataPacket(5); | 287 SendDataPacket(5); |
| 288 clock_.AdvanceTime(rtt); |
| 289 |
280 // Next, NACK packet 2 three times. | 290 // Next, NACK packet 2 three times. |
281 received_info.largest_observed = 3; | 291 received_info.largest_observed = 3; |
282 received_info.missing_packets.insert(2); | 292 received_info.missing_packets.insert(2); |
283 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _, _)); | 293 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt)); |
284 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 294 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)); |
| 295 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow())); |
285 | 296 |
286 received_info.largest_observed = 4; | 297 received_info.largest_observed = 4; |
287 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _, _)); | 298 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt)); |
288 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 299 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)); |
| 300 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow())); |
289 | 301 |
290 received_info.largest_observed = 5; | 302 received_info.largest_observed = 5; |
291 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _, _)); | 303 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt)); |
| 304 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); |
292 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); | 305 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); |
293 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); | 306 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); |
294 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 307 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow())); |
295 | 308 |
296 // No packets remain unacked. | 309 // No packets remain unacked. |
297 VerifyUnackedPackets(NULL, 0); | 310 VerifyUnackedPackets(NULL, 0); |
298 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 311 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
299 VerifyRetransmittablePackets(NULL, 0); | 312 VerifyRetransmittablePackets(NULL, 0); |
300 | 313 |
301 // Verify that the retransmission alarm would not fire, | 314 // Verify that the retransmission alarm would not fire, |
302 // since there is no retransmittable data outstanding. | 315 // since there is no retransmittable data outstanding. |
303 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 316 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
304 } | 317 } |
305 | 318 |
306 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { | 319 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { |
307 SendDataPacket(1); | 320 SendDataPacket(1); |
308 RetransmitAndSendPacket(1, 2); | 321 RetransmitAndSendPacket(1, 2); |
309 | 322 |
310 // Fire the RTO, which will mark 2 for retransmission (but will not send it). | 323 // Fire the RTO, which will mark 2 for retransmission (but will not send it). |
311 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 324 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
312 manager_.OnRetransmissionTimeout(); | 325 manager_.OnRetransmissionTimeout(); |
313 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 326 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
314 | 327 |
315 // Ack 1 but not 2, before 2 is able to be sent. | 328 // Ack 1 but not 2, before 2 is able to be sent. |
316 // Since 1 has been retransmitted, it has already been lost, and so the | 329 // Since 1 has been retransmitted, it has already been lost, and so the |
317 // send algorithm is not informed that it has been ACK'd. | 330 // send algorithm is not informed that it has been ACK'd. |
318 ReceivedPacketInfo received_info; | 331 ReceivedPacketInfo received_info; |
319 received_info.largest_observed = 1; | 332 received_info.largest_observed = 1; |
320 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 333 EXPECT_CALL(*send_algorithm_, UpdateRtt(QuicTime::Delta::Zero())); |
| 334 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow())); |
321 | 335 |
322 // Since 2 was marked for retransmit, when 1 is acked, 2 is discarded. | 336 // Since 2 was marked for retransmit, when 1 is acked, 2 is discarded. |
323 VerifyUnackedPackets(NULL, 0); | 337 VerifyUnackedPackets(NULL, 0); |
324 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 338 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
325 VerifyRetransmittablePackets(NULL, 0); | 339 VerifyRetransmittablePackets(NULL, 0); |
326 | 340 |
327 // Verify that the retransmission alarm would not fire, | 341 // Verify that the retransmission alarm would not fire, |
328 // since there is no retransmittable data outstanding. | 342 // since there is no retransmittable data outstanding. |
329 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 343 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
330 } | 344 } |
331 | 345 |
332 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { | 346 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
333 SendDataPacket(1); | 347 SendDataPacket(1); |
334 RetransmitPacket(1, 2); | 348 RetransmitPacket(1, 2); |
335 RetransmitPacket(2, 3); | 349 RetransmitPacket(2, 3); |
| 350 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 351 clock_.AdvanceTime(rtt); |
336 | 352 |
337 // Ack 1 but not 2 or 3. | 353 // Ack 1 but not 2 or 3. |
338 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); | 354 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt)); |
| 355 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
339 ReceivedPacketInfo received_info; | 356 ReceivedPacketInfo received_info; |
340 received_info.largest_observed = 1; | 357 received_info.largest_observed = 1; |
341 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 358 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
342 | 359 |
343 // 3 remains unacked, but no packets have retransmittable data. | 360 // 3 remains unacked, but no packets have retransmittable data. |
344 QuicPacketSequenceNumber unacked[] = { 3 }; | 361 QuicPacketSequenceNumber unacked[] = { 3 }; |
345 VerifyUnackedPackets(unacked, arraysize(unacked)); | 362 VerifyUnackedPackets(unacked, arraysize(unacked)); |
346 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 363 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
347 VerifyRetransmittablePackets(NULL, 0); | 364 VerifyRetransmittablePackets(NULL, 0); |
348 | 365 |
349 // Verify that the retransmission alarm would not fire to abandon packet 3. | 366 // Verify that the retransmission alarm would not fire to abandon packet 3. |
350 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 367 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
351 } | 368 } |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 } | 653 } |
637 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 654 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
638 | 655 |
639 // Nack the first packet 3 times with increasing largest observed. | 656 // Nack the first packet 3 times with increasing largest observed. |
640 ReceivedPacketInfo received_info; | 657 ReceivedPacketInfo received_info; |
641 received_info.delta_time_largest_observed = | 658 received_info.delta_time_largest_observed = |
642 QuicTime::Delta::FromMilliseconds(5); | 659 QuicTime::Delta::FromMilliseconds(5); |
643 received_info.missing_packets.insert(1); | 660 received_info.missing_packets.insert(1); |
644 for (QuicPacketSequenceNumber i = 1; i <= 3; ++i) { | 661 for (QuicPacketSequenceNumber i = 1; i <= 3; ++i) { |
645 received_info.largest_observed = i + 1; | 662 received_info.largest_observed = i + 1; |
646 EXPECT_CALL(*send_algorithm_, OnPacketAcked(i + 1, _, _)).Times(1); | 663 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 664 EXPECT_CALL(*send_algorithm_, OnPacketAcked(i + 1, _)).Times(1); |
647 if (i == 3) { | 665 if (i == 3) { |
648 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); | 666 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); |
649 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); | 667 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); |
650 } | 668 } |
651 manager_.OnIncomingAck(received_info, clock_.Now()); | 669 manager_.OnIncomingAck(received_info, clock_.Now()); |
652 EXPECT_EQ( | 670 EXPECT_EQ( |
653 i == 3 ? 1u : 0u, | 671 i == 3 ? 1u : 0u, |
654 QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); | 672 QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); |
655 EXPECT_EQ(i, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); | 673 EXPECT_EQ(i, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); |
656 } | 674 } |
657 } | 675 } |
658 | 676 |
659 // A stretch ack is an ack that covers more than 1 packet of previously | 677 // A stretch ack is an ack that covers more than 1 packet of previously |
660 // unacknowledged data. | 678 // unacknowledged data. |
661 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketWith1StretchAck) { | 679 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketWith1StretchAck) { |
662 const size_t kNumSentPackets = 4; | 680 const size_t kNumSentPackets = 4; |
663 // Transmit 4 packets. | 681 // Transmit 4 packets. |
664 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 682 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
665 SendDataPacket(i); | 683 SendDataPacket(i); |
666 } | 684 } |
667 | 685 |
668 // Nack the first packet 3 times in a single StretchAck. | 686 // Nack the first packet 3 times in a single StretchAck. |
669 ReceivedPacketInfo received_info; | 687 ReceivedPacketInfo received_info; |
670 received_info.delta_time_largest_observed = | 688 received_info.delta_time_largest_observed = |
671 QuicTime::Delta::FromMilliseconds(5); | 689 QuicTime::Delta::FromMilliseconds(5); |
672 received_info.missing_packets.insert(1); | 690 received_info.missing_packets.insert(1); |
673 received_info.largest_observed = kNumSentPackets; | 691 received_info.largest_observed = kNumSentPackets; |
674 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(3); | 692 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 693 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3); |
675 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); | 694 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); |
676 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); | 695 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); |
677 manager_.OnIncomingAck(received_info, clock_.Now()); | 696 manager_.OnIncomingAck(received_info, clock_.Now()); |
678 EXPECT_EQ( | 697 EXPECT_EQ( |
679 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); | 698 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); |
680 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); | 699 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); |
681 } | 700 } |
682 | 701 |
683 // Ack a packet 3 packets ahead, causing a retransmit. | 702 // Ack a packet 3 packets ahead, causing a retransmit. |
684 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketSingleAck) { | 703 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketSingleAck) { |
685 const size_t kNumSentPackets = 5; | 704 const size_t kNumSentPackets = 5; |
686 // Transmit 5 packets. | 705 // Transmit 5 packets. |
687 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 706 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
688 SendDataPacket(i); | 707 SendDataPacket(i); |
689 } | 708 } |
690 | 709 |
691 // Nack the first packet 3 times in an AckFrame with three missing packets. | 710 // Nack the first packet 3 times in an AckFrame with three missing packets. |
692 ReceivedPacketInfo received_info; | 711 ReceivedPacketInfo received_info; |
693 received_info.delta_time_largest_observed = | 712 received_info.delta_time_largest_observed = |
694 QuicTime::Delta::FromMilliseconds(5); | 713 QuicTime::Delta::FromMilliseconds(5); |
695 received_info.missing_packets.insert(1); | 714 received_info.missing_packets.insert(1); |
696 received_info.missing_packets.insert(2); | 715 received_info.missing_packets.insert(2); |
697 received_info.missing_packets.insert(3); | 716 received_info.missing_packets.insert(3); |
698 received_info.largest_observed = 4; | 717 received_info.largest_observed = 4; |
699 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _, _)).Times(1); | 718 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 719 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1); |
700 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); | 720 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); |
701 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); | 721 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); |
702 manager_.OnIncomingAck(received_info, clock_.Now()); | 722 manager_.OnIncomingAck(received_info, clock_.Now()); |
703 EXPECT_EQ( | 723 EXPECT_EQ( |
704 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); | 724 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); |
705 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); | 725 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); |
706 } | 726 } |
707 | 727 |
708 TEST_F(QuicSentPacketManagerTest, EarlyRetransmit1Packet) { | 728 TEST_F(QuicSentPacketManagerTest, EarlyRetransmit1Packet) { |
709 const size_t kNumSentPackets = 2; | 729 const size_t kNumSentPackets = 2; |
710 // Transmit 2 packets. | 730 // Transmit 2 packets. |
711 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 731 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
712 SendDataPacket(i); | 732 SendDataPacket(i); |
713 } | 733 } |
714 | 734 |
715 // Early retransmit when the final packet gets acked and the first is nacked. | 735 // Early retransmit when the final packet gets acked and the first is nacked. |
716 ReceivedPacketInfo received_info; | 736 ReceivedPacketInfo received_info; |
717 received_info.delta_time_largest_observed = | 737 received_info.delta_time_largest_observed = |
718 QuicTime::Delta::FromMilliseconds(5); | 738 QuicTime::Delta::FromMilliseconds(5); |
719 received_info.missing_packets.insert(1); | 739 received_info.missing_packets.insert(1); |
720 received_info.largest_observed = kNumSentPackets; | 740 received_info.largest_observed = kNumSentPackets; |
721 EXPECT_CALL(*send_algorithm_, OnPacketAcked(kNumSentPackets, _, _)).Times(1); | 741 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 742 EXPECT_CALL(*send_algorithm_, OnPacketAcked(kNumSentPackets, _)).Times(1); |
722 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); | 743 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); |
723 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); | 744 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); |
724 manager_.OnIncomingAck(received_info, clock_.Now()); | 745 manager_.OnIncomingAck(received_info, clock_.Now()); |
725 EXPECT_EQ( | 746 EXPECT_EQ( |
726 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); | 747 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); |
727 EXPECT_EQ(1u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); | 748 EXPECT_EQ(1u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); |
728 } | 749 } |
729 | 750 |
730 TEST_F(QuicSentPacketManagerTest, DontEarlyRetransmitPacket) { | 751 TEST_F(QuicSentPacketManagerTest, DontEarlyRetransmitPacket) { |
731 const size_t kNumSentPackets = 5; | 752 const size_t kNumSentPackets = 5; |
732 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 753 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
733 SendDataPacket(i); | 754 SendDataPacket(i); |
734 } | 755 } |
735 | 756 |
736 // Fast retransmit when the final packet gets acked, but don't early | 757 // Fast retransmit when the final packet gets acked, but don't early |
737 // retransmit as well, because there are 4 packets outstanding when the ack | 758 // retransmit as well, because there are 4 packets outstanding when the ack |
738 // arrives. | 759 // arrives. |
739 ReceivedPacketInfo received_info; | 760 ReceivedPacketInfo received_info; |
740 received_info.delta_time_largest_observed = | 761 received_info.delta_time_largest_observed = |
741 QuicTime::Delta::FromMilliseconds(5); | 762 QuicTime::Delta::FromMilliseconds(5); |
742 received_info.missing_packets.insert(1); | 763 received_info.missing_packets.insert(1); |
743 received_info.missing_packets.insert(2); | 764 received_info.missing_packets.insert(2); |
744 received_info.missing_packets.insert(3); | 765 received_info.missing_packets.insert(3); |
745 received_info.missing_packets.insert(4); | 766 received_info.missing_packets.insert(4); |
746 received_info.largest_observed = kNumSentPackets; | 767 received_info.largest_observed = kNumSentPackets; |
747 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _, _)).Times(1); | 768 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 769 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)).Times(1); |
748 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); | 770 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); |
749 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); | 771 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); |
750 manager_.OnIncomingAck(received_info, clock_.Now()); | 772 manager_.OnIncomingAck(received_info, clock_.Now()); |
751 EXPECT_EQ( | 773 EXPECT_EQ( |
752 2u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); | 774 2u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); |
753 EXPECT_EQ(4u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); | 775 EXPECT_EQ(4u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); |
754 } | 776 } |
755 | 777 |
756 TEST_F(QuicSentPacketManagerTest, NackRetransmit2Packets) { | 778 TEST_F(QuicSentPacketManagerTest, NackRetransmit2Packets) { |
757 const size_t kNumSentPackets = 20; | 779 const size_t kNumSentPackets = 20; |
758 // Transmit 20 packets. | 780 // Transmit 20 packets. |
759 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { | 781 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { |
760 SendDataPacket(i); | 782 SendDataPacket(i); |
761 } | 783 } |
762 | 784 |
763 // Nack the first 19 packets 3 times. | 785 // Nack the first 19 packets 3 times. |
764 ReceivedPacketInfo received_info; | 786 ReceivedPacketInfo received_info; |
765 received_info.largest_observed = kNumSentPackets; | 787 received_info.largest_observed = kNumSentPackets; |
766 received_info.delta_time_largest_observed = | 788 received_info.delta_time_largest_observed = |
767 QuicTime::Delta::FromMilliseconds(5); | 789 QuicTime::Delta::FromMilliseconds(5); |
768 for (size_t i = 1; i < kNumSentPackets; ++i) { | 790 for (size_t i = 1; i < kNumSentPackets; ++i) { |
769 received_info.missing_packets.insert(i); | 791 received_info.missing_packets.insert(i); |
770 } | 792 } |
| 793 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
771 EXPECT_CALL(*send_algorithm_, | 794 EXPECT_CALL(*send_algorithm_, |
772 OnPacketAcked(kNumSentPackets, _, _)).Times(1); | 795 OnPacketAcked(kNumSentPackets, _)).Times(1); |
773 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); | 796 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); |
774 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); | 797 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); |
775 manager_.OnIncomingAck(received_info, clock_.Now()); | 798 manager_.OnIncomingAck(received_info, clock_.Now()); |
776 EXPECT_EQ( | 799 EXPECT_EQ( |
777 2u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); | 800 2u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_)); |
778 for (size_t i = 1; i < kNumSentPackets; ++i) { | 801 for (size_t i = 1; i < kNumSentPackets; ++i) { |
779 EXPECT_EQ(kNumSentPackets - i, | 802 EXPECT_EQ(kNumSentPackets - i, |
780 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); | 803 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); |
781 } | 804 } |
782 } | 805 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 // Nack the first packet 2 times, then ack it. | 855 // Nack the first packet 2 times, then ack it. |
833 ReceivedPacketInfo received_info; | 856 ReceivedPacketInfo received_info; |
834 received_info.missing_packets.insert(1); | 857 received_info.missing_packets.insert(1); |
835 for (size_t i = 1; i <= 3; ++i) { | 858 for (size_t i = 1; i <= 3; ++i) { |
836 if (i == 3) { | 859 if (i == 3) { |
837 received_info.missing_packets.clear(); | 860 received_info.missing_packets.clear(); |
838 } | 861 } |
839 received_info.largest_observed = i + 1; | 862 received_info.largest_observed = i + 1; |
840 received_info.delta_time_largest_observed = | 863 received_info.delta_time_largest_observed = |
841 QuicTime::Delta::FromMilliseconds(5); | 864 QuicTime::Delta::FromMilliseconds(5); |
| 865 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
842 EXPECT_CALL(*send_algorithm_, | 866 EXPECT_CALL(*send_algorithm_, |
843 OnPacketAcked(_, _, _)).Times(i == 3 ? 2 : 1); | 867 OnPacketAcked(_, _)).Times(i == 3 ? 2 : 1); |
844 manager_.OnIncomingAck(received_info, clock_.Now()); | 868 manager_.OnIncomingAck(received_info, clock_.Now()); |
845 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 869 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
846 // The nack count remains at 2 when the packet is acked. | 870 // The nack count remains at 2 when the packet is acked. |
847 EXPECT_EQ(i == 3 ? 2u : i, | 871 EXPECT_EQ(i == 3 ? 2u : i, |
848 QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); | 872 QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); |
849 } | 873 } |
850 } | 874 } |
851 | 875 |
852 TEST_F(QuicSentPacketManagerTest, Rtt) { | 876 TEST_F(QuicSentPacketManagerTest, Rtt) { |
853 QuicPacketSequenceNumber sequence_number = 1; | 877 QuicPacketSequenceNumber sequence_number = 1; |
854 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); | 878 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); |
855 SendDataPacket(sequence_number); | 879 SendDataPacket(sequence_number); |
856 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 880 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
857 | 881 |
| 882 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
858 EXPECT_CALL(*send_algorithm_, | 883 EXPECT_CALL(*send_algorithm_, |
859 OnPacketAcked(sequence_number, _, expected_rtt)).Times(1); | 884 OnPacketAcked(sequence_number, _)).Times(1); |
860 ReceivedPacketInfo received_info; | 885 ReceivedPacketInfo received_info; |
861 received_info.largest_observed = sequence_number; | 886 received_info.largest_observed = sequence_number; |
862 received_info.delta_time_largest_observed = | 887 received_info.delta_time_largest_observed = |
863 QuicTime::Delta::FromMilliseconds(5); | 888 QuicTime::Delta::FromMilliseconds(5); |
864 manager_.OnIncomingAck(received_info, clock_.Now()); | 889 manager_.OnIncomingAck(received_info, clock_.Now()); |
865 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 890 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); |
866 } | 891 } |
867 | 892 |
868 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { | 893 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { |
869 // Expect that the RTT is equal to the local time elapsed, since the | 894 // Expect that the RTT is equal to the local time elapsed, since the |
870 // delta_time_largest_observed is larger than the local time elapsed | 895 // delta_time_largest_observed is larger than the local time elapsed |
871 // and is hence invalid. | 896 // and is hence invalid. |
872 QuicPacketSequenceNumber sequence_number = 1; | 897 QuicPacketSequenceNumber sequence_number = 1; |
873 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 898 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
874 SendDataPacket(sequence_number); | 899 SendDataPacket(sequence_number); |
875 clock_.AdvanceTime(expected_rtt); | 900 clock_.AdvanceTime(expected_rtt); |
876 | 901 |
| 902 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
877 EXPECT_CALL(*send_algorithm_, | 903 EXPECT_CALL(*send_algorithm_, |
878 OnPacketAcked(sequence_number, _, expected_rtt)).Times(1); | 904 OnPacketAcked(sequence_number, _)).Times(1); |
879 ReceivedPacketInfo received_info; | 905 ReceivedPacketInfo received_info; |
880 received_info.largest_observed = sequence_number; | 906 received_info.largest_observed = sequence_number; |
881 received_info.delta_time_largest_observed = | 907 received_info.delta_time_largest_observed = |
882 QuicTime::Delta::FromMilliseconds(11); | 908 QuicTime::Delta::FromMilliseconds(11); |
883 manager_.OnIncomingAck(received_info, clock_.Now()); | 909 manager_.OnIncomingAck(received_info, clock_.Now()); |
884 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 910 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); |
885 } | 911 } |
886 | 912 |
887 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { | 913 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { |
888 // Expect that the RTT is equal to the local time elapsed, since the | 914 // Expect that the RTT is equal to the local time elapsed, since the |
889 // delta_time_largest_observed is infinite, and is hence invalid. | 915 // delta_time_largest_observed is infinite, and is hence invalid. |
890 QuicPacketSequenceNumber sequence_number = 1; | 916 QuicPacketSequenceNumber sequence_number = 1; |
891 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 917 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
892 SendDataPacket(sequence_number); | 918 SendDataPacket(sequence_number); |
893 clock_.AdvanceTime(expected_rtt); | 919 clock_.AdvanceTime(expected_rtt); |
894 | 920 |
| 921 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
895 EXPECT_CALL(*send_algorithm_, | 922 EXPECT_CALL(*send_algorithm_, |
896 OnPacketAcked(sequence_number, _, expected_rtt)).Times(1); | 923 OnPacketAcked(sequence_number, _)).Times(1); |
897 ReceivedPacketInfo received_info; | 924 ReceivedPacketInfo received_info; |
898 received_info.largest_observed = sequence_number; | 925 received_info.largest_observed = sequence_number; |
899 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); | 926 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); |
900 manager_.OnIncomingAck(received_info, clock_.Now()); | 927 manager_.OnIncomingAck(received_info, clock_.Now()); |
901 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 928 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); |
902 } | 929 } |
903 | 930 |
904 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { | 931 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { |
905 // Expect that the RTT is the time between send and receive since the | 932 // Expect that the RTT is the time between send and receive since the |
906 // delta_time_largest_observed is zero. | 933 // delta_time_largest_observed is zero. |
907 QuicPacketSequenceNumber sequence_number = 1; | 934 QuicPacketSequenceNumber sequence_number = 1; |
908 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 935 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
909 SendDataPacket(sequence_number); | 936 SendDataPacket(sequence_number); |
910 clock_.AdvanceTime(expected_rtt); | 937 clock_.AdvanceTime(expected_rtt); |
911 | 938 |
912 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _, expected_rtt)) | 939 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
| 940 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) |
913 .Times(1); | 941 .Times(1); |
914 ReceivedPacketInfo received_info; | 942 ReceivedPacketInfo received_info; |
915 received_info.largest_observed = sequence_number; | 943 received_info.largest_observed = sequence_number; |
916 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 944 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
917 manager_.OnIncomingAck(received_info, clock_.Now()); | 945 manager_.OnIncomingAck(received_info, clock_.Now()); |
918 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 946 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); |
919 } | 947 } |
920 | 948 |
921 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 949 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
922 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 950 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
923 | 951 |
924 // Send 1 packet. | 952 // Send 1 packet. |
925 QuicPacketSequenceNumber sequence_number = 1; | 953 QuicPacketSequenceNumber sequence_number = 1; |
926 SendDataPacket(sequence_number); | 954 SendDataPacket(sequence_number); |
927 | 955 |
928 // The first tail loss probe retransmits 1 packet. | 956 // The first tail loss probe retransmits 1 packet. |
929 manager_.OnRetransmissionTimeout(); | 957 manager_.OnRetransmissionTimeout(); |
930 RetransmitNextPacket(2); | 958 RetransmitNextPacket(2); |
931 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 959 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
932 | 960 |
933 // The second tail loss probe retransmits 1 packet. | 961 // The second tail loss probe retransmits 1 packet. |
934 manager_.OnRetransmissionTimeout(); | 962 manager_.OnRetransmissionTimeout(); |
935 RetransmitNextPacket(3); | 963 RetransmitNextPacket(3); |
936 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 964 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
937 | 965 |
938 // Ack the third and ensure the first two are considered lost, but they were | 966 // Ack the third and ensure the first two are considered lost, but they were |
939 // already abandoned, so that won't occur again. | 967 // already abandoned, so that won't occur again. |
940 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _, _)); | 968 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 969 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _)); |
941 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); | 970 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); |
942 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); | 971 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); |
943 ReceivedPacketInfo received_info; | 972 ReceivedPacketInfo received_info; |
944 received_info.largest_observed = 3; | 973 received_info.largest_observed = 3; |
945 received_info.missing_packets.insert(1); | 974 received_info.missing_packets.insert(1); |
946 received_info.missing_packets.insert(2); | 975 received_info.missing_packets.insert(2); |
947 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 976 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
948 | 977 |
949 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 978 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
950 } | 979 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 // The second retransmits 2 packets. | 1029 // The second retransmits 2 packets. |
1001 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); | 1030 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); |
1002 manager_.OnRetransmissionTimeout(); | 1031 manager_.OnRetransmissionTimeout(); |
1003 RetransmitNextPacket(8); | 1032 RetransmitNextPacket(8); |
1004 RetransmitNextPacket(9); | 1033 RetransmitNextPacket(9); |
1005 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1034 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1006 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1035 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
1007 | 1036 |
1008 // Now ack the two crypto packets and the speculatively encrypted request, | 1037 // Now ack the two crypto packets and the speculatively encrypted request, |
1009 // and ensure the first four crypto packets get abandoned, but not lost. | 1038 // and ensure the first four crypto packets get abandoned, but not lost. |
1010 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _, _)).Times(5); | 1039 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 1040 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(5); |
1011 ReceivedPacketInfo received_info; | 1041 ReceivedPacketInfo received_info; |
1012 received_info.largest_observed = 9; | 1042 received_info.largest_observed = 9; |
1013 received_info.missing_packets.insert(1); | 1043 received_info.missing_packets.insert(1); |
1014 received_info.missing_packets.insert(2); | 1044 received_info.missing_packets.insert(2); |
1015 received_info.missing_packets.insert(6); | 1045 received_info.missing_packets.insert(6); |
1016 received_info.missing_packets.insert(7); | 1046 received_info.missing_packets.insert(7); |
1017 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 1047 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
1018 | 1048 |
1019 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1049 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
1020 } | 1050 } |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1148 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1178 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
1149 clock_.AdvanceTime(expected_rto_delay); | 1179 clock_.AdvanceTime(expected_rto_delay); |
1150 manager_.OnRetransmissionTimeout(); | 1180 manager_.OnRetransmissionTimeout(); |
1151 RetransmitNextPacket(3); | 1181 RetransmitNextPacket(3); |
1152 RetransmitNextPacket(4); | 1182 RetransmitNextPacket(4); |
1153 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1183 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1154 | 1184 |
1155 // The delay should double the second time. | 1185 // The delay should double the second time. |
1156 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay); | 1186 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay); |
1157 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1187 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1188 |
| 1189 // Ack a packet and ensure the RTO goes back to the original value. |
| 1190 ReceivedPacketInfo received_info; |
| 1191 received_info.largest_observed = 2; |
| 1192 received_info.missing_packets.insert(1); |
| 1193 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 1194 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 1195 |
| 1196 expected_time = clock_.Now().Add(expected_rto_delay); |
| 1197 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1158 } | 1198 } |
1159 | 1199 |
1160 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { | 1200 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { |
1161 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1201 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
1162 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); | 1202 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
1163 | 1203 |
1164 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), | 1204 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), |
1165 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); | 1205 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); |
1166 } | 1206 } |
1167 | 1207 |
(...skipping 18 matching lines...) Expand all Loading... |
1186 delay = delay.Add(delay); | 1226 delay = delay.Add(delay); |
1187 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1227 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
1188 manager_.OnRetransmissionTimeout(); | 1228 manager_.OnRetransmissionTimeout(); |
1189 RetransmitNextPacket(i + 2); | 1229 RetransmitNextPacket(i + 2); |
1190 } | 1230 } |
1191 } | 1231 } |
1192 | 1232 |
1193 } // namespace | 1233 } // namespace |
1194 } // namespace test | 1234 } // namespace test |
1195 } // namespace net | 1235 } // namespace net |
OLD | NEW |