OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |