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 17 matching lines...) Expand all Loading... |
28 // Disable tail loss probes for most tests. | 28 // Disable tail loss probes for most tests. |
29 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); | 29 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); |
30 // Advance the time 1s so the send times are never QuicTime::Zero. | 30 // Advance the time 1s so the send times are never QuicTime::Zero. |
31 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 31 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
32 } | 32 } |
33 | 33 |
34 virtual ~QuicSentPacketManagerTest() { | 34 virtual ~QuicSentPacketManagerTest() { |
35 STLDeleteElements(&packets_); | 35 STLDeleteElements(&packets_); |
36 } | 36 } |
37 | 37 |
38 virtual void SetUp() { | |
39 // Ack handling requests a smoothed rtt for loss detection. | |
40 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | |
41 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | |
42 } | |
43 | |
44 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 38 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
45 size_t num_packets) { | 39 size_t num_packets) { |
46 if (num_packets == 0) { | 40 if (num_packets == 0) { |
47 EXPECT_FALSE(manager_.HasUnackedPackets()); | 41 EXPECT_FALSE(manager_.HasUnackedPackets()); |
48 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( | 42 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( |
49 &manager_)); | 43 &manager_)); |
50 return; | 44 return; |
51 } | 45 } |
52 | 46 |
53 EXPECT_TRUE(manager_.HasUnackedPackets()); | 47 EXPECT_TRUE(manager_.HasUnackedPackets()); |
(...skipping 16 matching lines...) Expand all Loading... |
70 if (manager_.HasRetransmittableFrames(*it)) { | 64 if (manager_.HasRetransmittableFrames(*it)) { |
71 ++num_retransmittable; | 65 ++num_retransmittable; |
72 } | 66 } |
73 } | 67 } |
74 EXPECT_EQ(num_packets, | 68 EXPECT_EQ(num_packets, |
75 QuicSentPacketManagerPeer::GetNumRetransmittablePackets( | 69 QuicSentPacketManagerPeer::GetNumRetransmittablePackets( |
76 &manager_)); | 70 &manager_)); |
77 EXPECT_EQ(num_packets, num_retransmittable); | 71 EXPECT_EQ(num_packets, num_retransmittable); |
78 } | 72 } |
79 | 73 |
80 void VerifyAckedPackets(QuicPacketSequenceNumber* expected, | |
81 size_t num_expected, | |
82 const SequenceNumberSet& actual) { | |
83 if (num_expected == 0) { | |
84 EXPECT_TRUE(actual.empty()); | |
85 return; | |
86 } | |
87 | |
88 EXPECT_EQ(num_expected, actual.size()); | |
89 for (size_t i = 0; i < num_expected; ++i) { | |
90 EXPECT_TRUE(ContainsKey(actual, expected[i])) << expected[i]; | |
91 } | |
92 } | |
93 | |
94 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, | 74 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, |
95 QuicPacketSequenceNumber new_sequence_number) { | 75 QuicPacketSequenceNumber new_sequence_number) { |
96 QuicSentPacketManagerPeer::MarkForRetransmission( | 76 QuicSentPacketManagerPeer::MarkForRetransmission( |
97 &manager_, old_sequence_number, NACK_RETRANSMISSION); | 77 &manager_, old_sequence_number, NACK_RETRANSMISSION); |
98 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 78 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
99 QuicSentPacketManager::PendingRetransmission next_retransmission = | 79 QuicSentPacketManager::PendingRetransmission next_retransmission = |
100 manager_.NextPendingRetransmission(); | 80 manager_.NextPendingRetransmission(); |
101 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); | 81 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); |
102 EXPECT_EQ(NACK_RETRANSMISSION, next_retransmission.transmission_type); | 82 EXPECT_EQ(NACK_RETRANSMISSION, next_retransmission.transmission_type); |
103 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); | 83 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 199 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
220 SendDataPacket(1); | 200 SendDataPacket(1); |
221 RetransmitAndSendPacket(1, 2); | 201 RetransmitAndSendPacket(1, 2); |
222 | 202 |
223 // Ack 2 but not 1. | 203 // Ack 2 but not 1. |
224 ReceivedPacketInfo received_info; | 204 ReceivedPacketInfo received_info; |
225 received_info.largest_observed = 2; | 205 received_info.largest_observed = 2; |
226 received_info.missing_packets.insert(1); | 206 received_info.missing_packets.insert(1); |
227 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 207 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
228 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); | 208 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); |
229 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 209 manager_.OnIncomingAck(received_info, clock_.Now()); |
230 | 210 |
231 // Packet 1 is unacked, pending, but not retransmittable. | 211 // Packet 1 is unacked, pending, but not retransmittable. |
232 QuicPacketSequenceNumber unacked[] = { 1 }; | 212 QuicPacketSequenceNumber unacked[] = { 1 }; |
233 VerifyUnackedPackets(unacked, arraysize(unacked)); | 213 VerifyUnackedPackets(unacked, arraysize(unacked)); |
234 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 214 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
235 VerifyRetransmittablePackets(NULL, 0); | 215 VerifyRetransmittablePackets(NULL, 0); |
236 } | 216 } |
237 | 217 |
238 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 218 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
239 SendDataPacket(1); | 219 SendDataPacket(1); |
240 QuicSentPacketManagerPeer::MarkForRetransmission( | 220 QuicSentPacketManagerPeer::MarkForRetransmission( |
241 &manager_, 1, NACK_RETRANSMISSION); | 221 &manager_, 1, NACK_RETRANSMISSION); |
242 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 222 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
243 | 223 |
244 // Ack 1. | 224 // Ack 1. |
245 ReceivedPacketInfo received_info; | 225 ReceivedPacketInfo received_info; |
246 received_info.largest_observed = 1; | 226 received_info.largest_observed = 1; |
247 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 227 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
248 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); | 228 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); |
249 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 229 manager_.OnIncomingAck(received_info, clock_.Now()); |
250 | 230 |
251 // There should no longer be a pending retransmission. | 231 // There should no longer be a pending retransmission. |
252 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 232 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
253 | 233 |
254 // No unacked packets remain. | 234 // No unacked packets remain. |
255 VerifyUnackedPackets(NULL, 0); | 235 VerifyUnackedPackets(NULL, 0); |
256 VerifyRetransmittablePackets(NULL, 0); | 236 VerifyRetransmittablePackets(NULL, 0); |
257 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 237 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
258 } | 238 } |
259 | 239 |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 ReceivedPacketInfo received_info; | 452 ReceivedPacketInfo received_info; |
473 received_info.largest_observed = 4; | 453 received_info.largest_observed = 4; |
474 received_info.missing_packets.insert(1); | 454 received_info.missing_packets.insert(1); |
475 received_info.missing_packets.insert(2); | 455 received_info.missing_packets.insert(2); |
476 received_info.missing_packets.insert(3); | 456 received_info.missing_packets.insert(3); |
477 received_info.missing_packets.insert(4); | 457 received_info.missing_packets.insert(4); |
478 received_info.is_truncated = true; | 458 received_info.is_truncated = true; |
479 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 459 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
480 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); | 460 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
481 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); | 461 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
482 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 462 manager_.OnIncomingAck(received_info, clock_.Now()); |
483 | 463 |
484 // High water mark will be raised. | 464 // High water mark will be raised. |
485 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 465 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
486 VerifyUnackedPackets(unacked, arraysize(unacked)); | 466 VerifyUnackedPackets(unacked, arraysize(unacked)); |
487 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 467 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
488 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 468 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
489 } | 469 } |
490 | 470 |
491 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 471 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
492 SendDataPacket(1); | 472 SendDataPacket(1); |
493 RetransmitAndSendPacket(1, 2); | 473 RetransmitAndSendPacket(1, 2); |
494 RetransmitAndSendPacket(2, 3); | 474 RetransmitAndSendPacket(2, 3); |
495 RetransmitAndSendPacket(3, 4); | 475 RetransmitAndSendPacket(3, 4); |
496 manager_.OnSerializedPacket(CreateDataPacket(5)); | 476 manager_.OnSerializedPacket(CreateDataPacket(5)); |
497 manager_.OnSerializedPacket(CreateDataPacket(6)); | 477 manager_.OnSerializedPacket(CreateDataPacket(6)); |
498 manager_.OnSerializedPacket(CreateDataPacket(7)); | 478 manager_.OnSerializedPacket(CreateDataPacket(7)); |
499 manager_.OnSerializedPacket(CreateDataPacket(8)); | 479 manager_.OnSerializedPacket(CreateDataPacket(8)); |
500 manager_.OnSerializedPacket(CreateDataPacket(9)); | 480 manager_.OnSerializedPacket(CreateDataPacket(9)); |
501 | 481 |
502 // Ack previous transmission | 482 // Ack previous transmission |
503 { | 483 { |
504 ReceivedPacketInfo received_info; | 484 ReceivedPacketInfo received_info; |
505 received_info.largest_observed = 2; | 485 received_info.largest_observed = 2; |
506 received_info.missing_packets.insert(1); | 486 received_info.missing_packets.insert(1); |
507 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 487 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
508 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); | 488 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
509 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 489 manager_.OnIncomingAck(received_info, clock_.Now()); |
510 EXPECT_TRUE(manager_.IsUnacked(4)); | 490 EXPECT_TRUE(manager_.IsUnacked(4)); |
511 } | 491 } |
512 | 492 |
513 // Truncated ack with 4 NACKs | 493 // Truncated ack with 4 NACKs |
514 { | 494 { |
515 ReceivedPacketInfo received_info; | 495 ReceivedPacketInfo received_info; |
516 received_info.largest_observed = 6; | 496 received_info.largest_observed = 6; |
517 received_info.missing_packets.insert(3); | 497 received_info.missing_packets.insert(3); |
518 received_info.missing_packets.insert(4); | 498 received_info.missing_packets.insert(4); |
519 received_info.missing_packets.insert(5); | 499 received_info.missing_packets.insert(5); |
520 received_info.missing_packets.insert(6); | 500 received_info.missing_packets.insert(6); |
521 received_info.is_truncated = true; | 501 received_info.is_truncated = true; |
522 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); | 502 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
523 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); | 503 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); |
524 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); | 504 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); |
525 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 505 manager_.OnIncomingAck(received_info, clock_.Now()); |
526 } | 506 } |
527 | 507 |
528 // High water mark will be raised. | 508 // High water mark will be raised. |
529 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; | 509 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; |
530 VerifyUnackedPackets(unacked, arraysize(unacked)); | 510 VerifyUnackedPackets(unacked, arraysize(unacked)); |
531 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 511 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
532 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 512 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
533 } | 513 } |
534 | 514 |
535 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 515 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; | 556 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
577 VerifyUnackedPackets(unacked, arraysize(unacked)); | 557 VerifyUnackedPackets(unacked, arraysize(unacked)); |
578 VerifyRetransmittablePackets(NULL, 0); | 558 VerifyRetransmittablePackets(NULL, 0); |
579 | 559 |
580 manager_.DiscardUnackedPacket(1); | 560 manager_.DiscardUnackedPacket(1); |
581 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 561 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
582 | 562 |
583 // Ack 2. | 563 // Ack 2. |
584 ReceivedPacketInfo received_info; | 564 ReceivedPacketInfo received_info; |
585 received_info.largest_observed = 2; | 565 received_info.largest_observed = 2; |
586 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 566 manager_.OnIncomingAck(received_info, clock_.Now()); |
587 | 567 |
588 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); | 568 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); |
589 | 569 |
590 // Discard the 3rd packet and ensure there are no FEC packets. | 570 // Discard the 3rd packet and ensure there are no FEC packets. |
591 manager_.DiscardUnackedPacket(3); | 571 manager_.DiscardUnackedPacket(3); |
592 EXPECT_FALSE(manager_.HasUnackedPackets()); | 572 EXPECT_FALSE(manager_.HasUnackedPackets()); |
593 } | 573 } |
594 | 574 |
595 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 575 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
596 VerifyUnackedPackets(NULL, 0); | 576 VerifyUnackedPackets(NULL, 0); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
700 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 680 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
701 | 681 |
702 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 682 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
703 EXPECT_CALL(*send_algorithm_, | 683 EXPECT_CALL(*send_algorithm_, |
704 OnPacketAcked(sequence_number, _)).Times(1); | 684 OnPacketAcked(sequence_number, _)).Times(1); |
705 ReceivedPacketInfo received_info; | 685 ReceivedPacketInfo received_info; |
706 received_info.largest_observed = sequence_number; | 686 received_info.largest_observed = sequence_number; |
707 received_info.delta_time_largest_observed = | 687 received_info.delta_time_largest_observed = |
708 QuicTime::Delta::FromMilliseconds(5); | 688 QuicTime::Delta::FromMilliseconds(5); |
709 manager_.OnIncomingAck(received_info, clock_.Now()); | 689 manager_.OnIncomingAck(received_info, clock_.Now()); |
710 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 690 EXPECT_EQ(expected_rtt, |
| 691 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
711 } | 692 } |
712 | 693 |
713 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { | 694 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { |
714 // Expect that the RTT is equal to the local time elapsed, since the | 695 // Expect that the RTT is equal to the local time elapsed, since the |
715 // delta_time_largest_observed is larger than the local time elapsed | 696 // delta_time_largest_observed is larger than the local time elapsed |
716 // and is hence invalid. | 697 // and is hence invalid. |
717 QuicPacketSequenceNumber sequence_number = 1; | 698 QuicPacketSequenceNumber sequence_number = 1; |
718 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 699 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
719 SendDataPacket(sequence_number); | 700 SendDataPacket(sequence_number); |
720 clock_.AdvanceTime(expected_rtt); | 701 clock_.AdvanceTime(expected_rtt); |
721 | 702 |
722 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 703 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
723 EXPECT_CALL(*send_algorithm_, | 704 EXPECT_CALL(*send_algorithm_, |
724 OnPacketAcked(sequence_number, _)).Times(1); | 705 OnPacketAcked(sequence_number, _)).Times(1); |
725 ReceivedPacketInfo received_info; | 706 ReceivedPacketInfo received_info; |
726 received_info.largest_observed = sequence_number; | 707 received_info.largest_observed = sequence_number; |
727 received_info.delta_time_largest_observed = | 708 received_info.delta_time_largest_observed = |
728 QuicTime::Delta::FromMilliseconds(11); | 709 QuicTime::Delta::FromMilliseconds(11); |
729 manager_.OnIncomingAck(received_info, clock_.Now()); | 710 manager_.OnIncomingAck(received_info, clock_.Now()); |
730 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 711 EXPECT_EQ(expected_rtt, |
| 712 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
731 } | 713 } |
732 | 714 |
733 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { | 715 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { |
734 // Expect that the RTT is equal to the local time elapsed, since the | 716 // Expect that the RTT is equal to the local time elapsed, since the |
735 // delta_time_largest_observed is infinite, and is hence invalid. | 717 // delta_time_largest_observed is infinite, and is hence invalid. |
736 QuicPacketSequenceNumber sequence_number = 1; | 718 QuicPacketSequenceNumber sequence_number = 1; |
737 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 719 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
738 SendDataPacket(sequence_number); | 720 SendDataPacket(sequence_number); |
739 clock_.AdvanceTime(expected_rtt); | 721 clock_.AdvanceTime(expected_rtt); |
740 | 722 |
741 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 723 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
742 EXPECT_CALL(*send_algorithm_, | 724 EXPECT_CALL(*send_algorithm_, |
743 OnPacketAcked(sequence_number, _)).Times(1); | 725 OnPacketAcked(sequence_number, _)).Times(1); |
744 ReceivedPacketInfo received_info; | 726 ReceivedPacketInfo received_info; |
745 received_info.largest_observed = sequence_number; | 727 received_info.largest_observed = sequence_number; |
746 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); | 728 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); |
747 manager_.OnIncomingAck(received_info, clock_.Now()); | 729 manager_.OnIncomingAck(received_info, clock_.Now()); |
748 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 730 EXPECT_EQ(expected_rtt, |
| 731 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
749 } | 732 } |
750 | 733 |
751 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { | 734 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { |
752 // Expect that the RTT is the time between send and receive since the | 735 // Expect that the RTT is the time between send and receive since the |
753 // delta_time_largest_observed is zero. | 736 // delta_time_largest_observed is zero. |
754 QuicPacketSequenceNumber sequence_number = 1; | 737 QuicPacketSequenceNumber sequence_number = 1; |
755 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 738 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
756 SendDataPacket(sequence_number); | 739 SendDataPacket(sequence_number); |
757 clock_.AdvanceTime(expected_rtt); | 740 clock_.AdvanceTime(expected_rtt); |
758 | 741 |
759 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 742 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
760 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) | 743 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) |
761 .Times(1); | 744 .Times(1); |
762 ReceivedPacketInfo received_info; | 745 ReceivedPacketInfo received_info; |
763 received_info.largest_observed = sequence_number; | 746 received_info.largest_observed = sequence_number; |
764 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 747 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
765 manager_.OnIncomingAck(received_info, clock_.Now()); | 748 manager_.OnIncomingAck(received_info, clock_.Now()); |
766 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 749 EXPECT_EQ(expected_rtt, |
| 750 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
767 } | 751 } |
768 | 752 |
769 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 753 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
770 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 754 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
771 | 755 |
772 // Send 1 packet. | 756 // Send 1 packet. |
773 QuicPacketSequenceNumber sequence_number = 1; | 757 QuicPacketSequenceNumber sequence_number = 1; |
774 SendDataPacket(sequence_number); | 758 SendDataPacket(sequence_number); |
775 | 759 |
776 // The first tail loss probe retransmits 1 packet. | 760 // The first tail loss probe retransmits 1 packet. |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 } | 961 } |
978 | 962 |
979 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { | 963 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { |
980 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 964 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
981 } | 965 } |
982 | 966 |
983 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 967 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
984 SendCryptoPacket(1); | 968 SendCryptoPacket(1); |
985 | 969 |
986 // Check the min. | 970 // Check the min. |
987 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 971 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
988 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 972 1 * base::Time::kMicrosecondsPerMillisecond); |
989 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 973 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
990 manager_.GetRetransmissionTime()); | 974 manager_.GetRetransmissionTime()); |
991 | 975 |
992 // Test with a standard smoothed RTT. | 976 // Test with a standard smoothed RTT. |
993 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 977 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
994 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 978 100 * base::Time::kMicrosecondsPerMillisecond); |
995 | 979 |
996 QuicTime::Delta srtt = manager_.SmoothedRtt(); | 980 QuicTime::Delta srtt = manager_.SmoothedRtt(); |
997 QuicTime expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds( | 981 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); |
998 static_cast<int64>(1.5 * srtt.ToMilliseconds()))); | |
999 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 982 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1000 | 983 |
1001 // Retransmit the packet by invoking the retransmission timeout. | 984 // Retransmit the packet by invoking the retransmission timeout. |
1002 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds( | 985 clock_.AdvanceTime(srtt.Multiply(1.5)); |
1003 static_cast<int64>(1.5 * srtt.ToMilliseconds()))); | |
1004 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); | 986 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); |
1005 manager_.OnRetransmissionTimeout(); | 987 manager_.OnRetransmissionTimeout(); |
1006 RetransmitNextPacket(2); | 988 RetransmitNextPacket(2); |
1007 | 989 |
1008 // The retransmission time should now be twice as far in the future. | 990 // The retransmission time should now be twice as far in the future. |
1009 expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds( | 991 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); |
1010 static_cast<int64>(2 * 1.5 * srtt.ToMilliseconds()))); | |
1011 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 992 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1012 } | 993 } |
1013 | 994 |
1014 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { | 995 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
1015 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 996 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
1016 SendDataPacket(1); | 997 SendDataPacket(1); |
1017 SendDataPacket(2); | 998 SendDataPacket(2); |
1018 | 999 |
1019 // Check the min. | 1000 // Check the min. |
1020 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1001 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
1021 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 1002 1 * base::Time::kMicrosecondsPerMillisecond); |
1022 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1003 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
1023 manager_.GetRetransmissionTime()); | 1004 manager_.GetRetransmissionTime()); |
1024 | 1005 |
1025 // Test with a standard smoothed RTT. | 1006 // Test with a standard smoothed RTT. |
1026 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1007 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
1027 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 1008 100 * base::Time::kMicrosecondsPerMillisecond); |
1028 QuicTime::Delta srtt = manager_.SmoothedRtt(); | 1009 QuicTime::Delta srtt = manager_.SmoothedRtt(); |
1029 QuicTime::Delta expected_tlp_delay = QuicTime::Delta::FromMilliseconds( | 1010 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
1030 static_cast<int64>(2 * srtt.ToMilliseconds())); | |
1031 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1011 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
1032 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1012 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1033 | 1013 |
1034 // Retransmit the packet by invoking the retransmission timeout. | 1014 // Retransmit the packet by invoking the retransmission timeout. |
1035 clock_.AdvanceTime(expected_tlp_delay); | 1015 clock_.AdvanceTime(expected_tlp_delay); |
1036 manager_.OnRetransmissionTimeout(); | 1016 manager_.OnRetransmissionTimeout(); |
1037 RetransmitNextPacket(3); | 1017 RetransmitNextPacket(3); |
1038 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1018 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1039 | 1019 |
1040 expected_time = clock_.Now().Add(expected_tlp_delay); | 1020 expected_time = clock_.Now().Add(expected_tlp_delay); |
1041 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1021 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1042 } | 1022 } |
1043 | 1023 |
1044 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { | 1024 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { |
1045 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1025 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
1046 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 1026 QuicTime::Delta::FromMilliseconds(100), QuicTime::Delta::Zero()); |
1047 | 1027 |
1048 SendDataPacket(1); | 1028 SendDataPacket(1); |
1049 SendDataPacket(2); | 1029 SendDataPacket(2); |
1050 | 1030 |
1051 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); | 1031 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); |
1052 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1032 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
1053 .WillRepeatedly(Return(expected_rto_delay)); | 1033 .WillRepeatedly(Return(expected_rto_delay)); |
1054 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); | 1034 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); |
1055 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1035 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1056 | 1036 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 | 1106 |
1127 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1107 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
1128 .WillRepeatedly(Return(QuicTime::Zero())); | 1108 .WillRepeatedly(Return(QuicTime::Zero())); |
1129 SendDataPacket(1); | 1109 SendDataPacket(1); |
1130 SendDataPacket(2); | 1110 SendDataPacket(2); |
1131 | 1111 |
1132 // Handle an ack which causes the loss algorithm to be evaluated and | 1112 // Handle an ack which causes the loss algorithm to be evaluated and |
1133 // set the loss timeout. | 1113 // set the loss timeout. |
1134 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 1114 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
1135 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); | 1115 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
1136 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _, _)) | 1116 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
1137 .WillOnce(Return(SequenceNumberSet())); | 1117 .WillOnce(Return(SequenceNumberSet())); |
1138 ReceivedPacketInfo received_info; | 1118 ReceivedPacketInfo received_info; |
1139 received_info.largest_observed = 2; | 1119 received_info.largest_observed = 2; |
1140 received_info.missing_packets.insert(1); | 1120 received_info.missing_packets.insert(1); |
1141 manager_.OnIncomingAck(received_info, clock_.Now()); | 1121 manager_.OnIncomingAck(received_info, clock_.Now()); |
1142 | 1122 |
1143 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); | 1123 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); |
1144 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1124 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
1145 .WillRepeatedly(Return(timeout)); | 1125 .WillRepeatedly(Return(timeout)); |
1146 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); | 1126 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); |
1147 | 1127 |
1148 // Fire the retransmission timeout and ensure the loss detection algorithm | 1128 // Fire the retransmission timeout and ensure the loss detection algorithm |
1149 // is invoked. | 1129 // is invoked. |
1150 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _, _)) | 1130 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
1151 .WillOnce(Return(SequenceNumberSet())); | 1131 .WillOnce(Return(SequenceNumberSet())); |
1152 manager_.OnRetransmissionTimeout(); | 1132 manager_.OnRetransmissionTimeout(); |
1153 } | 1133 } |
1154 | 1134 |
1155 } // namespace | 1135 } // namespace |
1156 } // namespace test | 1136 } // namespace test |
1157 } // namespace net | 1137 } // namespace net |
OLD | NEW |