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

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

Issue 126283002: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: removed extra space Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.h » ('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 "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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 106 EXPECT_TRUE(manager_.HasPendingRetransmissions());
107 QuicSentPacketManager::PendingRetransmission next_retransmission = 107 QuicSentPacketManager::PendingRetransmission next_retransmission =
108 manager_.NextPendingRetransmission(); 108 manager_.NextPendingRetransmission();
109 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); 109 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number);
110 EXPECT_EQ(NACK_RETRANSMISSION, next_retransmission.transmission_type); 110 EXPECT_EQ(NACK_RETRANSMISSION, next_retransmission.transmission_type);
111 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); 111 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number);
112 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( 112 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(
113 &manager_, new_sequence_number)); 113 &manager_, new_sequence_number));
114 } 114 }
115 115
116 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number,
117 QuicPacketSequenceNumber new_sequence_number) {
118 RetransmitPacket(old_sequence_number, new_sequence_number);
119 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, new_sequence_number, _, _, _))
120 .WillOnce(Return(true));
121 manager_.OnPacketSent(new_sequence_number, clock_.Now(),
122 1000, NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
123 }
124
116 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { 125 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) {
117 return CreatePacket(sequence_number, true); 126 return CreatePacket(sequence_number, true);
118 } 127 }
119 128
120 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, 129 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number,
121 bool retransmittable) { 130 bool retransmittable) {
122 packets_.push_back(QuicPacket::NewDataPacket( 131 packets_.push_back(QuicPacket::NewDataPacket(
123 NULL, 1000, false, PACKET_8BYTE_GUID, false, 132 NULL, 1000, false, PACKET_8BYTE_GUID, false,
124 PACKET_6BYTE_SEQUENCE_NUMBER)); 133 PACKET_6BYTE_SEQUENCE_NUMBER));
125 return SerializedPacket( 134 return SerializedPacket(
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 QuicPacketSequenceNumber unacked[] = { 2 }; 268 QuicPacketSequenceNumber unacked[] = { 2 };
260 VerifyUnackedPackets(unacked, arraysize(unacked)); 269 VerifyUnackedPackets(unacked, arraysize(unacked));
261 VerifyPendingPackets(NULL, 0); 270 VerifyPendingPackets(NULL, 0);
262 VerifyRetransmittablePackets(NULL, 0); 271 VerifyRetransmittablePackets(NULL, 0);
263 272
264 // Verify that the retransmission alarm would not fire, 273 // Verify that the retransmission alarm would not fire,
265 // since there is no retransmittable data outstanding. 274 // since there is no retransmittable data outstanding.
266 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 275 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
267 } 276 }
268 277
278 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) {
279 SendDataPacket(1);
280 RetransmitPacket(1, 2);
281 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _))
282 .WillOnce(Return(true));
283 manager_.OnPacketSent(2, clock_.ApproximateNow(), 1000,
284 NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
285
286 // First, ACK packet 1 which makes packet 2 non-retransmittable.
287 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _));
288 ReceivedPacketInfo received_info;
289 received_info.largest_observed = 1;
290 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero()));
291
292 SendDataPacket(3);
293 SendDataPacket(4);
294 SendDataPacket(5);
295 // Next, NACK packet 2 three times.
296 received_info.largest_observed = 3;
297 received_info.missing_packets.insert(2);
298 EXPECT_CALL(*send_algorithm_, OnPacketAcked(3, _, _));
299 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero()));
300
301 received_info.largest_observed = 4;
302 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _, _));
303 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero()));
304
305 received_info.largest_observed = 5;
306 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _, _));
307 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
308 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
309 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero()));
310
311 // No packets remain unacked.
312 VerifyUnackedPackets(NULL, 0);
313 VerifyPendingPackets(NULL, 0);
314 VerifyRetransmittablePackets(NULL, 0);
315
316 // Verify that the retransmission alarm would not fire,
317 // since there is no retransmittable data outstanding.
318 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
319 }
320
321 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) {
322 SendDataPacket(1);
323 RetransmitAndSendPacket(1, 2);
324
325 // Fire the RTO, which will mark 2 for retransmission (but will not send it).
326 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
327 manager_.OnRetransmissionTimeout();
328 EXPECT_TRUE(manager_.HasPendingRetransmissions());
329
330 // Ack 1 but not 2, before 2 is able to be sent.
331 // Since 1 has been retransmitted, it has already been lost, and so the
332 // send algorithm is not informed that it has been ACK'd.
333 ReceivedPacketInfo received_info;
334 received_info.largest_observed = 1;
335 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero()));
336
337 // Since 2 was marked for retransmit, when 1 is acked, 2 is discarded.
338 VerifyUnackedPackets(NULL, 0);
339 VerifyPendingPackets(NULL, 0);
340 VerifyRetransmittablePackets(NULL, 0);
341
342 // Verify that the retransmission alarm would not fire,
343 // since there is no retransmittable data outstanding.
344 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
345 }
346
269 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { 347 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
270 SendDataPacket(1); 348 SendDataPacket(1);
271 RetransmitPacket(1, 2); 349 RetransmitPacket(1, 2);
272 RetransmitPacket(2, 3); 350 RetransmitPacket(2, 3);
273 351
274 // Ack 1 but not 2 or 3. 352 // Ack 1 but not 2 or 3.
275 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); 353 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _));
276 ReceivedPacketInfo received_info; 354 ReceivedPacketInfo received_info;
277 received_info.largest_observed = 1; 355 received_info.largest_observed = 1;
278 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 356 manager_.OnIncomingAck(received_info, QuicTime::Zero());
(...skipping 24 matching lines...) Expand all
303 received_info.is_truncated = true; 381 received_info.is_truncated = true;
304 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 382 manager_.OnIncomingAck(received_info, QuicTime::Zero());
305 383
306 // High water mark will be raised. 384 // High water mark will be raised.
307 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; 385 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 };
308 VerifyUnackedPackets(unacked, arraysize(unacked)); 386 VerifyUnackedPackets(unacked, arraysize(unacked));
309 QuicPacketSequenceNumber retransmittable[] = { 4 }; 387 QuicPacketSequenceNumber retransmittable[] = { 4 };
310 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 388 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
311 } 389 }
312 390
391 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) {
392 SerializedPacket serialized_packet(CreateDataPacket(1));
393
394 manager_.OnSerializedPacket(serialized_packet);
395 RetransmitPacket(1, 2);
396 RetransmitPacket(2, 3);
397 RetransmitPacket(3, 4);
398 manager_.OnSerializedPacket(CreateDataPacket(5));
399 manager_.OnSerializedPacket(CreateDataPacket(6));
400 manager_.OnSerializedPacket(CreateDataPacket(7));
401 manager_.OnSerializedPacket(CreateDataPacket(8));
402 manager_.OnSerializedPacket(CreateDataPacket(9));
403
404 // Ack previous transmission
405 {
406 ReceivedPacketInfo received_info;
407 received_info.largest_observed = 2;
408 received_info.missing_packets.insert(1);
409 manager_.OnIncomingAck(received_info, QuicTime::Zero());
410 EXPECT_TRUE(manager_.IsUnacked(4));
411 }
412
413 // Truncated ack with 4 NACKs
414 {
415 ReceivedPacketInfo received_info;
416 received_info.largest_observed = 6;
417 received_info.missing_packets.insert(3);
418 received_info.missing_packets.insert(4);
419 received_info.missing_packets.insert(5);
420 received_info.missing_packets.insert(6);
421 received_info.is_truncated = true;
422 manager_.OnIncomingAck(received_info, QuicTime::Zero());
423 }
424
425 // High water mark will be raised.
426 QuicPacketSequenceNumber unacked[] = { 5, 6, 7, 8, 9 };
427 VerifyUnackedPackets(unacked, arraysize(unacked));
428 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 };
429 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
430 }
431
313 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { 432 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) {
314 manager_.OnSerializedPacket(CreateDataPacket(1)); 433 manager_.OnSerializedPacket(CreateDataPacket(1));
315 manager_.OnSerializedPacket(CreateDataPacket(2)); 434 manager_.OnSerializedPacket(CreateDataPacket(2));
316 manager_.OnSerializedPacket(CreateDataPacket(3)); 435 manager_.OnSerializedPacket(CreateDataPacket(3));
317 436
318 { 437 {
319 // Ack packets 1 and 3. 438 // Ack packets 1 and 3.
320 ReceivedPacketInfo received_info; 439 ReceivedPacketInfo received_info;
321 received_info.largest_observed = 3; 440 received_info.largest_observed = 3;
322 received_info.missing_packets.insert(2); 441 received_info.missing_packets.insert(2);
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 980
862 // The second tail loss probe retransmits 1 packet. 981 // The second tail loss probe retransmits 1 packet.
863 manager_.OnRetransmissionTimeout(); 982 manager_.OnRetransmissionTimeout();
864 RetransmitNextPacket(102); 983 RetransmitNextPacket(102);
865 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 984 EXPECT_FALSE(manager_.HasPendingRetransmissions());
866 985
867 // Advance the time enough to ensure all packets are RTO'd. 986 // Advance the time enough to ensure all packets are RTO'd.
868 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); 987 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000));
869 988
870 // The final RTO abandons all of them. 989 // The final RTO abandons all of them.
871 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 990 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
872 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(100)));
873 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
874 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _))
875 .Times(kNumSentPackets + 2);
876 manager_.OnRetransmissionTimeout(); 991 manager_.OnRetransmissionTimeout();
877 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 992 EXPECT_TRUE(manager_.HasPendingRetransmissions());
878 } 993 }
879 994
880 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { 995 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) {
881 // Send 2 crypto packets and 3 data packets. 996 // Send 2 crypto packets and 3 data packets.
882 const size_t kNumSentCryptoPackets = 2; 997 const size_t kNumSentCryptoPackets = 2;
883 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 998 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
884 SendCryptoPacket(i); 999 SendCryptoPacket(i);
885 } 1000 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1034 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
920 } 1035 }
921 1036
922 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 1037 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
923 // Send 100 packets and then ensure all are abandoned when the RTO fires. 1038 // Send 100 packets and then ensure all are abandoned when the RTO fires.
924 const size_t kNumSentPackets = 100; 1039 const size_t kNumSentPackets = 100;
925 for (size_t i = 1; i <= kNumSentPackets; ++i) { 1040 for (size_t i = 1; i <= kNumSentPackets; ++i) {
926 SendDataPacket(i); 1041 SendDataPacket(i);
927 } 1042 }
928 1043
929 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); 1044 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
930
931 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
932 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
933 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
934 manager_.OnRetransmissionTimeout(); 1045 manager_.OnRetransmissionTimeout();
935 } 1046 }
936 1047
937 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { 1048 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) {
938 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 1049 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
939 } 1050 }
940 1051
941 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { 1052 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) {
942 SendCryptoPacket(1); 1053 SendCryptoPacket(1);
943 1054
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 SendDataPacket(1); 1117 SendDataPacket(1);
1007 SendDataPacket(2); 1118 SendDataPacket(2);
1008 1119
1009 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); 1120 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500);
1010 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 1121 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
1011 .WillRepeatedly(Return(expected_rto_delay)); 1122 .WillRepeatedly(Return(expected_rto_delay));
1012 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); 1123 QuicTime expected_time = clock_.Now().Add(expected_rto_delay);
1013 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1124 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1014 1125
1015 // Retransmit the packet by invoking the retransmission timeout. 1126 // Retransmit the packet by invoking the retransmission timeout.
1016 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); 1127 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1017 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
1018 clock_.AdvanceTime(expected_rto_delay); 1128 clock_.AdvanceTime(expected_rto_delay);
1019 manager_.OnRetransmissionTimeout(); 1129 manager_.OnRetransmissionTimeout();
1020 RetransmitNextPacket(3); 1130 RetransmitNextPacket(3);
1021 RetransmitNextPacket(4); 1131 RetransmitNextPacket(4);
1022 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1132 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1023 1133
1024 // The delay should double the second time. 1134 // The delay should double the second time.
1025 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay); 1135 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay);
1026 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1136 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1027 } 1137 }
(...skipping 18 matching lines...) Expand all
1046 SendDataPacket(1); 1156 SendDataPacket(1);
1047 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); 1157 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
1048 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 1158 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
1049 .WillRepeatedly(Return(delay)); 1159 .WillRepeatedly(Return(delay));
1050 1160
1051 // Delay should back off exponentially. 1161 // Delay should back off exponentially.
1052 for (int i = 0; i < 5; ++i) { 1162 for (int i = 0; i < 5; ++i) {
1053 EXPECT_EQ(delay, 1163 EXPECT_EQ(delay,
1054 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); 1164 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_));
1055 delay = delay.Add(delay); 1165 delay = delay.Add(delay);
1056 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); 1166 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1057 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
1058 manager_.OnRetransmissionTimeout(); 1167 manager_.OnRetransmissionTimeout();
1059 RetransmitNextPacket(i + 2); 1168 RetransmitNextPacket(i + 2);
1060 } 1169 }
1061 } 1170 }
1062 1171
1063 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) {
1064 FLAGS_limit_rto_increase_for_tests = true;
1065
1066 SendDataPacket(1);
1067 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
1068 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
1069 .WillRepeatedly(Return(delay));
1070
1071 // No backoff for the first 5 retransmissions.
1072 for (int i = 0; i < 5; ++i) {
1073 EXPECT_EQ(delay,
1074 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_));
1075 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _));
1076 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
1077 manager_.OnRetransmissionTimeout();
1078 RetransmitNextPacket(i + 2);
1079 }
1080
1081 // Then backoff starts
1082 EXPECT_EQ(delay.Add(delay),
1083 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_));
1084 }
1085
1086 } // namespace 1172 } // namespace
1087 } // namespace test 1173 } // namespace test
1088 } // namespace net 1174 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698