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

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

Issue 612323013: QUIC - (no behavior change) s/NULL/nullptr/g in .../quic/... (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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.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/quic_flags.h" 8 #include "net/quic/quic_flags.h"
9 #include "net/quic/test_tools/quic_config_peer.h" 9 #include "net/quic/test_tools/quic_config_peer.h"
10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 &manager_, new_sequence_number)); 174 &manager_, new_sequence_number));
175 } 175 }
176 176
177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { 177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) {
178 return CreatePacket(sequence_number, true); 178 return CreatePacket(sequence_number, true);
179 } 179 }
180 180
181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, 181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number,
182 bool retransmittable) { 182 bool retransmittable) {
183 packets_.push_back(QuicPacket::NewDataPacket( 183 packets_.push_back(QuicPacket::NewDataPacket(
184 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, 184 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false,
185 PACKET_6BYTE_SEQUENCE_NUMBER)); 185 PACKET_6BYTE_SEQUENCE_NUMBER));
186 return SerializedPacket( 186 return SerializedPacket(
187 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 187 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, packets_.back(), 0u,
188 packets_.back(), 0u, 188 retransmittable ? new RetransmittableFrames() : nullptr);
189 retransmittable ? new RetransmittableFrames() : NULL);
190 } 189 }
191 190
192 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { 191 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) {
193 packets_.push_back(QuicPacket::NewFecPacket( 192 packets_.push_back(QuicPacket::NewFecPacket(
194 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, 193 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false,
195 PACKET_6BYTE_SEQUENCE_NUMBER)); 194 PACKET_6BYTE_SEQUENCE_NUMBER));
196 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 195 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER,
197 packets_.back(), 0u, NULL); 196 packets_.back(), 0u, nullptr);
198 } 197 }
199 198
200 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { 199 void SendDataPacket(QuicPacketSequenceNumber sequence_number) {
201 EXPECT_CALL(*send_algorithm_, 200 EXPECT_CALL(*send_algorithm_,
202 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) 201 OnPacketSent(_, BytesInFlight(), sequence_number, _, _))
203 .Times(1).WillOnce(Return(true)); 202 .Times(1).WillOnce(Return(true));
204 SerializedPacket packet(CreateDataPacket(sequence_number)); 203 SerializedPacket packet(CreateDataPacket(sequence_number));
205 manager_.OnPacketSent(&packet, 0, clock_.Now(), 204 manager_.OnPacketSent(&packet, 0, clock_.Now(),
206 packet.packet->length(), NOT_RETRANSMISSION, 205 packet.packet->length(), NOT_RETRANSMISSION,
207 HAS_RETRANSMITTABLE_DATA); 206 HAS_RETRANSMITTABLE_DATA);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 261
263 QuicSentPacketManager manager_; 262 QuicSentPacketManager manager_;
264 vector<QuicPacket*> packets_; 263 vector<QuicPacket*> packets_;
265 MockClock clock_; 264 MockClock clock_;
266 QuicConnectionStats stats_; 265 QuicConnectionStats stats_;
267 MockSendAlgorithm* send_algorithm_; 266 MockSendAlgorithm* send_algorithm_;
268 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; 267 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_;
269 }; 268 };
270 269
271 TEST_F(QuicSentPacketManagerTest, IsUnacked) { 270 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
272 VerifyUnackedPackets(NULL, 0); 271 VerifyUnackedPackets(nullptr, 0);
273 SendDataPacket(1); 272 SendDataPacket(1);
274 273
275 QuicPacketSequenceNumber unacked[] = { 1 }; 274 QuicPacketSequenceNumber unacked[] = { 1 };
276 VerifyUnackedPackets(unacked, arraysize(unacked)); 275 VerifyUnackedPackets(unacked, arraysize(unacked));
277 QuicPacketSequenceNumber retransmittable[] = { 1 }; 276 QuicPacketSequenceNumber retransmittable[] = { 1 };
278 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 277 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
279 } 278 }
280 279
281 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { 280 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) {
282 SendDataPacket(1); 281 SendDataPacket(1);
(...skipping 14 matching lines...) Expand all
297 QuicAckFrame ack_frame; 296 QuicAckFrame ack_frame;
298 ack_frame.largest_observed = 2; 297 ack_frame.largest_observed = 2;
299 ack_frame.missing_packets.insert(1); 298 ack_frame.missing_packets.insert(1);
300 ExpectAck(2); 299 ExpectAck(2);
301 manager_.OnIncomingAck(ack_frame, clock_.Now()); 300 manager_.OnIncomingAck(ack_frame, clock_.Now());
302 301
303 // Packet 1 is unacked, pending, but not retransmittable. 302 // Packet 1 is unacked, pending, but not retransmittable.
304 QuicPacketSequenceNumber unacked[] = { 1 }; 303 QuicPacketSequenceNumber unacked[] = { 1 };
305 VerifyUnackedPackets(unacked, arraysize(unacked)); 304 VerifyUnackedPackets(unacked, arraysize(unacked));
306 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 305 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
307 VerifyRetransmittablePackets(NULL, 0); 306 VerifyRetransmittablePackets(nullptr, 0);
308 } 307 }
309 308
310 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { 309 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) {
311 SendDataPacket(1); 310 SendDataPacket(1);
312 QuicSentPacketManagerPeer::MarkForRetransmission( 311 QuicSentPacketManagerPeer::MarkForRetransmission(
313 &manager_, 1, TLP_RETRANSMISSION); 312 &manager_, 1, TLP_RETRANSMISSION);
314 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 313 EXPECT_TRUE(manager_.HasPendingRetransmissions());
315 314
316 // Ack 1. 315 // Ack 1.
317 QuicAckFrame ack_frame; 316 QuicAckFrame ack_frame;
318 ack_frame.largest_observed = 1; 317 ack_frame.largest_observed = 1;
319 ExpectAck(1); 318 ExpectAck(1);
320 manager_.OnIncomingAck(ack_frame, clock_.Now()); 319 manager_.OnIncomingAck(ack_frame, clock_.Now());
321 320
322 // There should no longer be a pending retransmission. 321 // There should no longer be a pending retransmission.
323 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 322 EXPECT_FALSE(manager_.HasPendingRetransmissions());
324 323
325 // No unacked packets remain. 324 // No unacked packets remain.
326 VerifyUnackedPackets(NULL, 0); 325 VerifyUnackedPackets(nullptr, 0);
327 VerifyRetransmittablePackets(NULL, 0); 326 VerifyRetransmittablePackets(nullptr, 0);
328 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); 327 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted);
329 } 328 }
330 329
331 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { 330 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) {
332 SendDataPacket(1); 331 SendDataPacket(1);
333 RetransmitAndSendPacket(1, 2); 332 RetransmitAndSendPacket(1, 2);
334 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 333 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
335 clock_.AdvanceTime(rtt); 334 clock_.AdvanceTime(rtt);
336 335
337 // Ack 1 but not 2. 336 // Ack 1 but not 2.
338 ExpectAck(1); 337 ExpectAck(1);
339 QuicAckFrame ack_frame; 338 QuicAckFrame ack_frame;
340 ack_frame.largest_observed = 1; 339 ack_frame.largest_observed = 1;
341 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 340 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
342 341
343 // 2 remains unacked, but no packets have retransmittable data. 342 // 2 remains unacked, but no packets have retransmittable data.
344 QuicPacketSequenceNumber unacked[] = { 2 }; 343 QuicPacketSequenceNumber unacked[] = { 2 };
345 VerifyUnackedPackets(unacked, arraysize(unacked)); 344 VerifyUnackedPackets(unacked, arraysize(unacked));
346 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 345 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
347 VerifyRetransmittablePackets(NULL, 0); 346 VerifyRetransmittablePackets(nullptr, 0);
348 347
349 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 348 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
350 } 349 }
351 350
352 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { 351 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) {
353 SendDataPacket(1); 352 SendDataPacket(1);
354 RetransmitAndSendPacket(1, 2); 353 RetransmitAndSendPacket(1, 2);
355 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 354 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
356 clock_.AdvanceTime(rtt); 355 clock_.AdvanceTime(rtt);
357 356
(...skipping 16 matching lines...) Expand all
374 373
375 ack_frame.largest_observed = 4; 374 ack_frame.largest_observed = 4;
376 ExpectAck(4); 375 ExpectAck(4);
377 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 376 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
378 377
379 ack_frame.largest_observed = 5; 378 ack_frame.largest_observed = 5;
380 ExpectAckAndLoss(true, 5, 2); 379 ExpectAckAndLoss(true, 5, 2);
381 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 380 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
382 381
383 // No packets remain unacked. 382 // No packets remain unacked.
384 VerifyUnackedPackets(NULL, 0); 383 VerifyUnackedPackets(nullptr, 0);
385 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 384 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
386 VerifyRetransmittablePackets(NULL, 0); 385 VerifyRetransmittablePackets(nullptr, 0);
387 386
388 // Verify that the retransmission alarm would not fire, 387 // Verify that the retransmission alarm would not fire,
389 // since there is no retransmittable data outstanding. 388 // since there is no retransmittable data outstanding.
390 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 389 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
391 } 390 }
392 391
393 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { 392 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) {
394 SendDataPacket(1); 393 SendDataPacket(1);
395 RetransmitAndSendPacket(1, 2); 394 RetransmitAndSendPacket(1, 2);
396 395
(...skipping 11 matching lines...) Expand all
408 QuicAckFrame ack_frame; 407 QuicAckFrame ack_frame;
409 ack_frame.largest_observed = 1; 408 ack_frame.largest_observed = 1;
410 ExpectUpdatedRtt(1); 409 ExpectUpdatedRtt(1);
411 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); 410 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
412 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 411 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
413 412
414 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT. 413 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT.
415 QuicPacketSequenceNumber unacked[] = { 2 }; 414 QuicPacketSequenceNumber unacked[] = { 2 };
416 VerifyUnackedPackets(unacked, arraysize(unacked)); 415 VerifyUnackedPackets(unacked, arraysize(unacked));
417 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 416 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
418 VerifyRetransmittablePackets(NULL, 0); 417 VerifyRetransmittablePackets(nullptr, 0);
419 418
420 // Verify that the retransmission alarm would not fire, 419 // Verify that the retransmission alarm would not fire,
421 // since there is no retransmittable data outstanding. 420 // since there is no retransmittable data outstanding.
422 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 421 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
423 } 422 }
424 423
425 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { 424 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
426 StrictMock<MockDebugDelegate> debug_delegate; 425 StrictMock<MockDebugDelegate> debug_delegate;
427 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition( 426 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition(
428 TLP_RETRANSMISSION, kDefaultLength)).Times(2); 427 TLP_RETRANSMISSION, kDefaultLength)).Times(2);
429 manager_.set_debug_delegate(&debug_delegate); 428 manager_.set_debug_delegate(&debug_delegate);
430 429
431 SendDataPacket(1); 430 SendDataPacket(1);
432 RetransmitAndSendPacket(1, 2); 431 RetransmitAndSendPacket(1, 2);
433 RetransmitAndSendPacket(2, 3); 432 RetransmitAndSendPacket(2, 3);
434 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 433 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
435 clock_.AdvanceTime(rtt); 434 clock_.AdvanceTime(rtt);
436 435
437 // Ack 1 but not 2 or 3. 436 // Ack 1 but not 2 or 3.
438 ExpectAck(1); 437 ExpectAck(1);
439 QuicAckFrame ack_frame; 438 QuicAckFrame ack_frame;
440 ack_frame.largest_observed = 1; 439 ack_frame.largest_observed = 1;
441 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 440 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
442 441
443 // 2 and 3 remain unacked, but no packets have retransmittable data. 442 // 2 and 3 remain unacked, but no packets have retransmittable data.
444 QuicPacketSequenceNumber unacked[] = { 2, 3 }; 443 QuicPacketSequenceNumber unacked[] = { 2, 3 };
445 VerifyUnackedPackets(unacked, arraysize(unacked)); 444 VerifyUnackedPackets(unacked, arraysize(unacked));
446 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 445 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
447 VerifyRetransmittablePackets(NULL, 0); 446 VerifyRetransmittablePackets(nullptr, 0);
448 447
449 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked. 448 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked.
450 SendDataPacket(4); 449 SendDataPacket(4);
451 ack_frame.largest_observed = 4; 450 ack_frame.largest_observed = 4;
452 ack_frame.missing_packets.insert(2); 451 ack_frame.missing_packets.insert(2);
453 QuicPacketSequenceNumber acked[] = { 3, 4 }; 452 QuicPacketSequenceNumber acked[] = { 3, 4 };
454 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); 453 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
455 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 454 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
456 455
457 QuicPacketSequenceNumber unacked2[] = { 2 }; 456 QuicPacketSequenceNumber unacked2[] = { 2 };
458 VerifyUnackedPackets(unacked2, arraysize(unacked2)); 457 VerifyUnackedPackets(unacked2, arraysize(unacked2));
459 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 458 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
460 459
461 SendDataPacket(5); 460 SendDataPacket(5);
462 ack_frame.largest_observed = 5; 461 ack_frame.largest_observed = 5;
463 ExpectAckAndLoss(true, 5, 2); 462 ExpectAckAndLoss(true, 5, 2);
464 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 463 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
465 464
466 VerifyUnackedPackets(NULL, 0); 465 VerifyUnackedPackets(nullptr, 0);
467 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 466 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
468 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); 467 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted);
469 } 468 }
470 469
471 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) { 470 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) {
472 SendDataPacket(1); 471 SendDataPacket(1);
473 SendDataPacket(2); 472 SendDataPacket(2);
474 SendFecPacket(3); 473 SendFecPacket(3);
475 SendDataPacket(4); 474 SendDataPacket(4);
476 475
477 // Ack 2 and 3, and mark 1 as revived. 476 // Ack 2 and 3, and mark 1 as revived.
478 QuicAckFrame ack_frame; 477 QuicAckFrame ack_frame;
479 ack_frame.largest_observed = 3; 478 ack_frame.largest_observed = 3;
480 ack_frame.missing_packets.insert(1); 479 ack_frame.missing_packets.insert(1);
481 ack_frame.revived_packets.insert(1); 480 ack_frame.revived_packets.insert(1);
482 QuicPacketSequenceNumber acked[] = { 2, 3 }; 481 QuicPacketSequenceNumber acked[] = { 2, 3 };
483 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); 482 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
484 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 483 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
485 484
486 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 485 EXPECT_FALSE(manager_.HasPendingRetransmissions());
487 QuicPacketSequenceNumber unacked[] = { 1, 4 }; 486 QuicPacketSequenceNumber unacked[] = { 1, 4 };
488 VerifyUnackedPackets(unacked, arraysize(unacked)); 487 VerifyUnackedPackets(unacked, arraysize(unacked));
489 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 488 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
490 QuicPacketSequenceNumber retransmittable[] = { 4 }; 489 QuicPacketSequenceNumber retransmittable[] = { 4 };
491 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 490 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
492 491
493 // Ack the 4th packet and expect the 1st to be considered lost. 492 // Ack the 4th packet and expect the 1st to be considered lost.
494 ack_frame.largest_observed = 4; 493 ack_frame.largest_observed = 4;
495 ExpectAckAndLoss(true, 4, 1); 494 ExpectAckAndLoss(true, 4, 1);
496 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 495 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
497 496
498 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 497 EXPECT_FALSE(manager_.HasPendingRetransmissions());
499 VerifyRetransmittablePackets(NULL, 0); 498 VerifyRetransmittablePackets(nullptr, 0);
500 } 499 }
501 500
502 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) { 501 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) {
503 SendDataPacket(1); 502 SendDataPacket(1);
504 SendDataPacket(2); 503 SendDataPacket(2);
505 SendDataPacket(3); 504 SendDataPacket(3);
506 SendDataPacket(4); 505 SendDataPacket(4);
507 SendFecPacket(5); 506 SendFecPacket(5);
508 507
509 // Ack 2, 3, and 4, and expect the 1st to be considered lost. 508 // Ack 2, 3, and 4, and expect the 1st to be considered lost.
(...skipping 12 matching lines...) Expand all
522 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 521 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
523 522
524 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be 523 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be
525 // removed from pending retransmissions map. 524 // removed from pending retransmissions map.
526 ack_frame.largest_observed = 5; 525 ack_frame.largest_observed = 5;
527 ack_frame.revived_packets.insert(1); 526 ack_frame.revived_packets.insert(1);
528 ExpectAck(5); 527 ExpectAck(5);
529 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 528 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
530 529
531 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 530 EXPECT_FALSE(manager_.HasPendingRetransmissions());
532 VerifyRetransmittablePackets(NULL, 0); 531 VerifyRetransmittablePackets(nullptr, 0);
533 } 532 }
534 533
535 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { 534 TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
536 SendDataPacket(1); 535 SendDataPacket(1);
537 RetransmitAndSendPacket(1, 2); 536 RetransmitAndSendPacket(1, 2);
538 RetransmitAndSendPacket(2, 3); 537 RetransmitAndSendPacket(2, 3);
539 RetransmitAndSendPacket(3, 4); 538 RetransmitAndSendPacket(3, 4);
540 RetransmitAndSendPacket(4, 5); 539 RetransmitAndSendPacket(4, 5);
541 540
542 // Truncated ack with 4 NACKs, so the first packet is lost. 541 // Truncated ack with 4 NACKs, so the first packet is lost.
543 QuicAckFrame ack_frame; 542 QuicAckFrame ack_frame;
544 ack_frame.largest_observed = 4; 543 ack_frame.largest_observed = 4;
545 ack_frame.missing_packets.insert(1); 544 ack_frame.missing_packets.insert(1);
546 ack_frame.missing_packets.insert(2); 545 ack_frame.missing_packets.insert(2);
547 ack_frame.missing_packets.insert(3); 546 ack_frame.missing_packets.insert(3);
548 ack_frame.missing_packets.insert(4); 547 ack_frame.missing_packets.insert(4);
549 ack_frame.is_truncated = true; 548 ack_frame.is_truncated = true;
550 549
551 QuicPacketSequenceNumber lost[] = { 1 }; 550 QuicPacketSequenceNumber lost[] = { 1 };
552 ExpectAcksAndLosses(true, NULL, 0, lost, arraysize(lost)); 551 ExpectAcksAndLosses(true, nullptr, 0, lost, arraysize(lost));
553 manager_.OnIncomingAck(ack_frame, clock_.Now()); 552 manager_.OnIncomingAck(ack_frame, clock_.Now());
554 553
555 // High water mark will be raised. 554 // High water mark will be raised.
556 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 }; 555 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 };
557 VerifyUnackedPackets(unacked, arraysize(unacked)); 556 VerifyUnackedPackets(unacked, arraysize(unacked));
558 QuicPacketSequenceNumber retransmittable[] = { 5 }; 557 QuicPacketSequenceNumber retransmittable[] = { 5 };
559 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 558 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
560 } 559 }
561 560
562 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { 561 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 SendDataPacket(1); 607 SendDataPacket(1);
609 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 608 EXPECT_EQ(1u, manager_.GetLeastUnacked());
610 } 609 }
611 610
612 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { 611 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) {
613 SendFecPacket(1); 612 SendFecPacket(1);
614 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 613 EXPECT_EQ(1u, manager_.GetLeastUnacked());
615 } 614 }
616 615
617 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { 616 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) {
618 VerifyUnackedPackets(NULL, 0); 617 VerifyUnackedPackets(nullptr, 0);
619 618
620 SendFecPacket(1); 619 SendFecPacket(1);
621 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 620 EXPECT_EQ(1u, manager_.GetLeastUnacked());
622 621
623 SendFecPacket(2); 622 SendFecPacket(2);
624 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 623 EXPECT_EQ(1u, manager_.GetLeastUnacked());
625 624
626 SendFecPacket(3); 625 SendFecPacket(3);
627 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 626 EXPECT_EQ(1u, manager_.GetLeastUnacked());
628 627
629 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; 628 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 };
630 VerifyUnackedPackets(unacked, arraysize(unacked)); 629 VerifyUnackedPackets(unacked, arraysize(unacked));
631 VerifyRetransmittablePackets(NULL, 0); 630 VerifyRetransmittablePackets(nullptr, 0);
632 631
633 // Ack 2, so there's an rtt update. 632 // Ack 2, so there's an rtt update.
634 ExpectAck(2); 633 ExpectAck(2);
635 QuicAckFrame ack_frame; 634 QuicAckFrame ack_frame;
636 ack_frame.largest_observed = 2; 635 ack_frame.largest_observed = 2;
637 ack_frame.missing_packets.insert(1); 636 ack_frame.missing_packets.insert(1);
638 manager_.OnIncomingAck(ack_frame, clock_.Now()); 637 manager_.OnIncomingAck(ack_frame, clock_.Now());
639 638
640 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 639 EXPECT_EQ(1u, manager_.GetLeastUnacked());
641 } 640 }
642 641
643 TEST_F(QuicSentPacketManagerTest, GetSentTime) { 642 TEST_F(QuicSentPacketManagerTest, GetSentTime) {
644 VerifyUnackedPackets(NULL, 0); 643 VerifyUnackedPackets(nullptr, 0);
645 644
646 QuicTime sent_time = clock_.Now(); 645 QuicTime sent_time = clock_.Now();
647 SendFecPacket(1); 646 SendFecPacket(1);
648 QuicTime sent_time2 = clock_.Now(); 647 QuicTime sent_time2 = clock_.Now();
649 SendFecPacket(2); 648 SendFecPacket(2);
650 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 649 QuicPacketSequenceNumber unacked[] = { 1, 2 };
651 VerifyUnackedPackets(unacked, arraysize(unacked)); 650 VerifyUnackedPackets(unacked, arraysize(unacked));
652 VerifyRetransmittablePackets(NULL, 0); 651 VerifyRetransmittablePackets(nullptr, 0);
653 652
654 EXPECT_TRUE(manager_.HasUnackedPackets()); 653 EXPECT_TRUE(manager_.HasUnackedPackets());
655 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); 654 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1));
656 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); 655 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
657 } 656 }
658 657
659 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { 658 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) {
660 SendDataPacket(1); 659 SendDataPacket(1);
661 SendAckPacket(2); 660 SendAckPacket(2);
662 661
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 ack_frame.largest_observed = 3; 782 ack_frame.largest_observed = 3;
784 ack_frame.missing_packets.insert(1); 783 ack_frame.missing_packets.insert(1);
785 ack_frame.missing_packets.insert(2); 784 ack_frame.missing_packets.insert(2);
786 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 785 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
787 786
788 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 787 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
789 788
790 // Acking two more packets will lose both of them due to nacks. 789 // Acking two more packets will lose both of them due to nacks.
791 ack_frame.largest_observed = 5; 790 ack_frame.largest_observed = 5;
792 QuicPacketSequenceNumber lost[] = { 1, 2 }; 791 QuicPacketSequenceNumber lost[] = { 1, 2 };
793 ExpectAcksAndLosses(false, NULL, 0, lost, arraysize(lost)); 792 ExpectAcksAndLosses(false, nullptr, 0, lost, arraysize(lost));
794 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 793 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
795 794
796 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 795 EXPECT_FALSE(manager_.HasPendingRetransmissions());
797 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 796 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
798 EXPECT_EQ(2u, stats_.tlp_count); 797 EXPECT_EQ(2u, stats_.tlp_count);
799 EXPECT_EQ(0u, stats_.rto_count); 798 EXPECT_EQ(0u, stats_.rto_count);
800 } 799 }
801 800
802 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { 801 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) {
803 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 802 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 EXPECT_EQ(QuicTime::Delta::Zero(), 874 EXPECT_EQ(QuicTime::Delta::Zero(),
876 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); 875 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
877 RetransmitNextPacket(8); 876 RetransmitNextPacket(8);
878 RetransmitNextPacket(9); 877 RetransmitNextPacket(9);
879 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 878 EXPECT_FALSE(manager_.HasPendingRetransmissions());
880 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 879 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
881 880
882 // Now ack the two crypto packets and the speculatively encrypted request, 881 // Now ack the two crypto packets and the speculatively encrypted request,
883 // and ensure the first four crypto packets get abandoned, but not lost. 882 // and ensure the first four crypto packets get abandoned, but not lost.
884 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 }; 883 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 };
885 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); 884 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
886 QuicAckFrame ack_frame; 885 QuicAckFrame ack_frame;
887 ack_frame.largest_observed = 9; 886 ack_frame.largest_observed = 9;
888 ack_frame.missing_packets.insert(1); 887 ack_frame.missing_packets.insert(1);
889 ack_frame.missing_packets.insert(2); 888 ack_frame.missing_packets.insert(2);
890 ack_frame.missing_packets.insert(6); 889 ack_frame.missing_packets.insert(6);
891 ack_frame.missing_packets.insert(7); 890 ack_frame.missing_packets.insert(7);
892 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 891 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
893 892
894 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 893 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
895 } 894 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 1008
1010 // Retransmit the crypto packet as 3. 1009 // Retransmit the crypto packet as 3.
1011 manager_.OnRetransmissionTimeout(); 1010 manager_.OnRetransmissionTimeout();
1012 RetransmitNextPacket(3); 1011 RetransmitNextPacket(3);
1013 1012
1014 // Now neuter all unacked unencrypted packets, which occurs when the 1013 // Now neuter all unacked unencrypted packets, which occurs when the
1015 // connection goes forward secure. 1014 // connection goes forward secure.
1016 manager_.NeuterUnencryptedPackets(); 1015 manager_.NeuterUnencryptedPackets();
1017 QuicPacketSequenceNumber unacked[] = { 1, 2, 3}; 1016 QuicPacketSequenceNumber unacked[] = { 1, 2, 3};
1018 VerifyUnackedPackets(unacked, arraysize(unacked)); 1017 VerifyUnackedPackets(unacked, arraysize(unacked));
1019 VerifyRetransmittablePackets(NULL, 0); 1018 VerifyRetransmittablePackets(nullptr, 0);
1020 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1019 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1021 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1020 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1022 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1021 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1023 1022
1024 // Ensure both packets get discarded when packet 2 is acked. 1023 // Ensure both packets get discarded when packet 2 is acked.
1025 QuicAckFrame ack_frame; 1024 QuicAckFrame ack_frame;
1026 ack_frame.largest_observed = 3; 1025 ack_frame.largest_observed = 3;
1027 ack_frame.missing_packets.insert(1); 1026 ack_frame.missing_packets.insert(1);
1028 ack_frame.missing_packets.insert(2); 1027 ack_frame.missing_packets.insert(2);
1029 ExpectUpdatedRtt(3); 1028 ExpectUpdatedRtt(3);
1030 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 1029 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
1031 VerifyUnackedPackets(NULL, 0); 1030 VerifyUnackedPackets(nullptr, 0);
1032 VerifyRetransmittablePackets(NULL, 0); 1031 VerifyRetransmittablePackets(nullptr, 0);
1033 } 1032 }
1034 1033
1035 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { 1034 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) {
1036 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); 1035 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50);
1037 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( 1036 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt(
1038 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 1037 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
1039 EXPECT_EQ(min_rtt, 1038 EXPECT_EQ(min_rtt,
1040 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); 1039 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt());
1041 EXPECT_EQ(min_rtt, 1040 EXPECT_EQ(min_rtt,
1042 QuicSentPacketManagerPeer::GetRttStats( 1041 QuicSentPacketManagerPeer::GetRttStats(
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 .WillOnce(Return(100 * kDefaultTCPMSS)); 1381 .WillOnce(Return(100 * kDefaultTCPMSS));
1383 manager_.SetFromConfig(config); 1382 manager_.SetFromConfig(config);
1384 1383
1385 EXPECT_EQ(initial_rtt_us, 1384 EXPECT_EQ(initial_rtt_us,
1386 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); 1385 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds());
1387 } 1386 }
1388 1387
1389 } // namespace 1388 } // namespace
1390 } // namespace test 1389 } // namespace test
1391 } // namespace net 1390 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_server_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698