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_config_peer.h" | 8 #include "net/quic/test_tools/quic_config_peer.h" |
9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
10 #include "net/quic/test_tools/quic_test_utils.h" | 10 #include "net/quic/test_tools/quic_test_utils.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 QuicSentPacketManagerTest() | 44 QuicSentPacketManagerTest() |
45 : manager_(true, &clock_, &stats_, kFixRate, kNack), | 45 : manager_(true, &clock_, &stats_, kFixRate, kNack), |
46 send_algorithm_(new StrictMock<MockSendAlgorithm>) { | 46 send_algorithm_(new StrictMock<MockSendAlgorithm>) { |
47 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); | 47 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); |
48 // Disable tail loss probes for most tests. | 48 // Disable tail loss probes for most tests. |
49 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); | 49 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); |
50 // Advance the time 1s so the send times are never QuicTime::Zero. | 50 // Advance the time 1s so the send times are never QuicTime::Zero. |
51 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 51 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
52 } | 52 } |
53 | 53 |
54 virtual ~QuicSentPacketManagerTest() { | 54 virtual ~QuicSentPacketManagerTest() OVERRIDE { |
55 STLDeleteElements(&packets_); | 55 STLDeleteElements(&packets_); |
56 } | 56 } |
57 | 57 |
58 QuicByteCount BytesInFlight() { | 58 QuicByteCount BytesInFlight() { |
59 return QuicSentPacketManagerPeer::GetBytesInFlight(&manager_); | 59 return QuicSentPacketManagerPeer::GetBytesInFlight(&manager_); |
60 } | 60 } |
61 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 61 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
62 size_t num_packets) { | 62 size_t num_packets) { |
63 if (num_packets == 0) { | 63 if (num_packets == 0) { |
64 EXPECT_FALSE(manager_.HasUnackedPackets()); | 64 EXPECT_FALSE(manager_.HasUnackedPackets()); |
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 | 778 |
779 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 779 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
780 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 780 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
781 | 781 |
782 // Send 1 packet. | 782 // Send 1 packet. |
783 QuicPacketSequenceNumber sequence_number = 1; | 783 QuicPacketSequenceNumber sequence_number = 1; |
784 SendDataPacket(sequence_number); | 784 SendDataPacket(sequence_number); |
785 | 785 |
786 // The first tail loss probe retransmits 1 packet. | 786 // The first tail loss probe retransmits 1 packet. |
787 manager_.OnRetransmissionTimeout(); | 787 manager_.OnRetransmissionTimeout(); |
| 788 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 789 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 790 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 791 manager_.MaybeRetransmitTailLossProbe(); |
| 792 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
788 RetransmitNextPacket(2); | 793 RetransmitNextPacket(2); |
789 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 794 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
790 | 795 |
791 // The second tail loss probe retransmits 1 packet. | 796 // The second tail loss probe retransmits 1 packet. |
792 manager_.OnRetransmissionTimeout(); | 797 manager_.OnRetransmissionTimeout(); |
| 798 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 799 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 800 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 801 manager_.MaybeRetransmitTailLossProbe(); |
| 802 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
793 RetransmitNextPacket(3); | 803 RetransmitNextPacket(3); |
| 804 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| 805 QuicTime::Delta::Infinite())); |
| 806 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 807 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
794 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 808 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
795 | 809 |
796 // Ack the third and ensure the first two are still pending. | 810 // Ack the third and ensure the first two are still pending. |
797 ExpectAck(3); | 811 ExpectAck(3); |
798 ReceivedPacketInfo received_info; | 812 ReceivedPacketInfo received_info; |
799 received_info.largest_observed = 3; | 813 received_info.largest_observed = 3; |
800 received_info.missing_packets.insert(1); | 814 received_info.missing_packets.insert(1); |
801 received_info.missing_packets.insert(2); | 815 received_info.missing_packets.insert(2); |
802 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 816 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
803 | 817 |
(...skipping 15 matching lines...) Expand all Loading... |
819 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 833 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
820 | 834 |
821 // Send 100 packets. | 835 // Send 100 packets. |
822 const size_t kNumSentPackets = 100; | 836 const size_t kNumSentPackets = 100; |
823 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 837 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
824 SendDataPacket(i); | 838 SendDataPacket(i); |
825 } | 839 } |
826 | 840 |
827 // The first tail loss probe retransmits 1 packet. | 841 // The first tail loss probe retransmits 1 packet. |
828 manager_.OnRetransmissionTimeout(); | 842 manager_.OnRetransmissionTimeout(); |
| 843 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 844 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 845 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 846 manager_.MaybeRetransmitTailLossProbe(); |
| 847 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
829 RetransmitNextPacket(101); | 848 RetransmitNextPacket(101); |
| 849 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| 850 QuicTime::Delta::Infinite())); |
| 851 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 852 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
830 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 853 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
831 | 854 |
832 // The second tail loss probe retransmits 1 packet. | 855 // The second tail loss probe retransmits 1 packet. |
833 manager_.OnRetransmissionTimeout(); | 856 manager_.OnRetransmissionTimeout(); |
| 857 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 858 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 859 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 860 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
| 861 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
834 RetransmitNextPacket(102); | 862 RetransmitNextPacket(102); |
835 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 863 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| 864 QuicTime::Delta::Infinite())); |
| 865 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 866 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
836 | 867 |
837 // Advance the time enough to ensure all packets are RTO'd. | 868 // Advance the time enough to ensure all packets are RTO'd. |
838 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 869 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
839 | 870 |
840 // The final RTO abandons all of them. | 871 // The final RTO abandons all of them. |
841 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 872 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
842 manager_.OnRetransmissionTimeout(); | 873 manager_.OnRetransmissionTimeout(); |
843 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 874 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
844 EXPECT_EQ(2u, stats_.tlp_count); | 875 EXPECT_EQ(2u, stats_.tlp_count); |
845 EXPECT_EQ(1u, stats_.rto_count); | 876 EXPECT_EQ(1u, stats_.rto_count); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1022 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 1053 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
1023 // Serialize two data packets and send the latter. | 1054 // Serialize two data packets and send the latter. |
1024 SerializedPacket packet(CreateDataPacket(1)); | 1055 SerializedPacket packet(CreateDataPacket(1)); |
1025 manager_.OnSerializedPacket(packet); | 1056 manager_.OnSerializedPacket(packet); |
1026 SendDataPacket(2); | 1057 SendDataPacket(2); |
1027 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1058 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
1028 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1059 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
1029 | 1060 |
1030 // Retransmit 1 unacked packets, but not the first serialized packet. | 1061 // Retransmit 1 unacked packets, but not the first serialized packet. |
1031 manager_.OnRetransmissionTimeout(); | 1062 manager_.OnRetransmissionTimeout(); |
| 1063 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1064 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1065 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1066 manager_.MaybeRetransmitTailLossProbe(); |
| 1067 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
1032 RetransmitNextPacket(3); | 1068 RetransmitNextPacket(3); |
| 1069 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| 1070 QuicTime::Delta::Infinite())); |
| 1071 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1072 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
1033 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1073 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1034 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1074 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
1035 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1075 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
1036 } | 1076 } |
1037 | 1077 |
1038 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { | 1078 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { |
1039 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); | 1079 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); |
1040 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1080 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
1041 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); | 1081 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); |
1042 EXPECT_EQ(min_rtt, | 1082 EXPECT_EQ(min_rtt, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1074 } | 1114 } |
1075 | 1115 |
1076 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { | 1116 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
1077 // Send 100 packets and then ensure all are abandoned when the RTO fires. | 1117 // Send 100 packets and then ensure all are abandoned when the RTO fires. |
1078 const size_t kNumSentPackets = 100; | 1118 const size_t kNumSentPackets = 100; |
1079 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 1119 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
1080 SendDataPacket(i); | 1120 SendDataPacket(i); |
1081 } | 1121 } |
1082 | 1122 |
1083 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1123 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1124 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); |
1084 manager_.OnRetransmissionTimeout(); | 1125 manager_.OnRetransmissionTimeout(); |
1085 } | 1126 } |
1086 | 1127 |
1087 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { | 1128 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { |
1088 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 1129 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
1089 } | 1130 } |
1090 | 1131 |
1091 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 1132 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
1092 SendCryptoPacket(1); | 1133 SendCryptoPacket(1); |
1093 | 1134 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1130 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1171 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
1131 100 * base::Time::kMicrosecondsPerMillisecond); | 1172 100 * base::Time::kMicrosecondsPerMillisecond); |
1132 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); | 1173 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); |
1133 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); | 1174 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
1134 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1175 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
1135 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1176 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1136 | 1177 |
1137 // Retransmit the packet by invoking the retransmission timeout. | 1178 // Retransmit the packet by invoking the retransmission timeout. |
1138 clock_.AdvanceTime(expected_tlp_delay); | 1179 clock_.AdvanceTime(expected_tlp_delay); |
1139 manager_.OnRetransmissionTimeout(); | 1180 manager_.OnRetransmissionTimeout(); |
| 1181 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1182 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1183 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1184 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
| 1185 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
1140 RetransmitNextPacket(3); | 1186 RetransmitNextPacket(3); |
| 1187 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( |
| 1188 QuicTime::Delta::Infinite())); |
| 1189 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1190 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
1141 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1191 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1142 | 1192 |
1143 expected_time = clock_.Now().Add(expected_tlp_delay); | 1193 expected_time = clock_.Now().Add(expected_tlp_delay); |
1144 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1194 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1145 } | 1195 } |
1146 | 1196 |
1147 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { | 1197 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { |
1148 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1198 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
1149 QuicTime::Delta::FromMilliseconds(100), | 1199 QuicTime::Delta::FromMilliseconds(100), |
1150 QuicTime::Delta::Zero(), | 1200 QuicTime::Delta::Zero(), |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1268 | 1318 |
1269 EXPECT_EQ(kTime, | 1319 EXPECT_EQ(kTime, |
1270 QuicSentPacketManagerPeer::GetLossAlgorithm( | 1320 QuicSentPacketManagerPeer::GetLossAlgorithm( |
1271 &manager_)->GetLossDetectionType()); | 1321 &manager_)->GetLossDetectionType()); |
1272 } | 1322 } |
1273 | 1323 |
1274 | 1324 |
1275 } // namespace | 1325 } // namespace |
1276 } // namespace test | 1326 } // namespace test |
1277 } // namespace net | 1327 } // namespace net |
OLD | NEW |