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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 199 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
206 SendDataPacket(1); | 200 SendDataPacket(1); |
207 RetransmitAndSendPacket(1, 2); | 201 RetransmitAndSendPacket(1, 2); |
208 | 202 |
209 // Ack 2 but not 1. | 203 // Ack 2 but not 1. |
210 ReceivedPacketInfo received_info; | 204 ReceivedPacketInfo received_info; |
211 received_info.largest_observed = 2; | 205 received_info.largest_observed = 2; |
212 received_info.missing_packets.insert(1); | 206 received_info.missing_packets.insert(1); |
213 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 207 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
214 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); | 208 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); |
215 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 209 manager_.OnIncomingAck(received_info, clock_.Now()); |
216 | 210 |
217 // Packet 1 is unacked, pending, but not retransmittable. | 211 // Packet 1 is unacked, pending, but not retransmittable. |
218 QuicPacketSequenceNumber unacked[] = { 1 }; | 212 QuicPacketSequenceNumber unacked[] = { 1 }; |
219 VerifyUnackedPackets(unacked, arraysize(unacked)); | 213 VerifyUnackedPackets(unacked, arraysize(unacked)); |
220 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 214 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
221 VerifyRetransmittablePackets(NULL, 0); | 215 VerifyRetransmittablePackets(NULL, 0); |
222 } | 216 } |
223 | 217 |
224 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 218 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
225 SendDataPacket(1); | 219 SendDataPacket(1); |
226 QuicSentPacketManagerPeer::MarkForRetransmission( | 220 QuicSentPacketManagerPeer::MarkForRetransmission( |
227 &manager_, 1, NACK_RETRANSMISSION); | 221 &manager_, 1, NACK_RETRANSMISSION); |
228 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 222 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
229 | 223 |
230 // Ack 1. | 224 // Ack 1. |
231 ReceivedPacketInfo received_info; | 225 ReceivedPacketInfo received_info; |
232 received_info.largest_observed = 1; | 226 received_info.largest_observed = 1; |
233 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 227 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
234 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); | 228 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); |
235 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 229 manager_.OnIncomingAck(received_info, clock_.Now()); |
236 | 230 |
237 // There should no longer be a pending retransmission. | 231 // There should no longer be a pending retransmission. |
238 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 232 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
239 | 233 |
240 // No unacked packets remain. | 234 // No unacked packets remain. |
241 VerifyUnackedPackets(NULL, 0); | 235 VerifyUnackedPackets(NULL, 0); |
242 VerifyRetransmittablePackets(NULL, 0); | 236 VerifyRetransmittablePackets(NULL, 0); |
243 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 237 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
244 } | 238 } |
245 | 239 |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 ReceivedPacketInfo received_info; | 452 ReceivedPacketInfo received_info; |
459 received_info.largest_observed = 4; | 453 received_info.largest_observed = 4; |
460 received_info.missing_packets.insert(1); | 454 received_info.missing_packets.insert(1); |
461 received_info.missing_packets.insert(2); | 455 received_info.missing_packets.insert(2); |
462 received_info.missing_packets.insert(3); | 456 received_info.missing_packets.insert(3); |
463 received_info.missing_packets.insert(4); | 457 received_info.missing_packets.insert(4); |
464 received_info.is_truncated = true; | 458 received_info.is_truncated = true; |
465 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 459 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
466 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); | 460 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
467 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); | 461 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
468 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 462 manager_.OnIncomingAck(received_info, clock_.Now()); |
469 | 463 |
470 // High water mark will be raised. | 464 // High water mark will be raised. |
471 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 465 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
472 VerifyUnackedPackets(unacked, arraysize(unacked)); | 466 VerifyUnackedPackets(unacked, arraysize(unacked)); |
473 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 467 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
474 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 468 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
475 } | 469 } |
476 | 470 |
477 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 471 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
478 SendDataPacket(1); | 472 SendDataPacket(1); |
479 RetransmitAndSendPacket(1, 2); | 473 RetransmitAndSendPacket(1, 2); |
480 RetransmitAndSendPacket(2, 3); | 474 RetransmitAndSendPacket(2, 3); |
481 RetransmitAndSendPacket(3, 4); | 475 RetransmitAndSendPacket(3, 4); |
482 manager_.OnSerializedPacket(CreateDataPacket(5)); | 476 manager_.OnSerializedPacket(CreateDataPacket(5)); |
483 manager_.OnSerializedPacket(CreateDataPacket(6)); | 477 manager_.OnSerializedPacket(CreateDataPacket(6)); |
484 manager_.OnSerializedPacket(CreateDataPacket(7)); | 478 manager_.OnSerializedPacket(CreateDataPacket(7)); |
485 manager_.OnSerializedPacket(CreateDataPacket(8)); | 479 manager_.OnSerializedPacket(CreateDataPacket(8)); |
486 manager_.OnSerializedPacket(CreateDataPacket(9)); | 480 manager_.OnSerializedPacket(CreateDataPacket(9)); |
487 | 481 |
488 // Ack previous transmission | 482 // Ack previous transmission |
489 { | 483 { |
490 ReceivedPacketInfo received_info; | 484 ReceivedPacketInfo received_info; |
491 received_info.largest_observed = 2; | 485 received_info.largest_observed = 2; |
492 received_info.missing_packets.insert(1); | 486 received_info.missing_packets.insert(1); |
493 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 487 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
494 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); | 488 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
495 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 489 manager_.OnIncomingAck(received_info, clock_.Now()); |
496 EXPECT_TRUE(manager_.IsUnacked(4)); | 490 EXPECT_TRUE(manager_.IsUnacked(4)); |
497 } | 491 } |
498 | 492 |
499 // Truncated ack with 4 NACKs | 493 // Truncated ack with 4 NACKs |
500 { | 494 { |
501 ReceivedPacketInfo received_info; | 495 ReceivedPacketInfo received_info; |
502 received_info.largest_observed = 6; | 496 received_info.largest_observed = 6; |
503 received_info.missing_packets.insert(3); | 497 received_info.missing_packets.insert(3); |
504 received_info.missing_packets.insert(4); | 498 received_info.missing_packets.insert(4); |
505 received_info.missing_packets.insert(5); | 499 received_info.missing_packets.insert(5); |
506 received_info.missing_packets.insert(6); | 500 received_info.missing_packets.insert(6); |
507 received_info.is_truncated = true; | 501 received_info.is_truncated = true; |
508 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); | 502 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
509 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); | 503 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); |
510 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); | 504 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); |
511 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 505 manager_.OnIncomingAck(received_info, clock_.Now()); |
512 } | 506 } |
513 | 507 |
514 // High water mark will be raised. | 508 // High water mark will be raised. |
515 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; | 509 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; |
516 VerifyUnackedPackets(unacked, arraysize(unacked)); | 510 VerifyUnackedPackets(unacked, arraysize(unacked)); |
517 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 511 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
518 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 512 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
519 } | 513 } |
520 | 514 |
521 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 515 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; | 556 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
563 VerifyUnackedPackets(unacked, arraysize(unacked)); | 557 VerifyUnackedPackets(unacked, arraysize(unacked)); |
564 VerifyRetransmittablePackets(NULL, 0); | 558 VerifyRetransmittablePackets(NULL, 0); |
565 | 559 |
566 manager_.DiscardUnackedPacket(1); | 560 manager_.DiscardUnackedPacket(1); |
567 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 561 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
568 | 562 |
569 // Ack 2. | 563 // Ack 2. |
570 ReceivedPacketInfo received_info; | 564 ReceivedPacketInfo received_info; |
571 received_info.largest_observed = 2; | 565 received_info.largest_observed = 2; |
572 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 566 manager_.OnIncomingAck(received_info, clock_.Now()); |
573 | 567 |
574 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); | 568 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); |
575 | 569 |
576 // Discard the 3rd packet and ensure there are no FEC packets. | 570 // Discard the 3rd packet and ensure there are no FEC packets. |
577 manager_.DiscardUnackedPacket(3); | 571 manager_.DiscardUnackedPacket(3); |
578 EXPECT_FALSE(manager_.HasUnackedPackets()); | 572 EXPECT_FALSE(manager_.HasUnackedPackets()); |
579 } | 573 } |
580 | 574 |
581 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 575 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
582 VerifyUnackedPackets(NULL, 0); | 576 VerifyUnackedPackets(NULL, 0); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 680 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
687 | 681 |
688 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 682 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
689 EXPECT_CALL(*send_algorithm_, | 683 EXPECT_CALL(*send_algorithm_, |
690 OnPacketAcked(sequence_number, _)).Times(1); | 684 OnPacketAcked(sequence_number, _)).Times(1); |
691 ReceivedPacketInfo received_info; | 685 ReceivedPacketInfo received_info; |
692 received_info.largest_observed = sequence_number; | 686 received_info.largest_observed = sequence_number; |
693 received_info.delta_time_largest_observed = | 687 received_info.delta_time_largest_observed = |
694 QuicTime::Delta::FromMilliseconds(5); | 688 QuicTime::Delta::FromMilliseconds(5); |
695 manager_.OnIncomingAck(received_info, clock_.Now()); | 689 manager_.OnIncomingAck(received_info, clock_.Now()); |
696 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 690 EXPECT_EQ(expected_rtt, |
| 691 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
697 } | 692 } |
698 | 693 |
699 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { | 694 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { |
700 // 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 |
701 // delta_time_largest_observed is larger than the local time elapsed | 696 // delta_time_largest_observed is larger than the local time elapsed |
702 // and is hence invalid. | 697 // and is hence invalid. |
703 QuicPacketSequenceNumber sequence_number = 1; | 698 QuicPacketSequenceNumber sequence_number = 1; |
704 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 699 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
705 SendDataPacket(sequence_number); | 700 SendDataPacket(sequence_number); |
706 clock_.AdvanceTime(expected_rtt); | 701 clock_.AdvanceTime(expected_rtt); |
707 | 702 |
708 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 703 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
709 EXPECT_CALL(*send_algorithm_, | 704 EXPECT_CALL(*send_algorithm_, |
710 OnPacketAcked(sequence_number, _)).Times(1); | 705 OnPacketAcked(sequence_number, _)).Times(1); |
711 ReceivedPacketInfo received_info; | 706 ReceivedPacketInfo received_info; |
712 received_info.largest_observed = sequence_number; | 707 received_info.largest_observed = sequence_number; |
713 received_info.delta_time_largest_observed = | 708 received_info.delta_time_largest_observed = |
714 QuicTime::Delta::FromMilliseconds(11); | 709 QuicTime::Delta::FromMilliseconds(11); |
715 manager_.OnIncomingAck(received_info, clock_.Now()); | 710 manager_.OnIncomingAck(received_info, clock_.Now()); |
716 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 711 EXPECT_EQ(expected_rtt, |
| 712 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
717 } | 713 } |
718 | 714 |
719 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { | 715 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { |
720 // 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 |
721 // delta_time_largest_observed is infinite, and is hence invalid. | 717 // delta_time_largest_observed is infinite, and is hence invalid. |
722 QuicPacketSequenceNumber sequence_number = 1; | 718 QuicPacketSequenceNumber sequence_number = 1; |
723 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 719 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
724 SendDataPacket(sequence_number); | 720 SendDataPacket(sequence_number); |
725 clock_.AdvanceTime(expected_rtt); | 721 clock_.AdvanceTime(expected_rtt); |
726 | 722 |
727 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 723 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
728 EXPECT_CALL(*send_algorithm_, | 724 EXPECT_CALL(*send_algorithm_, |
729 OnPacketAcked(sequence_number, _)).Times(1); | 725 OnPacketAcked(sequence_number, _)).Times(1); |
730 ReceivedPacketInfo received_info; | 726 ReceivedPacketInfo received_info; |
731 received_info.largest_observed = sequence_number; | 727 received_info.largest_observed = sequence_number; |
732 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); | 728 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); |
733 manager_.OnIncomingAck(received_info, clock_.Now()); | 729 manager_.OnIncomingAck(received_info, clock_.Now()); |
734 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 730 EXPECT_EQ(expected_rtt, |
| 731 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
735 } | 732 } |
736 | 733 |
737 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { | 734 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { |
738 // 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 |
739 // delta_time_largest_observed is zero. | 736 // delta_time_largest_observed is zero. |
740 QuicPacketSequenceNumber sequence_number = 1; | 737 QuicPacketSequenceNumber sequence_number = 1; |
741 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 738 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
742 SendDataPacket(sequence_number); | 739 SendDataPacket(sequence_number); |
743 clock_.AdvanceTime(expected_rtt); | 740 clock_.AdvanceTime(expected_rtt); |
744 | 741 |
745 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 742 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
746 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) | 743 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) |
747 .Times(1); | 744 .Times(1); |
748 ReceivedPacketInfo received_info; | 745 ReceivedPacketInfo received_info; |
749 received_info.largest_observed = sequence_number; | 746 received_info.largest_observed = sequence_number; |
750 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 747 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
751 manager_.OnIncomingAck(received_info, clock_.Now()); | 748 manager_.OnIncomingAck(received_info, clock_.Now()); |
752 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 749 EXPECT_EQ(expected_rtt, |
| 750 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
753 } | 751 } |
754 | 752 |
755 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 753 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
756 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 754 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
757 | 755 |
758 // Send 1 packet. | 756 // Send 1 packet. |
759 QuicPacketSequenceNumber sequence_number = 1; | 757 QuicPacketSequenceNumber sequence_number = 1; |
760 SendDataPacket(sequence_number); | 758 SendDataPacket(sequence_number); |
761 | 759 |
762 // 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... |
963 } | 961 } |
964 | 962 |
965 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { | 963 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { |
966 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 964 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
967 } | 965 } |
968 | 966 |
969 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 967 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
970 SendCryptoPacket(1); | 968 SendCryptoPacket(1); |
971 | 969 |
972 // Check the min. | 970 // Check the min. |
973 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 971 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
974 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 972 1 * base::Time::kMicrosecondsPerMillisecond); |
975 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 973 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
976 manager_.GetRetransmissionTime()); | 974 manager_.GetRetransmissionTime()); |
977 | 975 |
978 // Test with a standard smoothed RTT. | 976 // Test with a standard smoothed RTT. |
979 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 977 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
980 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 978 100 * base::Time::kMicrosecondsPerMillisecond); |
981 | 979 |
982 QuicTime::Delta srtt = manager_.SmoothedRtt(); | 980 QuicTime::Delta srtt = manager_.SmoothedRtt(); |
983 QuicTime expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds( | 981 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); |
984 static_cast<int64>(1.5 * srtt.ToMilliseconds()))); | |
985 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 982 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
986 | 983 |
987 // Retransmit the packet by invoking the retransmission timeout. | 984 // Retransmit the packet by invoking the retransmission timeout. |
988 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds( | 985 clock_.AdvanceTime(srtt.Multiply(1.5)); |
989 static_cast<int64>(1.5 * srtt.ToMilliseconds()))); | |
990 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); | 986 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); |
991 manager_.OnRetransmissionTimeout(); | 987 manager_.OnRetransmissionTimeout(); |
992 RetransmitNextPacket(2); | 988 RetransmitNextPacket(2); |
993 | 989 |
994 // 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. |
995 expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds( | 991 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); |
996 static_cast<int64>(2 * 1.5 * srtt.ToMilliseconds()))); | |
997 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 992 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
998 } | 993 } |
999 | 994 |
1000 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { | 995 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
1001 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 996 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
1002 SendDataPacket(1); | 997 SendDataPacket(1); |
1003 SendDataPacket(2); | 998 SendDataPacket(2); |
1004 | 999 |
1005 // Check the min. | 1000 // Check the min. |
1006 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1001 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
1007 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 1002 1 * base::Time::kMicrosecondsPerMillisecond); |
1008 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1003 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
1009 manager_.GetRetransmissionTime()); | 1004 manager_.GetRetransmissionTime()); |
1010 | 1005 |
1011 // Test with a standard smoothed RTT. | 1006 // Test with a standard smoothed RTT. |
1012 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1007 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
1013 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 1008 100 * base::Time::kMicrosecondsPerMillisecond); |
1014 QuicTime::Delta srtt = manager_.SmoothedRtt(); | 1009 QuicTime::Delta srtt = manager_.SmoothedRtt(); |
1015 QuicTime::Delta expected_tlp_delay = QuicTime::Delta::FromMilliseconds( | 1010 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
1016 static_cast<int64>(2 * srtt.ToMilliseconds())); | |
1017 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1011 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
1018 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1012 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1019 | 1013 |
1020 // Retransmit the packet by invoking the retransmission timeout. | 1014 // Retransmit the packet by invoking the retransmission timeout. |
1021 clock_.AdvanceTime(expected_tlp_delay); | 1015 clock_.AdvanceTime(expected_tlp_delay); |
1022 manager_.OnRetransmissionTimeout(); | 1016 manager_.OnRetransmissionTimeout(); |
1023 RetransmitNextPacket(3); | 1017 RetransmitNextPacket(3); |
1024 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1018 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1025 | 1019 |
1026 expected_time = clock_.Now().Add(expected_tlp_delay); | 1020 expected_time = clock_.Now().Add(expected_tlp_delay); |
1027 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1021 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1028 } | 1022 } |
1029 | 1023 |
1030 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { | 1024 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { |
1031 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1025 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
1032 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 1026 QuicTime::Delta::FromMilliseconds(100), QuicTime::Delta::Zero()); |
1033 | 1027 |
1034 SendDataPacket(1); | 1028 SendDataPacket(1); |
1035 SendDataPacket(2); | 1029 SendDataPacket(2); |
1036 | 1030 |
1037 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); | 1031 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); |
1038 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1032 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
1039 .WillRepeatedly(Return(expected_rto_delay)); | 1033 .WillRepeatedly(Return(expected_rto_delay)); |
1040 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); | 1034 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); |
1041 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1035 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1042 | 1036 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1112 | 1106 |
1113 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1107 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
1114 .WillRepeatedly(Return(QuicTime::Zero())); | 1108 .WillRepeatedly(Return(QuicTime::Zero())); |
1115 SendDataPacket(1); | 1109 SendDataPacket(1); |
1116 SendDataPacket(2); | 1110 SendDataPacket(2); |
1117 | 1111 |
1118 // 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 |
1119 // set the loss timeout. | 1113 // set the loss timeout. |
1120 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 1114 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
1121 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); | 1115 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
1122 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _, _)) | 1116 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
1123 .WillOnce(Return(SequenceNumberSet())); | 1117 .WillOnce(Return(SequenceNumberSet())); |
1124 ReceivedPacketInfo received_info; | 1118 ReceivedPacketInfo received_info; |
1125 received_info.largest_observed = 2; | 1119 received_info.largest_observed = 2; |
1126 received_info.missing_packets.insert(1); | 1120 received_info.missing_packets.insert(1); |
1127 manager_.OnIncomingAck(received_info, clock_.Now()); | 1121 manager_.OnIncomingAck(received_info, clock_.Now()); |
1128 | 1122 |
1129 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); | 1123 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); |
1130 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1124 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
1131 .WillRepeatedly(Return(timeout)); | 1125 .WillRepeatedly(Return(timeout)); |
1132 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); | 1126 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); |
1133 | 1127 |
1134 // Fire the retransmission timeout and ensure the loss detection algorithm | 1128 // Fire the retransmission timeout and ensure the loss detection algorithm |
1135 // is invoked. | 1129 // is invoked. |
1136 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _, _)) | 1130 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
1137 .WillOnce(Return(SequenceNumberSet())); | 1131 .WillOnce(Return(SequenceNumberSet())); |
1138 manager_.OnRetransmissionTimeout(); | 1132 manager_.OnRetransmissionTimeout(); |
1139 } | 1133 } |
1140 | 1134 |
1141 } // namespace | 1135 } // namespace |
1142 } // namespace test | 1136 } // namespace test |
1143 } // namespace net | 1137 } // namespace net |
OLD | NEW |