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 <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "net/quic/quic_flags.h" | 10 #include "net/quic/quic_flags.h" |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 TEST_P(QuicSentPacketManagerTest, TailLossProbeThenRTO) { | 759 TEST_P(QuicSentPacketManagerTest, TailLossProbeThenRTO) { |
760 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 760 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
761 | 761 |
762 // Send 100 packets. | 762 // Send 100 packets. |
763 const size_t kNumSentPackets = 100; | 763 const size_t kNumSentPackets = 100; |
764 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 764 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
765 SendDataPacket(i); | 765 SendDataPacket(i); |
766 } | 766 } |
767 QuicTime rto_packet_time = clock_.Now(); | 767 QuicTime rto_packet_time = clock_.Now(); |
768 // Advance the time. | 768 // Advance the time. |
769 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); | 769 clock_.AdvanceTime(manager_.GetRetransmissionTime() - clock_.Now()); |
770 | 770 |
771 // The first tail loss probe retransmits 1 packet. | 771 // The first tail loss probe retransmits 1 packet. |
772 manager_.OnRetransmissionTimeout(); | 772 manager_.OnRetransmissionTimeout(); |
773 QuicPathId path_id = kInvalidPathId; | 773 QuicPathId path_id = kInvalidPathId; |
774 EXPECT_EQ( | 774 EXPECT_EQ( |
775 QuicTime::Delta::Zero(), | 775 QuicTime::Delta::Zero(), |
776 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); | 776 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
777 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 777 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
778 manager_.MaybeRetransmitTailLossProbe(); | 778 manager_.MaybeRetransmitTailLossProbe(); |
779 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 779 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
780 RetransmitNextPacket(101); | 780 RetransmitNextPacket(101); |
781 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 781 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
782 .WillOnce(Return(QuicTime::Delta::Infinite())); | 782 .WillOnce(Return(QuicTime::Delta::Infinite())); |
783 EXPECT_EQ( | 783 EXPECT_EQ( |
784 QuicTime::Delta::Infinite(), | 784 QuicTime::Delta::Infinite(), |
785 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); | 785 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
786 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 786 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
787 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); | 787 clock_.AdvanceTime(manager_.GetRetransmissionTime() - clock_.Now()); |
788 | 788 |
789 // The second tail loss probe retransmits 1 packet. | 789 // The second tail loss probe retransmits 1 packet. |
790 manager_.OnRetransmissionTimeout(); | 790 manager_.OnRetransmissionTimeout(); |
791 EXPECT_EQ( | 791 EXPECT_EQ( |
792 QuicTime::Delta::Zero(), | 792 QuicTime::Delta::Zero(), |
793 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); | 793 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
794 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 794 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
795 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); | 795 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
796 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 796 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
797 RetransmitNextPacket(102); | 797 RetransmitNextPacket(102); |
798 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 798 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
799 .WillOnce(Return(QuicTime::Delta::Infinite())); | 799 .WillOnce(Return(QuicTime::Delta::Infinite())); |
800 EXPECT_EQ( | 800 EXPECT_EQ( |
801 QuicTime::Delta::Infinite(), | 801 QuicTime::Delta::Infinite(), |
802 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); | 802 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
803 | 803 |
804 // Ensure the RTO is set based on the correct packet. | 804 // Ensure the RTO is set based on the correct packet. |
805 rto_packet_time = clock_.Now(); | 805 rto_packet_time = clock_.Now(); |
806 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 806 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
807 .WillOnce(Return(QuicTime::Delta::FromSeconds(1))); | 807 .WillOnce(Return(QuicTime::Delta::FromSeconds(1))); |
808 EXPECT_EQ(rto_packet_time.Add(QuicTime::Delta::FromSeconds(1)), | 808 EXPECT_EQ(rto_packet_time + QuicTime::Delta::FromSeconds(1), |
809 manager_.GetRetransmissionTime()); | 809 manager_.GetRetransmissionTime()); |
810 | 810 |
811 // Advance the time enough to ensure all packets are RTO'd. | 811 // Advance the time enough to ensure all packets are RTO'd. |
812 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 812 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
813 | 813 |
814 manager_.OnRetransmissionTimeout(); | 814 manager_.OnRetransmissionTimeout(); |
815 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 815 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
816 EXPECT_EQ(2u, stats_.tlp_count); | 816 EXPECT_EQ(2u, stats_.tlp_count); |
817 EXPECT_EQ(1u, stats_.rto_count); | 817 EXPECT_EQ(1u, stats_.rto_count); |
818 | 818 |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 TEST_P(QuicSentPacketManagerTest, GetTransmissionTime) { | 1188 TEST_P(QuicSentPacketManagerTest, GetTransmissionTime) { |
1189 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 1189 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
1190 } | 1190 } |
1191 | 1191 |
1192 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 1192 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
1193 SendCryptoPacket(1); | 1193 SendCryptoPacket(1); |
1194 | 1194 |
1195 // Check the min. | 1195 // Check the min. |
1196 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); | 1196 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
1197 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); | 1197 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); |
1198 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1198 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(10), |
1199 manager_.GetRetransmissionTime()); | 1199 manager_.GetRetransmissionTime()); |
1200 | 1200 |
1201 // Test with a standard smoothed RTT. | 1201 // Test with a standard smoothed RTT. |
1202 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); | 1202 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); |
1203 | 1203 |
1204 QuicTime::Delta srtt = | 1204 QuicTime::Delta srtt = |
1205 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); | 1205 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
1206 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); | 1206 QuicTime expected_time = clock_.Now() + 1.5 * srtt; |
1207 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1207 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1208 | 1208 |
1209 // Retransmit the packet by invoking the retransmission timeout. | 1209 // Retransmit the packet by invoking the retransmission timeout. |
1210 clock_.AdvanceTime(srtt.Multiply(1.5)); | 1210 clock_.AdvanceTime(1.5 * srtt); |
1211 manager_.OnRetransmissionTimeout(); | 1211 manager_.OnRetransmissionTimeout(); |
1212 RetransmitNextPacket(2); | 1212 RetransmitNextPacket(2); |
1213 | 1213 |
1214 // The retransmission time should now be twice as far in the future. | 1214 // The retransmission time should now be twice as far in the future. |
1215 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); | 1215 expected_time = clock_.Now() + srtt * 2 * 1.5; |
1216 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1216 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1217 } | 1217 } |
1218 | 1218 |
1219 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { | 1219 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
1220 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 1220 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
1221 SendDataPacket(1); | 1221 SendDataPacket(1); |
1222 SendDataPacket(2); | 1222 SendDataPacket(2); |
1223 | 1223 |
1224 // Check the min. | 1224 // Check the min. |
1225 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); | 1225 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
1226 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); | 1226 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); |
1227 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1227 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(10), |
1228 manager_.GetRetransmissionTime()); | 1228 manager_.GetRetransmissionTime()); |
1229 | 1229 |
1230 // Test with a standard smoothed RTT. | 1230 // Test with a standard smoothed RTT. |
1231 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); | 1231 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); |
1232 QuicTime::Delta srtt = | 1232 QuicTime::Delta srtt = |
1233 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); | 1233 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
1234 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); | 1234 QuicTime::Delta expected_tlp_delay = 2 * srtt; |
1235 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1235 QuicTime expected_time = clock_.Now() + expected_tlp_delay; |
1236 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1236 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1237 | 1237 |
1238 // Retransmit the packet by invoking the retransmission timeout. | 1238 // Retransmit the packet by invoking the retransmission timeout. |
1239 clock_.AdvanceTime(expected_tlp_delay); | 1239 clock_.AdvanceTime(expected_tlp_delay); |
1240 manager_.OnRetransmissionTimeout(); | 1240 manager_.OnRetransmissionTimeout(); |
1241 QuicPathId path_id = kInvalidPathId; | 1241 QuicPathId path_id = kInvalidPathId; |
1242 EXPECT_EQ( | 1242 EXPECT_EQ( |
1243 QuicTime::Delta::Zero(), | 1243 QuicTime::Delta::Zero(), |
1244 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); | 1244 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
1245 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1245 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1246 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); | 1246 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
1247 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1247 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
1248 RetransmitNextPacket(3); | 1248 RetransmitNextPacket(3); |
1249 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1249 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
1250 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1250 .WillOnce(Return(QuicTime::Delta::Infinite())); |
1251 EXPECT_EQ( | 1251 EXPECT_EQ( |
1252 QuicTime::Delta::Infinite(), | 1252 QuicTime::Delta::Infinite(), |
1253 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); | 1253 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
1254 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1254 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1255 | 1255 |
1256 expected_time = clock_.Now().Add(expected_tlp_delay); | 1256 expected_time = clock_.Now() + expected_tlp_delay; |
1257 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1257 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1258 } | 1258 } |
1259 | 1259 |
1260 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { | 1260 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { |
1261 const_cast<RttStats*>(manager_.GetRttStats()) | 1261 const_cast<RttStats*>(manager_.GetRttStats()) |
1262 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), | 1262 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), |
1263 QuicTime::Delta::Zero(), QuicTime::Zero()); | 1263 QuicTime::Delta::Zero(), QuicTime::Zero()); |
1264 SendDataPacket(1); | 1264 SendDataPacket(1); |
1265 SendDataPacket(2); | 1265 SendDataPacket(2); |
1266 SendDataPacket(3); | 1266 SendDataPacket(3); |
1267 SendDataPacket(4); | 1267 SendDataPacket(4); |
1268 | 1268 |
1269 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); | 1269 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); |
1270 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1270 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
1271 .WillRepeatedly(Return(expected_rto_delay)); | 1271 .WillRepeatedly(Return(expected_rto_delay)); |
1272 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); | 1272 QuicTime expected_time = clock_.Now() + expected_rto_delay; |
1273 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1273 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1274 | 1274 |
1275 // Retransmit the packet by invoking the retransmission timeout. | 1275 // Retransmit the packet by invoking the retransmission timeout. |
1276 clock_.AdvanceTime(expected_rto_delay); | 1276 clock_.AdvanceTime(expected_rto_delay); |
1277 manager_.OnRetransmissionTimeout(); | 1277 manager_.OnRetransmissionTimeout(); |
1278 // All packets are still considered inflight. | 1278 // All packets are still considered inflight. |
1279 EXPECT_EQ(4 * kDefaultLength, | 1279 EXPECT_EQ(4 * kDefaultLength, |
1280 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); | 1280 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); |
1281 RetransmitNextPacket(5); | 1281 RetransmitNextPacket(5); |
1282 RetransmitNextPacket(6); | 1282 RetransmitNextPacket(6); |
1283 // All previous packets are inflight, plus two rto retransmissions. | 1283 // All previous packets are inflight, plus two rto retransmissions. |
1284 EXPECT_EQ(6 * kDefaultLength, | 1284 EXPECT_EQ(6 * kDefaultLength, |
1285 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); | 1285 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); |
1286 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1286 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1287 | 1287 |
1288 // The delay should double the second time. | 1288 // The delay should double the second time. |
1289 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay); | 1289 expected_time = clock_.Now() + expected_rto_delay + expected_rto_delay; |
1290 // Once we always base the timer on the right edge, leaving the older packets | 1290 // Once we always base the timer on the right edge, leaving the older packets |
1291 // in flight doesn't change the timeout. | 1291 // in flight doesn't change the timeout. |
1292 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1292 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1293 | 1293 |
1294 // Ack a packet before the first RTO and ensure the RTO timeout returns to the | 1294 // Ack a packet before the first RTO and ensure the RTO timeout returns to the |
1295 // original value and OnRetransmissionTimeout is not called or reverted. | 1295 // original value and OnRetransmissionTimeout is not called or reverted. |
1296 QuicAckFrame ack_frame = InitAckFrame(2); | 1296 QuicAckFrame ack_frame = InitAckFrame(2); |
1297 NackPackets(1, 2, &ack_frame); | 1297 NackPackets(1, 2, &ack_frame); |
1298 ExpectAck(2); | 1298 ExpectAck(2); |
1299 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 1299 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
1300 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1300 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1301 EXPECT_EQ(5 * kDefaultLength, | 1301 EXPECT_EQ(5 * kDefaultLength, |
1302 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); | 1302 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); |
1303 | 1303 |
1304 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time | 1304 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time |
1305 // and the TLP time. In production, there would always be two TLP's first. | 1305 // and the TLP time. In production, there would always be two TLP's first. |
1306 // Since retransmission was spurious, smoothed_rtt_ is expired, and replaced | 1306 // Since retransmission was spurious, smoothed_rtt_ is expired, and replaced |
1307 // by the latest RTT sample of 500ms. | 1307 // by the latest RTT sample of 500ms. |
1308 expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds(1000)); | 1308 expected_time = clock_.Now() + QuicTime::Delta::FromMilliseconds(1000); |
1309 // Once we always base the timer on the right edge, leaving the older packets | 1309 // Once we always base the timer on the right edge, leaving the older packets |
1310 // in flight doesn't change the timeout. | 1310 // in flight doesn't change the timeout. |
1311 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1311 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
1312 } | 1312 } |
1313 | 1313 |
1314 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelayMin) { | 1314 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelayMin) { |
1315 SendDataPacket(1); | 1315 SendDataPacket(1); |
1316 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1316 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
1317 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 1317 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); |
1318 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(200); | 1318 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(200); |
1319 | 1319 |
1320 // If the delay is smaller than the min, ensure it exponentially backs off | 1320 // If the delay is smaller than the min, ensure it exponentially backs off |
1321 // from the min. | 1321 // from the min. |
1322 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); | 1322 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); |
1323 for (int i = 0; i < 5; ++i) { | 1323 for (int i = 0; i < 5; ++i) { |
1324 EXPECT_EQ(delay, | 1324 EXPECT_EQ(delay, |
1325 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); | 1325 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); |
1326 delay = delay.Add(delay); | 1326 delay = delay + delay; |
1327 manager_.OnRetransmissionTimeout(); | 1327 manager_.OnRetransmissionTimeout(); |
1328 RetransmitNextPacket(i + 2); | 1328 RetransmitNextPacket(i + 2); |
1329 } | 1329 } |
1330 } | 1330 } |
1331 | 1331 |
1332 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelayMax) { | 1332 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelayMax) { |
1333 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1333 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
1334 .WillOnce(Return(QuicTime::Delta::FromSeconds(500))); | 1334 .WillOnce(Return(QuicTime::Delta::FromSeconds(500))); |
1335 | 1335 |
1336 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), | 1336 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), |
1337 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); | 1337 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); |
1338 } | 1338 } |
1339 | 1339 |
1340 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelay) { | 1340 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelay) { |
1341 SendDataPacket(1); | 1341 SendDataPacket(1); |
1342 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); | 1342 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
1343 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1343 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
1344 .WillRepeatedly(Return(delay)); | 1344 .WillRepeatedly(Return(delay)); |
1345 | 1345 |
1346 // Delay should back off exponentially. | 1346 // Delay should back off exponentially. |
1347 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); | 1347 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); |
1348 for (int i = 0; i < 5; ++i) { | 1348 for (int i = 0; i < 5; ++i) { |
1349 EXPECT_EQ(delay, | 1349 EXPECT_EQ(delay, |
1350 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); | 1350 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); |
1351 delay = delay.Add(delay); | 1351 delay = delay + delay; |
1352 manager_.OnRetransmissionTimeout(); | 1352 manager_.OnRetransmissionTimeout(); |
1353 RetransmitNextPacket(i + 2); | 1353 RetransmitNextPacket(i + 2); |
1354 } | 1354 } |
1355 } | 1355 } |
1356 | 1356 |
1357 TEST_P(QuicSentPacketManagerTest, GetLossDelay) { | 1357 TEST_P(QuicSentPacketManagerTest, GetLossDelay) { |
1358 MockLossAlgorithm* loss_algorithm = new MockLossAlgorithm(); | 1358 MockLossAlgorithm* loss_algorithm = new MockLossAlgorithm(); |
1359 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm); | 1359 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm); |
1360 | 1360 |
1361 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1361 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
1362 .WillRepeatedly(Return(QuicTime::Zero())); | 1362 .WillRepeatedly(Return(QuicTime::Zero())); |
1363 SendDataPacket(1); | 1363 SendDataPacket(1); |
1364 SendDataPacket(2); | 1364 SendDataPacket(2); |
1365 | 1365 |
1366 // Handle an ack which causes the loss algorithm to be evaluated and | 1366 // Handle an ack which causes the loss algorithm to be evaluated and |
1367 // set the loss timeout. | 1367 // set the loss timeout. |
1368 ExpectAck(2); | 1368 ExpectAck(2); |
1369 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); | 1369 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); |
1370 QuicAckFrame ack_frame = InitAckFrame(2); | 1370 QuicAckFrame ack_frame = InitAckFrame(2); |
1371 NackPackets(1, 2, &ack_frame); | 1371 NackPackets(1, 2, &ack_frame); |
1372 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1372 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
1373 | 1373 |
1374 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); | 1374 QuicTime timeout(clock_.Now() + QuicTime::Delta::FromMilliseconds(10)); |
1375 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1375 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
1376 .WillRepeatedly(Return(timeout)); | 1376 .WillRepeatedly(Return(timeout)); |
1377 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); | 1377 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); |
1378 | 1378 |
1379 // Fire the retransmission timeout and ensure the loss detection algorithm | 1379 // Fire the retransmission timeout and ensure the loss detection algorithm |
1380 // is invoked. | 1380 // is invoked. |
1381 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); | 1381 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); |
1382 manager_.OnRetransmissionTimeout(); | 1382 manager_.OnRetransmissionTimeout(); |
1383 } | 1383 } |
1384 | 1384 |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1719 ExpectAck(1); | 1719 ExpectAck(1); |
1720 EXPECT_CALL(*network_change_visitor_, | 1720 EXPECT_CALL(*network_change_visitor_, |
1721 OnPathMtuIncreased(kDefaultLength + 100)); | 1721 OnPathMtuIncreased(kDefaultLength + 100)); |
1722 QuicAckFrame ack_frame = InitAckFrame(1); | 1722 QuicAckFrame ack_frame = InitAckFrame(1); |
1723 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1723 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
1724 } | 1724 } |
1725 | 1725 |
1726 } // namespace | 1726 } // namespace |
1727 } // namespace test | 1727 } // namespace test |
1728 } // namespace net | 1728 } // namespace net |
OLD | NEW |