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

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

Issue 157803007: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win_x64 compiler error fix Created 6 years, 10 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.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 "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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 .Times(1).WillOnce(Return(true)); 142 .Times(1).WillOnce(Return(true));
143 SerializedPacket packet(CreateDataPacket(sequence_number)); 143 SerializedPacket packet(CreateDataPacket(sequence_number));
144 packet.retransmittable_frames->AddStreamFrame( 144 packet.retransmittable_frames->AddStreamFrame(
145 new QuicStreamFrame(1, false, 0, IOVector())); 145 new QuicStreamFrame(1, false, 0, IOVector()));
146 manager_.OnSerializedPacket(packet); 146 manager_.OnSerializedPacket(packet);
147 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), 147 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
148 packet.packet->length(), NOT_RETRANSMISSION, 148 packet.packet->length(), NOT_RETRANSMISSION,
149 HAS_RETRANSMITTABLE_DATA); 149 HAS_RETRANSMITTABLE_DATA);
150 } 150 }
151 151
152 void SendFecPacket(QuicPacketSequenceNumber sequence_number) {
153 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _))
154 .Times(1).WillOnce(Return(true));
155 SerializedPacket packet(CreateFecPacket(sequence_number));
156 manager_.OnSerializedPacket(packet);
157 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
158 packet.packet->length(), NOT_RETRANSMISSION,
159 NO_RETRANSMITTABLE_DATA);
160 }
161
152 // Based on QuicConnection's WritePendingRetransmissions. 162 // Based on QuicConnection's WritePendingRetransmissions.
153 void RetransmitNextPacket( 163 void RetransmitNextPacket(
154 QuicPacketSequenceNumber retransmission_sequence_number) { 164 QuicPacketSequenceNumber retransmission_sequence_number) {
155 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 165 EXPECT_TRUE(manager_.HasPendingRetransmissions());
156 EXPECT_CALL(*send_algorithm_, 166 EXPECT_CALL(*send_algorithm_,
157 OnPacketSent(_, retransmission_sequence_number, _, _, _)) 167 OnPacketSent(_, retransmission_sequence_number, _, _, _))
158 .Times(1).WillOnce(Return(true)); 168 .Times(1).WillOnce(Return(true));
159 const QuicSentPacketManager::PendingRetransmission pending = 169 const QuicSentPacketManager::PendingRetransmission pending =
160 manager_.NextPendingRetransmission(); 170 manager_.NextPendingRetransmission();
161 manager_.OnRetransmittedPacket( 171 manager_.OnRetransmittedPacket(
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 253 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
244 clock_.AdvanceTime(rtt); 254 clock_.AdvanceTime(rtt);
245 255
246 // Ack 1 but not 2. 256 // Ack 1 but not 2.
247 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt)); 257 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt));
248 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); 258 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _));
249 ReceivedPacketInfo received_info; 259 ReceivedPacketInfo received_info;
250 received_info.largest_observed = 1; 260 received_info.largest_observed = 1;
251 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow())); 261 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow()));
252 262
253 // 2 remains unacked, but no packets have retransmittable data. 263 // No packets should be unacked.
254 QuicPacketSequenceNumber unacked[] = { 2 }; 264 VerifyUnackedPackets(NULL, 0);
255 VerifyUnackedPackets(unacked, arraysize(unacked));
256 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 265 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
257 VerifyRetransmittablePackets(NULL, 0); 266 VerifyRetransmittablePackets(NULL, 0);
258 267
259 // Verify that the retransmission alarm would not fire, 268 // Verify that the retransmission alarm would not fire,
260 // since there is no retransmittable data outstanding. 269 // since there is no retransmittable data outstanding.
261 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 270 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
262 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 271 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
263 } 272 }
264 273
274 TEST_F(QuicSentPacketManagerTest, RetransmitAndSendThenAckPrevious) {
275 SendDataPacket(1);
276 RetransmitAndSendPacket(1, 2);
277 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
278 clock_.AdvanceTime(rtt);
279
280 // Ack 1 but not 2.
281 EXPECT_CALL(*send_algorithm_, UpdateRtt(rtt));
282 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _));
283 ReceivedPacketInfo received_info;
284 received_info.largest_observed = 1;
285 EXPECT_TRUE(manager_.OnIncomingAck(received_info, clock_.ApproximateNow()));
286
287 // 2 remains unacked, but no packets have retransmittable data.
288 QuicPacketSequenceNumber unacked[] = { 2 };
289 VerifyUnackedPackets(unacked, arraysize(unacked));
290 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
291 VerifyRetransmittablePackets(NULL, 0);
292
293 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
294 }
295
265 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { 296 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) {
266 SendDataPacket(1); 297 SendDataPacket(1);
267 RetransmitPacket(1, 2); 298 RetransmitPacket(1, 2);
268 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _)) 299 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _))
269 .WillOnce(Return(true)); 300 .WillOnce(Return(true));
270 manager_.OnPacketSent(2, clock_.ApproximateNow(), 1000, 301 manager_.OnPacketSent(2, clock_.ApproximateNow(), 1000,
271 NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 302 NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
272 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 303 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
273 clock_.AdvanceTime(rtt); 304 clock_.AdvanceTime(rtt);
274 305
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); 410 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _));
380 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); 411 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _));
381 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); 412 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _));
382 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 413 manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
383 414
384 VerifyUnackedPackets(NULL, 0); 415 VerifyUnackedPackets(NULL, 0);
385 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 416 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
386 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 417 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
387 } 418 }
388 419
420 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) {
421 SendDataPacket(1);
422 SendDataPacket(2);
423 SendFecPacket(3);
424 SendDataPacket(4);
425
426 // Ack 2 and 3, and mark 1 as revived.
427 ReceivedPacketInfo received_info;
428 received_info.largest_observed = 3;
429 received_info.missing_packets.insert(1);
430 received_info.revived_packets.insert(1);
431 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
432 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2);
433 manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
434
435 EXPECT_FALSE(manager_.HasPendingRetransmissions());
436 QuicPacketSequenceNumber unacked[] = { 1, 4 };
437 VerifyUnackedPackets(unacked, arraysize(unacked));
438 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
439 QuicPacketSequenceNumber retransmittable[] = { 4 };
440 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
441
442 // Ack the 4th packet and expect the 1st to be considered lost.
443 received_info.largest_observed = 4;
444 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
445 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _));
446 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _));
447 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _));
448 manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
449
450 EXPECT_FALSE(manager_.HasPendingRetransmissions());
451 VerifyRetransmittablePackets(NULL, 0);
452 }
453
389 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { 454 TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
390 SendDataPacket(1); 455 SendDataPacket(1);
391 RetransmitAndSendPacket(1, 2); 456 RetransmitAndSendPacket(1, 2);
392 RetransmitAndSendPacket(2, 3); 457 RetransmitAndSendPacket(2, 3);
393 RetransmitAndSendPacket(3, 4); 458 RetransmitAndSendPacket(3, 4);
394 RetransmitAndSendPacket(4, 5); 459 RetransmitAndSendPacket(4, 5);
395 460
396 // Truncated ack with 4 NACKs, so the first packet is lost. 461 // Truncated ack with 4 NACKs, so the first packet is lost.
397 ReceivedPacketInfo received_info; 462 ReceivedPacketInfo received_info;
398 received_info.largest_observed = 4; 463 received_info.largest_observed = 4;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 // Truncated ack with 4 NACKs 503 // Truncated ack with 4 NACKs
439 { 504 {
440 ReceivedPacketInfo received_info; 505 ReceivedPacketInfo received_info;
441 received_info.largest_observed = 6; 506 received_info.largest_observed = 6;
442 received_info.missing_packets.insert(3); 507 received_info.missing_packets.insert(3);
443 received_info.missing_packets.insert(4); 508 received_info.missing_packets.insert(4);
444 received_info.missing_packets.insert(5); 509 received_info.missing_packets.insert(5);
445 received_info.missing_packets.insert(6); 510 received_info.missing_packets.insert(6);
446 received_info.is_truncated = true; 511 received_info.is_truncated = true;
447 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); 512 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _));
513 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _));
448 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); 514 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _));
449 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(4, _));
450 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 515 manager_.OnIncomingAck(received_info, QuicTime::Zero());
451 } 516 }
452 517
453 // High water mark will be raised. 518 // High water mark will be raised.
454 QuicPacketSequenceNumber unacked[] = { 5, 6, 7, 8, 9 }; 519 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 };
455 VerifyUnackedPackets(unacked, arraysize(unacked)); 520 VerifyUnackedPackets(unacked, arraysize(unacked));
456 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; 521 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 };
457 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 522 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
458 } 523 }
459 524
460 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { 525 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) {
461 EXPECT_EQ(0u, manager_.GetLeastUnackedSentPacket()); 526 EXPECT_EQ(0u, manager_.GetLeastUnackedSentPacket());
462 } 527 }
463 528
464 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { 529 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) {
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 delay = delay.Add(delay); 1267 delay = delay.Add(delay);
1203 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1268 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1204 manager_.OnRetransmissionTimeout(); 1269 manager_.OnRetransmissionTimeout();
1205 RetransmitNextPacket(i + 2); 1270 RetransmitNextPacket(i + 2);
1206 } 1271 }
1207 } 1272 }
1208 1273
1209 } // namespace 1274 } // namespace
1210 } // namespace test 1275 } // namespace test
1211 } // namespace net 1276 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698