| 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 |