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

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

Issue 2961133002: Removing NackPackets from gfe/quic/core/quic_sent_packet_manager_test.cc (Closed)
Patch Set: Rebase Created 3 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 | « no previous file | no next file » | 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/core/quic_sent_packet_manager.h" 5 #include "net/quic/core/quic_sent_packet_manager.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "net/quic/core/quic_pending_retransmission.h" 9 #include "net/quic/core/quic_pending_retransmission.h"
10 #include "net/quic/platform/api/quic_flags.h" 10 #include "net/quic/platform/api/quic_flags.h"
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 255
256 // Initialize a frame acknowledging all packets up to largest_observed. 256 // Initialize a frame acknowledging all packets up to largest_observed.
257 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) { 257 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) {
258 QuicAckFrame frame(MakeAckFrame(largest_observed)); 258 QuicAckFrame frame(MakeAckFrame(largest_observed));
259 if (largest_observed > 0) { 259 if (largest_observed > 0) {
260 frame.packets.Add(1, largest_observed + 1); 260 frame.packets.Add(1, largest_observed + 1);
261 } 261 }
262 return frame; 262 return frame;
263 } 263 }
264 264
265 // Explicitly nack packet [lower, higher). 265 // Creates an ackframe that contains up to two ranges of packets
266 void NackPackets(QuicPacketNumber lower, 266 QuicAckFrame ConstructAckFrame(QuicPacketNumber range1_start,
267 QuicPacketNumber higher, 267 QuicPacketNumber range1_end,
268 QuicAckFrame* frame) { 268 QuicPacketNumber range2_start,
269 frame->packets.RemoveTestOnly(lower, higher); 269 QuicPacketNumber range2_end) {
270 QuicAckFrame ack_frame;
271 if (range1_start < range1_end) {
272 ack_frame.packets.Add(range1_start, range1_end);
273 }
274 if (range2_start <= range2_end) {
275 ack_frame.packets.Add(range2_start, range2_end + 1);
276 }
277 ack_frame.largest_observed = range2_end;
278 return ack_frame;
270 } 279 }
271 280
272 QuicSentPacketManager manager_; 281 QuicSentPacketManager manager_;
273 MockClock clock_; 282 MockClock clock_;
274 QuicConnectionStats stats_; 283 QuicConnectionStats stats_;
275 MockSendAlgorithm* send_algorithm_; 284 MockSendAlgorithm* send_algorithm_;
276 std::unique_ptr<MockNetworkChangeVisitor> network_change_visitor_; 285 std::unique_ptr<MockNetworkChangeVisitor> network_change_visitor_;
277 }; 286 };
278 287
279 TEST_F(QuicSentPacketManagerTest, IsUnacked) { 288 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
(...skipping 15 matching lines...) Expand all
295 VerifyUnackedPackets(unacked, arraysize(unacked)); 304 VerifyUnackedPackets(unacked, arraysize(unacked));
296 QuicPacketNumber retransmittable[] = {2}; 305 QuicPacketNumber retransmittable[] = {2};
297 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 306 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
298 } 307 }
299 308
300 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { 309 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
301 SendDataPacket(1); 310 SendDataPacket(1);
302 RetransmitAndSendPacket(1, 2); 311 RetransmitAndSendPacket(1, 2);
303 312
304 // Ack 2 but not 1. 313 // Ack 2 but not 1.
305 QuicAckFrame ack_frame = InitAckFrame(2); 314 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 2, 2);
306 NackPackets(1, 2, &ack_frame); 315
307 ExpectAck(2); 316 ExpectAck(2);
308 manager_.OnIncomingAck(ack_frame, clock_.Now()); 317 manager_.OnIncomingAck(ack_frame, clock_.Now());
309 318
310 // Packet 1 is unacked, pending, but not retransmittable. 319 // Packet 1 is unacked, pending, but not retransmittable.
311 QuicPacketNumber unacked[] = {1}; 320 QuicPacketNumber unacked[] = {1};
312 VerifyUnackedPackets(unacked, arraysize(unacked)); 321 VerifyUnackedPackets(unacked, arraysize(unacked));
313 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 322 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
314 VerifyRetransmittablePackets(nullptr, 0); 323 VerifyRetransmittablePackets(nullptr, 0);
315 } 324 }
316 325
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 ExpectAck(1); 390 ExpectAck(1);
382 QuicAckFrame ack_frame = InitAckFrame(1); 391 QuicAckFrame ack_frame = InitAckFrame(1);
383 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 392 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
384 393
385 SendDataPacket(3); 394 SendDataPacket(3);
386 SendDataPacket(4); 395 SendDataPacket(4);
387 SendDataPacket(5); 396 SendDataPacket(5);
388 clock_.AdvanceTime(rtt); 397 clock_.AdvanceTime(rtt);
389 398
390 // Next, NACK packet 2 three times. 399 // Next, NACK packet 2 three times.
391 ack_frame = InitAckFrame(3); 400 ack_frame = ConstructAckFrame(1, 2, 3, 3);
392 NackPackets(2, 3, &ack_frame); 401
393 ExpectAck(3); 402 ExpectAck(3);
394 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 403 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
395 404
396 ack_frame = InitAckFrame(4); 405 ack_frame = ConstructAckFrame(1, 2, 3, 4);
397 NackPackets(2, 3, &ack_frame);
398 ExpectAck(4); 406 ExpectAck(4);
399 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 407 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
400 408
401 ack_frame = InitAckFrame(5); 409 ack_frame = ConstructAckFrame(1, 2, 3, 5);
402 NackPackets(2, 3, &ack_frame);
403 ExpectAckAndLoss(true, 5, 2); 410 ExpectAckAndLoss(true, 5, 2);
404 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 411 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
405 412
406 // No packets remain unacked. 413 // No packets remain unacked.
407 VerifyUnackedPackets(nullptr, 0); 414 VerifyUnackedPackets(nullptr, 0);
408 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 415 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
409 VerifyRetransmittablePackets(nullptr, 0); 416 VerifyRetransmittablePackets(nullptr, 0);
410 417
411 // Verify that the retransmission alarm would not fire, 418 // Verify that the retransmission alarm would not fire,
412 // since there is no retransmittable data outstanding. 419 // since there is no retransmittable data outstanding.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 469 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
463 470
464 // 2 and 3 remain unacked, but no packets have retransmittable data. 471 // 2 and 3 remain unacked, but no packets have retransmittable data.
465 QuicPacketNumber unacked[] = {2, 3}; 472 QuicPacketNumber unacked[] = {2, 3};
466 VerifyUnackedPackets(unacked, arraysize(unacked)); 473 VerifyUnackedPackets(unacked, arraysize(unacked));
467 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 474 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
468 VerifyRetransmittablePackets(nullptr, 0); 475 VerifyRetransmittablePackets(nullptr, 0);
469 476
470 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked. 477 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked.
471 SendDataPacket(4); 478 SendDataPacket(4);
472 ack_frame = InitAckFrame(4); 479 ack_frame = ConstructAckFrame(1, 2, 3, 4);
473 NackPackets(2, 3, &ack_frame);
474 QuicPacketNumber acked[] = {3, 4}; 480 QuicPacketNumber acked[] = {3, 4};
475 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); 481 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
476 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 482 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
477 483
478 QuicPacketNumber unacked2[] = {2}; 484 QuicPacketNumber unacked2[] = {2};
479 VerifyUnackedPackets(unacked2, arraysize(unacked2)); 485 VerifyUnackedPackets(unacked2, arraysize(unacked2));
480 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 486 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
481 487
482 SendDataPacket(5); 488 SendDataPacket(5);
483 ack_frame = InitAckFrame(5); 489 ack_frame = ConstructAckFrame(1, 2, 3, 5);
484 NackPackets(2, 3, &ack_frame);
485 ExpectAckAndLoss(true, 5, 2); 490 ExpectAckAndLoss(true, 5, 2);
486 EXPECT_CALL(debug_delegate, OnPacketLoss(2, LOSS_RETRANSMISSION, _)); 491 EXPECT_CALL(debug_delegate, OnPacketLoss(2, LOSS_RETRANSMISSION, _));
487 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 492 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
488 493
489 VerifyUnackedPackets(nullptr, 0); 494 VerifyUnackedPackets(nullptr, 0);
490 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 495 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
491 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); 496 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted);
492 } 497 }
493 498
494 TEST_F(QuicSentPacketManagerTest, AckOriginalTransmission) { 499 TEST_F(QuicSentPacketManagerTest, AckOriginalTransmission) {
495 auto loss_algorithm = QuicMakeUnique<MockLossAlgorithm>(); 500 auto loss_algorithm = QuicMakeUnique<MockLossAlgorithm>();
496 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get()); 501 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get());
497 502
498 SendDataPacket(1); 503 SendDataPacket(1);
499 RetransmitAndSendPacket(1, 2); 504 RetransmitAndSendPacket(1, 2);
500 505
501 // Ack original transmission, but that wasn't lost via fast retransmit, 506 // Ack original transmission, but that wasn't lost via fast retransmit,
502 // so no call on OnSpuriousRetransmission is expected. 507 // so no call on OnSpuriousRetransmission is expected.
503 { 508 {
504 QuicAckFrame ack_frame = InitAckFrame(1); 509 QuicAckFrame ack_frame = InitAckFrame(1);
505 ExpectAck(1); 510 ExpectAck(1);
506 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 511 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
507 manager_.OnIncomingAck(ack_frame, clock_.Now()); 512 manager_.OnIncomingAck(ack_frame, clock_.Now());
508 } 513 }
509 514
510 SendDataPacket(3); 515 SendDataPacket(3);
511 SendDataPacket(4); 516 SendDataPacket(4);
512 // Ack 4, which causes 3 to be retransmitted. 517 // Ack 4, which causes 3 to be retransmitted.
513 { 518 {
514 QuicAckFrame ack_frame = InitAckFrame(4); 519 QuicAckFrame ack_frame = ConstructAckFrame(1, 2, 4, 4);
515 NackPackets(2, 4, &ack_frame);
516 ExpectAck(4); 520 ExpectAck(4);
517 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 521 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
518 manager_.OnIncomingAck(ack_frame, clock_.Now()); 522 manager_.OnIncomingAck(ack_frame, clock_.Now());
519 RetransmitAndSendPacket(3, 5, LOSS_RETRANSMISSION); 523 RetransmitAndSendPacket(3, 5, LOSS_RETRANSMISSION);
520 } 524 }
521 525
522 // Ack 3, which causes SpuriousRetransmitDetected to be called. 526 // Ack 3, which causes SpuriousRetransmitDetected to be called.
523 { 527 { QuicAckFrame ack_frame = ConstructAckFrame(1, 2, 3, 4); }
524 QuicAckFrame ack_frame = InitAckFrame(4);
525 NackPackets(2, 3, &ack_frame);
526 }
527 } 528 }
528 529
529 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) { 530 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) {
530 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 531 EXPECT_EQ(1u, manager_.GetLeastUnacked());
531 } 532 }
532 533
533 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { 534 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) {
534 SendDataPacket(1); 535 SendDataPacket(1);
535 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 536 EXPECT_EQ(1u, manager_.GetLeastUnacked());
536 } 537 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 642 EXPECT_TRUE(manager_.HasPendingRetransmissions());
642 RetransmitNextPacket(3); 643 RetransmitNextPacket(3);
643 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 644 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
644 .WillOnce(Return(QuicTime::Delta::Infinite())); 645 .WillOnce(Return(QuicTime::Delta::Infinite()));
645 EXPECT_EQ(QuicTime::Delta::Infinite(), manager_.TimeUntilSend(clock_.Now())); 646 EXPECT_EQ(QuicTime::Delta::Infinite(), manager_.TimeUntilSend(clock_.Now()));
646 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 647 EXPECT_FALSE(manager_.HasPendingRetransmissions());
647 648
648 // Ack the third and ensure the first two are still pending. 649 // Ack the third and ensure the first two are still pending.
649 ExpectAck(3); 650 ExpectAck(3);
650 651
651 QuicAckFrame ack_frame = InitAckFrame(3); 652 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 3, 3);
652 NackPackets(1, 3, &ack_frame);
653 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 653 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
654 654
655 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 655 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
656 656
657 // Acking two more packets will lose both of them due to nacks. 657 // Acking two more packets will lose both of them due to nacks.
658 SendDataPacket(4); 658 SendDataPacket(4);
659 SendDataPacket(5); 659 SendDataPacket(5);
660 ack_frame = InitAckFrame(5); 660 ack_frame = ConstructAckFrame(1, 1, 3, 5);
661 NackPackets(1, 3, &ack_frame);
662 QuicPacketNumber acked[] = {4, 5}; 661 QuicPacketNumber acked[] = {4, 5};
663 QuicPacketNumber lost[] = {1, 2}; 662 QuicPacketNumber lost[] = {1, 2};
664 ExpectAcksAndLosses(true, acked, arraysize(acked), lost, arraysize(lost)); 663 ExpectAcksAndLosses(true, acked, arraysize(acked), lost, arraysize(lost));
665 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 664 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
666 665
667 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 666 EXPECT_FALSE(manager_.HasPendingRetransmissions());
668 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 667 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
669 EXPECT_EQ(2u, stats_.tlp_count); 668 EXPECT_EQ(2u, stats_.tlp_count);
670 EXPECT_EQ(0u, stats_.rto_count); 669 EXPECT_EQ(0u, stats_.rto_count);
671 } 670 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 manager_.OnRetransmissionTimeout(); 716 manager_.OnRetransmissionTimeout();
718 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 717 EXPECT_TRUE(manager_.HasPendingRetransmissions());
719 EXPECT_EQ(2u, stats_.tlp_count); 718 EXPECT_EQ(2u, stats_.tlp_count);
720 EXPECT_EQ(1u, stats_.rto_count); 719 EXPECT_EQ(1u, stats_.rto_count);
721 720
722 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called. 721 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called.
723 EXPECT_EQ(102 * kDefaultLength, 722 EXPECT_EQ(102 * kDefaultLength,
724 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 723 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
725 724
726 RetransmitNextPacket(103); 725 RetransmitNextPacket(103);
727 QuicAckFrame ack_frame = InitAckFrame(103); 726 QuicAckFrame ack_frame = ConstructAckFrame(1, 0, 103, 103);
728 NackPackets(0, 103, &ack_frame);
729 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 727 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
730 EXPECT_CALL(*send_algorithm_, 728 EXPECT_CALL(*send_algorithm_,
731 OnCongestionEvent(true, _, _, ElementsAre(Pair(103, _)), _)); 729 OnCongestionEvent(true, _, _, ElementsAre(Pair(103, _)), _));
732 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 730 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
733 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 731 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
734 // All packets before 103 should be lost. 732 // All packets before 103 should be lost.
735 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 733 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
736 } 734 }
737 735
738 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { 736 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) {
(...skipping 21 matching lines...) Expand all
760 EXPECT_EQ(QuicTime::Delta::Zero(), manager_.TimeUntilSend(clock_.Now())); 758 EXPECT_EQ(QuicTime::Delta::Zero(), manager_.TimeUntilSend(clock_.Now()));
761 RetransmitNextPacket(8); 759 RetransmitNextPacket(8);
762 RetransmitNextPacket(9); 760 RetransmitNextPacket(9);
763 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 761 EXPECT_FALSE(manager_.HasPendingRetransmissions());
764 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 762 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
765 763
766 // Now ack the two crypto packets and the speculatively encrypted request, 764 // Now ack the two crypto packets and the speculatively encrypted request,
767 // and ensure the first four crypto packets get abandoned, but not lost. 765 // and ensure the first four crypto packets get abandoned, but not lost.
768 QuicPacketNumber acked[] = {3, 4, 5, 8, 9}; 766 QuicPacketNumber acked[] = {3, 4, 5, 8, 9};
769 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); 767 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
770 QuicAckFrame ack_frame = InitAckFrame(9); 768 QuicAckFrame ack_frame;
771 NackPackets(1, 3, &ack_frame); 769 ack_frame.packets.Add(3, 6);
772 NackPackets(6, 8, &ack_frame); 770 ack_frame.packets.Add(8, 10);
771 ack_frame.largest_observed = 9;
773 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 772 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
774 773
775 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 774 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
776 } 775 }
777 776
778 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutVersionNegotiation) { 777 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutVersionNegotiation) {
779 // Send 2 crypto packets and 3 data packets. 778 // Send 2 crypto packets and 3 data packets.
780 const size_t kNumSentCryptoPackets = 2; 779 const size_t kNumSentCryptoPackets = 2;
781 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 780 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
782 SendCryptoPacket(i); 781 SendCryptoPacket(i);
(...skipping 27 matching lines...) Expand all
810 RetransmitNextPacket(10); 809 RetransmitNextPacket(10);
811 RetransmitNextPacket(11); 810 RetransmitNextPacket(11);
812 RetransmitNextPacket(12); 811 RetransmitNextPacket(12);
813 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 812 EXPECT_FALSE(manager_.HasPendingRetransmissions());
814 813
815 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 814 EXPECT_EQ(1u, manager_.GetLeastUnacked());
816 // Least unacked isn't raised until an ack is received, so ack the 815 // Least unacked isn't raised until an ack is received, so ack the
817 // crypto packets. 816 // crypto packets.
818 QuicPacketNumber acked[] = {8, 9}; 817 QuicPacketNumber acked[] = {8, 9};
819 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); 818 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
820 QuicAckFrame ack_frame = InitAckFrame(9); 819 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 8, 9);
821 for (QuicPacketNumber i = 1; i < 8; ++i) {
822 NackPackets(i, i + 1, &ack_frame);
823 }
824 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 820 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
825 EXPECT_EQ(10u, manager_.GetLeastUnacked()); 821 EXPECT_EQ(10u, manager_.GetLeastUnacked());
826 } 822 }
827 823
828 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) { 824 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) {
829 // Send 1 crypto packet. 825 // Send 1 crypto packet.
830 SendCryptoPacket(1); 826 SendCryptoPacket(1);
831 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 827 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
832 828
833 // Retransmit the crypto packet as 2. 829 // Retransmit the crypto packet as 2.
834 manager_.OnRetransmissionTimeout(); 830 manager_.OnRetransmissionTimeout();
835 RetransmitNextPacket(2); 831 RetransmitNextPacket(2);
836 832
837 // Retransmit the crypto packet as 3. 833 // Retransmit the crypto packet as 3.
838 manager_.OnRetransmissionTimeout(); 834 manager_.OnRetransmissionTimeout();
839 RetransmitNextPacket(3); 835 RetransmitNextPacket(3);
840 836
841 // Now ack the second crypto packet, and ensure the first gets removed, but 837 // Now ack the second crypto packet, and ensure the first gets removed, but
842 // the third does not. 838 // the third does not.
843 ExpectUpdatedRtt(2); 839 ExpectUpdatedRtt(2);
844 QuicAckFrame ack_frame = InitAckFrame(2); 840 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 2, 2);
845 NackPackets(1, 2, &ack_frame);
846 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 841 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
847 842
848 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 843 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
849 QuicPacketNumber unacked[] = {3}; 844 QuicPacketNumber unacked[] = {3};
850 VerifyUnackedPackets(unacked, arraysize(unacked)); 845 VerifyUnackedPackets(unacked, arraysize(unacked));
851 } 846 }
852 847
853 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { 848 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) {
854 // Send 2 crypto packets and 1 data packet. 849 // Send 2 crypto packets and 1 data packet.
855 const size_t kNumSentCryptoPackets = 2; 850 const size_t kNumSentCryptoPackets = 2;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 manager_.NeuterUnencryptedPackets(); 903 manager_.NeuterUnencryptedPackets();
909 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 904 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
910 QuicPacketNumber unacked[] = {1, 2, 3}; 905 QuicPacketNumber unacked[] = {1, 2, 3};
911 VerifyUnackedPackets(unacked, arraysize(unacked)); 906 VerifyUnackedPackets(unacked, arraysize(unacked));
912 VerifyRetransmittablePackets(nullptr, 0); 907 VerifyRetransmittablePackets(nullptr, 0);
913 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 908 EXPECT_FALSE(manager_.HasPendingRetransmissions());
914 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 909 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
915 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 910 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
916 911
917 // Ensure both packets get discarded when packet 2 is acked. 912 // Ensure both packets get discarded when packet 2 is acked.
918 QuicAckFrame ack_frame = InitAckFrame(3); 913 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 3, 3);
919 NackPackets(1, 3, &ack_frame);
920 ExpectUpdatedRtt(3); 914 ExpectUpdatedRtt(3);
921 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 915 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
922 VerifyUnackedPackets(nullptr, 0); 916 VerifyUnackedPackets(nullptr, 0);
923 VerifyRetransmittablePackets(nullptr, 0); 917 VerifyRetransmittablePackets(nullptr, 0);
924 } 918 }
925 919
926 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 920 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
927 StrictMock<MockDebugDelegate> debug_delegate; 921 StrictMock<MockDebugDelegate> debug_delegate;
928 manager_.SetDebugDelegate(&debug_delegate); 922 manager_.SetDebugDelegate(&debug_delegate);
929 923
930 // Send 100 packets. 924 // Send 100 packets.
931 const size_t kNumSentPackets = 100; 925 const size_t kNumSentPackets = 100;
932 for (size_t i = 1; i <= kNumSentPackets; ++i) { 926 for (size_t i = 1; i <= kNumSentPackets; ++i) {
933 SendDataPacket(i); 927 SendDataPacket(i);
934 } 928 }
935 929
936 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); 930 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe());
937 manager_.OnRetransmissionTimeout(); 931 manager_.OnRetransmissionTimeout();
938 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 932 EXPECT_TRUE(manager_.HasPendingRetransmissions());
939 EXPECT_EQ(100 * kDefaultLength, 933 EXPECT_EQ(100 * kDefaultLength,
940 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 934 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
941 RetransmitNextPacket(101); 935 RetransmitNextPacket(101);
942 RetransmitNextPacket(102); 936 RetransmitNextPacket(102);
943 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 937 EXPECT_FALSE(manager_.HasPendingRetransmissions());
944 938
945 // Ack a retransmission. 939 // Ack a retransmission.
946 QuicAckFrame ack_frame = InitAckFrame(102); 940 QuicAckFrame ack_frame = ConstructAckFrame(1, 0, 102, 102);
947 NackPackets(0, 102, &ack_frame);
948 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 941 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
949 // Ensure no packets are lost. 942 // Ensure no packets are lost.
950 EXPECT_CALL(*send_algorithm_, 943 EXPECT_CALL(*send_algorithm_,
951 OnCongestionEvent(true, _, _, ElementsAre(Pair(102, _)), 944 OnCongestionEvent(true, _, _, ElementsAre(Pair(102, _)),
952 /*lost_packets=*/IsEmpty())); 945 /*lost_packets=*/IsEmpty()));
953 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 946 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
954 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 947 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
955 // RTO's use loss detection instead of immediately declaring retransmitted 948 // RTO's use loss detection instead of immediately declaring retransmitted
956 // packets lost. 949 // packets lost.
957 for (int i = 1; i <= 99; ++i) { 950 for (int i = 1; i <= 99; ++i) {
(...skipping 27 matching lines...) Expand all
985 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); 978 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe());
986 manager_.OnRetransmissionTimeout(); 979 manager_.OnRetransmissionTimeout();
987 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 980 EXPECT_TRUE(manager_.HasPendingRetransmissions());
988 EXPECT_EQ(100 * kDefaultLength, 981 EXPECT_EQ(100 * kDefaultLength,
989 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 982 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
990 RetransmitNextPacket(101); 983 RetransmitNextPacket(101);
991 RetransmitNextPacket(102); 984 RetransmitNextPacket(102);
992 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 985 EXPECT_FALSE(manager_.HasPendingRetransmissions());
993 986
994 // Ack a retransmission and expect no call to OnRetransmissionTimeout. 987 // Ack a retransmission and expect no call to OnRetransmissionTimeout.
995 QuicAckFrame ack_frame = InitAckFrame(102); 988 QuicAckFrame ack_frame = ConstructAckFrame(1, 0, 102, 102);
996 NackPackets(0, 102, &ack_frame);
997 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 989 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
998 // This will include packets in the lost packet map. 990 // This will include packets in the lost packet map.
999 EXPECT_CALL(*send_algorithm_, 991 EXPECT_CALL(*send_algorithm_,
1000 OnCongestionEvent(true, _, _, ElementsAre(Pair(102, _)), 992 OnCongestionEvent(true, _, _, ElementsAre(Pair(102, _)),
1001 /*lost_packets=*/Not(IsEmpty()))); 993 /*lost_packets=*/Not(IsEmpty())));
1002 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 994 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1003 manager_.OnIncomingAck(ack_frame, clock_.Now()); 995 manager_.OnIncomingAck(ack_frame, clock_.Now());
1004 } 996 }
1005 997
1006 TEST_F(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) { 998 TEST_F(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) {
(...skipping 11 matching lines...) Expand all
1018 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); 1010 EXPECT_CALL(*network_change_visitor_, OnPathDegrading());
1019 manager_.OnRetransmissionTimeout(); 1011 manager_.OnRetransmissionTimeout();
1020 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1012 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1021 EXPECT_EQ(2 * kDefaultLength, 1013 EXPECT_EQ(2 * kDefaultLength,
1022 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1014 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1023 RetransmitNextPacket(3); 1015 RetransmitNextPacket(3);
1024 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1016 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1025 1017
1026 // Ack a retransmission and ensure OnRetransmissionTimeout is called. 1018 // Ack a retransmission and ensure OnRetransmissionTimeout is called.
1027 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1019 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1028 QuicAckFrame ack_frame = InitAckFrame(2); 1020 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 2, 2);
1029 NackPackets(1, 2, &ack_frame);
1030 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 1021 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
1031 ExpectAck(2); 1022 ExpectAck(2);
1032 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1023 manager_.OnIncomingAck(ack_frame, clock_.Now());
1033 1024
1034 // The original packet and newest should be outstanding. 1025 // The original packet and newest should be outstanding.
1035 EXPECT_EQ(2 * kDefaultLength, 1026 EXPECT_EQ(2 * kDefaultLength,
1036 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1027 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1037 } 1028 }
1038 1029
1039 TEST_F(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckFirst) { 1030 TEST_F(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckFirst) {
(...skipping 11 matching lines...) Expand all
1051 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); 1042 EXPECT_CALL(*network_change_visitor_, OnPathDegrading());
1052 manager_.OnRetransmissionTimeout(); 1043 manager_.OnRetransmissionTimeout();
1053 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1044 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1054 EXPECT_EQ(2 * kDefaultLength, 1045 EXPECT_EQ(2 * kDefaultLength,
1055 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1046 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1056 RetransmitNextPacket(3); 1047 RetransmitNextPacket(3);
1057 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1048 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1058 1049
1059 // Ack a retransmission and ensure OnRetransmissionTimeout is called. 1050 // Ack a retransmission and ensure OnRetransmissionTimeout is called.
1060 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1051 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1061 QuicAckFrame ack_frame = InitAckFrame(3); 1052 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 3, 3);
1062 NackPackets(1, 3, &ack_frame);
1063 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 1053 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
1064 ExpectAck(3); 1054 ExpectAck(3);
1065 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1055 manager_.OnIncomingAck(ack_frame, clock_.Now());
1066 1056
1067 // The first two packets should still be outstanding. 1057 // The first two packets should still be outstanding.
1068 EXPECT_EQ(2 * kDefaultLength, 1058 EXPECT_EQ(2 * kDefaultLength,
1069 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1059 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1070 } 1060 }
1071 1061
1072 TEST_F(QuicSentPacketManagerTest, OnPathDegrading) { 1062 TEST_F(QuicSentPacketManagerTest, OnPathDegrading) {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1209 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1220 1210
1221 // The delay should double the second time. 1211 // The delay should double the second time.
1222 expected_time = clock_.Now() + expected_rto_delay + expected_rto_delay; 1212 expected_time = clock_.Now() + expected_rto_delay + expected_rto_delay;
1223 // Once we always base the timer on the right edge, leaving the older packets 1213 // Once we always base the timer on the right edge, leaving the older packets
1224 // in flight doesn't change the timeout. 1214 // in flight doesn't change the timeout.
1225 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1215 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1226 1216
1227 // Ack a packet before the first RTO and ensure the RTO timeout returns to the 1217 // Ack a packet before the first RTO and ensure the RTO timeout returns to the
1228 // original value and OnRetransmissionTimeout is not called or reverted. 1218 // original value and OnRetransmissionTimeout is not called or reverted.
1229 QuicAckFrame ack_frame = InitAckFrame(2); 1219 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 2, 2);
1230 NackPackets(1, 2, &ack_frame);
1231 ExpectAck(2); 1220 ExpectAck(2);
1232 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 1221 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
1233 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1222 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1234 EXPECT_EQ(5 * kDefaultLength, 1223 EXPECT_EQ(5 * kDefaultLength,
1235 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1224 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1236 1225
1237 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time 1226 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time
1238 // and the TLP time. In production, there would always be two TLP's first. 1227 // and the TLP time. In production, there would always be two TLP's first.
1239 // Since retransmission was spurious, smoothed_rtt_ is expired, and replaced 1228 // Since retransmission was spurious, smoothed_rtt_ is expired, and replaced
1240 // by the latest RTT sample of 500ms. 1229 // by the latest RTT sample of 500ms.
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 1319
1331 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) 1320 EXPECT_CALL(*loss_algorithm, GetLossTimeout())
1332 .WillRepeatedly(Return(QuicTime::Zero())); 1321 .WillRepeatedly(Return(QuicTime::Zero()));
1333 SendDataPacket(1); 1322 SendDataPacket(1);
1334 SendDataPacket(2); 1323 SendDataPacket(2);
1335 1324
1336 // Handle an ack which causes the loss algorithm to be evaluated and 1325 // Handle an ack which causes the loss algorithm to be evaluated and
1337 // set the loss timeout. 1326 // set the loss timeout.
1338 ExpectAck(2); 1327 ExpectAck(2);
1339 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 1328 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
1340 QuicAckFrame ack_frame = InitAckFrame(2); 1329 QuicAckFrame ack_frame = ConstructAckFrame(1, 1, 2, 2);
1341 NackPackets(1, 2, &ack_frame);
1342 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1330 manager_.OnIncomingAck(ack_frame, clock_.Now());
1343 1331
1344 QuicTime timeout(clock_.Now() + QuicTime::Delta::FromMilliseconds(10)); 1332 QuicTime timeout(clock_.Now() + QuicTime::Delta::FromMilliseconds(10));
1345 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) 1333 EXPECT_CALL(*loss_algorithm, GetLossTimeout())
1346 .WillRepeatedly(Return(timeout)); 1334 .WillRepeatedly(Return(timeout));
1347 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); 1335 EXPECT_EQ(timeout, manager_.GetRetransmissionTime());
1348 1336
1349 // Fire the retransmission timeout and ensure the loss detection algorithm 1337 // Fire the retransmission timeout and ensure the loss detection algorithm
1350 // is invoked. 1338 // is invoked.
1351 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 1339 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1654 auto loss_algorithm = QuicMakeUnique<MockLossAlgorithm>(); 1642 auto loss_algorithm = QuicMakeUnique<MockLossAlgorithm>();
1655 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get()); 1643 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get());
1656 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _)); 1644 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _));
1657 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1645 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1658 SendAlgorithmInterface::CongestionVector lost_packets; 1646 SendAlgorithmInterface::CongestionVector lost_packets;
1659 for (size_t i = 1; i < kNumSentPackets; ++i) { 1647 for (size_t i = 1; i < kNumSentPackets; ++i) {
1660 lost_packets.push_back(std::make_pair(i, kMaxPacketSize)); 1648 lost_packets.push_back(std::make_pair(i, kMaxPacketSize));
1661 } 1649 }
1662 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)) 1650 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _))
1663 .WillOnce(SetArgPointee<4>(lost_packets)); 1651 .WillOnce(SetArgPointee<4>(lost_packets));
1664 QuicAckFrame ack_frame = InitAckFrame(kNumSentPackets); 1652 QuicAckFrame ack_frame =
1665 NackPackets(1, kNumSentPackets, &ack_frame); 1653 ConstructAckFrame(1, 1, kNumSentPackets, kNumSentPackets);
1666 // Congestion block the sending right before losing the packets. 1654 // Congestion block the sending right before losing the packets.
1667 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 1655 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1668 .WillRepeatedly(Return(QuicTime::Delta::Infinite())); 1656 .WillRepeatedly(Return(QuicTime::Delta::Infinite()));
1669 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1657 manager_.OnIncomingAck(ack_frame, clock_.Now());
1670 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1658 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1671 EXPECT_EQ(0u, BytesInFlight()); 1659 EXPECT_EQ(0u, BytesInFlight());
1672 1660
1673 // Ack 1 and ensure the retransmissions are cancelled and put back in flight. 1661 // Ack 1 and ensure the retransmissions are cancelled and put back in flight.
1674 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 1662 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
1675 ack_frame = InitAckFrame(5); 1663 ack_frame = ConstructAckFrame(1, 2, kNumSentPackets, 5);
1676 NackPackets(2, kNumSentPackets, &ack_frame);
1677 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1664 manager_.OnIncomingAck(ack_frame, clock_.Now());
1678 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1665 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1679 EXPECT_EQ(3u * kDefaultLength, BytesInFlight()); 1666 EXPECT_EQ(3u * kDefaultLength, BytesInFlight());
1680 } 1667 }
1681 1668
1682 TEST_F(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) { 1669 TEST_F(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) {
1683 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); 1670 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
1684 QuicConfig client_config; 1671 QuicConfig client_config;
1685 QuicTagVector options; 1672 QuicTagVector options;
1686 1673
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1791 ExpectAck(1); 1778 ExpectAck(1);
1792 EXPECT_CALL(*network_change_visitor_, 1779 EXPECT_CALL(*network_change_visitor_,
1793 OnPathMtuIncreased(kDefaultLength + 100)); 1780 OnPathMtuIncreased(kDefaultLength + 100));
1794 QuicAckFrame ack_frame = InitAckFrame(1); 1781 QuicAckFrame ack_frame = InitAckFrame(1);
1795 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1782 manager_.OnIncomingAck(ack_frame, clock_.Now());
1796 } 1783 }
1797 1784
1798 } // namespace 1785 } // namespace
1799 } // namespace test 1786 } // namespace test
1800 } // namespace net 1787 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698