Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(402)

Side by Side Diff: net/quic/quic_sent_packet_manager_test.cc

Issue 2132623002: Landing Recent QUIC changes until 2016-07-02 02:45 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removing comment about RPCs Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_server_session_base.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
1615 1615
1616 options.push_back(kUNDO); 1616 options.push_back(kUNDO);
1617 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1617 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1618 client_config.SetConnectionOptionsToSend(options); 1618 client_config.SetConnectionOptionsToSend(options);
1619 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1619 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1620 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1620 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1621 manager_.SetFromConfig(client_config); 1621 manager_.SetFromConfig(client_config);
1622 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); 1622 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
1623 } 1623 }
1624 1624
1625 TEST_P(QuicSentPacketManagerTest,
1626 NegotiateConservativeReceiveWindowFromOptions) {
1627 ValueRestore<bool> old_flag(&FLAGS_quic_ignore_srbf, false);
1628 EXPECT_EQ(kDefaultSocketReceiveBuffer,
1629 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_));
1630
1631 // Try to set a size below the minimum and ensure it gets set to the min.
1632 QuicConfig client_config;
1633 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024);
1634 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1635 EXPECT_CALL(*send_algorithm_,
1636 SetMaxCongestionWindow(kMinSocketReceiveBuffer * 0.6));
1637 EXPECT_CALL(*send_algorithm_, PacingRate(_))
1638 .WillRepeatedly(Return(QuicBandwidth::Zero()));
1639 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
1640 .WillOnce(Return(10 * kDefaultTCPMSS));
1641 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1642 manager_.SetFromConfig(client_config);
1643
1644 EXPECT_EQ(kMinSocketReceiveBuffer,
1645 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_));
1646
1647 // Ensure the smaller send window only allows 16 packets to be sent.
1648 QuicPathId path_id = kInvalidPathId;
1649 for (QuicPacketNumber i = 1; i <= 16; ++i) {
1650 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1651 .WillOnce(Return(QuicTime::Delta::Zero()));
1652 EXPECT_EQ(QuicTime::Delta::Zero(),
1653 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA,
1654 &path_id));
1655 EXPECT_CALL(*send_algorithm_,
1656 OnPacketSent(_, BytesInFlight(), i, kDefaultLength,
1657 HAS_RETRANSMITTABLE_DATA))
1658 .WillOnce(Return(true));
1659 SerializedPacket packet(CreatePacket(i, true));
1660 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
1661 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
1662 }
1663 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1664 .WillOnce(Return(QuicTime::Delta::Infinite()));
1665 EXPECT_EQ(
1666 QuicTime::Delta::Infinite(),
1667 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id));
1668 }
1669
1670 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) {
1671 ValueRestore<bool> old_flag(&FLAGS_quic_ignore_srbf, false);
1672 EXPECT_EQ(kDefaultSocketReceiveBuffer,
1673 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_));
1674
1675 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent.
1676 QuicPathId path_id = kInvalidPathId;
1677 for (QuicPacketNumber i = 1; i <= 244; ++i) {
1678 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1679 .WillOnce(Return(QuicTime::Delta::Zero()));
1680 EXPECT_EQ(QuicTime::Delta::Zero(),
1681 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA,
1682 &path_id));
1683 EXPECT_CALL(*send_algorithm_,
1684 OnPacketSent(_, BytesInFlight(), i, kDefaultLength,
1685 HAS_RETRANSMITTABLE_DATA))
1686 .WillOnce(Return(true));
1687 SerializedPacket packet(CreatePacket(i, true));
1688 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
1689 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
1690 }
1691 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1692 .WillOnce(Return(QuicTime::Delta::Infinite()));
1693 EXPECT_EQ(
1694 QuicTime::Delta::Infinite(),
1695 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id));
1696 }
1697
1698 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { 1625 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) {
1699 uint32_t initial_rtt_us = 325000; 1626 uint32_t initial_rtt_us = 325000;
1700 EXPECT_NE(initial_rtt_us, 1627 EXPECT_NE(initial_rtt_us,
1701 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); 1628 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds());
1702 1629
1703 QuicConfig config; 1630 QuicConfig config;
1704 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); 1631 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us);
1705 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1632 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1706 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1633 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1707 manager_.SetFromConfig(config); 1634 manager_.SetFromConfig(config);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1792 ExpectAck(1); 1719 ExpectAck(1);
1793 EXPECT_CALL(*network_change_visitor_, 1720 EXPECT_CALL(*network_change_visitor_,
1794 OnPathMtuIncreased(kDefaultLength + 100)); 1721 OnPathMtuIncreased(kDefaultLength + 100));
1795 QuicAckFrame ack_frame = InitAckFrame(1); 1722 QuicAckFrame ack_frame = InitAckFrame(1);
1796 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1723 manager_.OnIncomingAck(ack_frame, clock_.Now());
1797 } 1724 }
1798 1725
1799 } // namespace 1726 } // namespace
1800 } // namespace test 1727 } // namespace test
1801 } // namespace net 1728 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_server_session_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698