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/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 received_info.largest_observed = kNumSentPackets; | 624 received_info.largest_observed = kNumSentPackets; |
625 EXPECT_CALL(*send_algorithm_, OnPacketAcked(kNumSentPackets, _, _)).Times(1); | 625 EXPECT_CALL(*send_algorithm_, OnPacketAcked(kNumSentPackets, _, _)).Times(1); |
626 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); | 626 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1); |
627 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); | 627 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1); |
628 SequenceNumberSet retransmissions = | 628 SequenceNumberSet retransmissions = |
629 manager_.OnIncomingAckFrame(received_info, clock_.Now()); | 629 manager_.OnIncomingAckFrame(received_info, clock_.Now()); |
630 EXPECT_EQ(1u, retransmissions.size()); | 630 EXPECT_EQ(1u, retransmissions.size()); |
631 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); | 631 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1)); |
632 } | 632 } |
633 | 633 |
634 TEST_F(QuicSentPacketManagerTest, NackRetransmit10Packets) { | 634 TEST_F(QuicSentPacketManagerTest, NackRetransmit2Packets) { |
635 const size_t kNumSentPackets = 20; | 635 const size_t kNumSentPackets = 20; |
636 // Transmit 20 packets. | 636 // Transmit 20 packets. |
637 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { | 637 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { |
638 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 638 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
639 .Times(1).WillOnce(Return(true)); | 639 .Times(1).WillOnce(Return(true)); |
640 manager_.OnPacketSent(i, clock_.Now(), 1000, | 640 manager_.OnPacketSent(i, clock_.Now(), 1000, |
641 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 641 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
642 } | 642 } |
643 | 643 |
644 // Nack the first 19 packets 3 times. | 644 // Nack the first 19 packets 3 times. |
645 ReceivedPacketInfo received_info; | 645 ReceivedPacketInfo received_info; |
646 received_info.largest_observed = kNumSentPackets; | 646 received_info.largest_observed = kNumSentPackets; |
647 received_info.delta_time_largest_observed = | 647 received_info.delta_time_largest_observed = |
648 QuicTime::Delta::FromMilliseconds(5); | 648 QuicTime::Delta::FromMilliseconds(5); |
649 for (size_t i = 1; i < kNumSentPackets; ++i) { | 649 for (size_t i = 1; i < kNumSentPackets; ++i) { |
650 received_info.missing_packets.insert(i); | 650 received_info.missing_packets.insert(i); |
651 } | 651 } |
652 EXPECT_CALL(*send_algorithm_, | 652 EXPECT_CALL(*send_algorithm_, |
653 OnPacketAcked(kNumSentPackets, _, _)).Times(1); | 653 OnPacketAcked(kNumSentPackets, _, _)).Times(1); |
654 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(10); | 654 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); |
655 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(10); | 655 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); |
656 SequenceNumberSet retransmissions = | 656 SequenceNumberSet retransmissions = |
657 manager_.OnIncomingAckFrame(received_info, clock_.Now()); | 657 manager_.OnIncomingAckFrame(received_info, clock_.Now()); |
658 EXPECT_EQ(10u, retransmissions.size()); | 658 EXPECT_EQ(2u, retransmissions.size()); |
659 for (size_t i = 1; i < kNumSentPackets; ++i) { | 659 for (size_t i = 1; i < kNumSentPackets; ++i) { |
660 EXPECT_EQ(kNumSentPackets - i, | 660 EXPECT_EQ(kNumSentPackets - i, |
661 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); | 661 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); |
662 } | 662 } |
663 } | 663 } |
664 | 664 |
665 TEST_F(QuicSentPacketManagerTest, NackRetransmit10PacketsAlternateAcks) { | 665 TEST_F(QuicSentPacketManagerTest, NackRetransmit2PacketsAlternateAcks) { |
666 const size_t kNumSentPackets = 30; | 666 const size_t kNumSentPackets = 30; |
667 // Transmit 15 packets of data and 15 ack packets. The send algorithm will | 667 // Transmit 15 packets of data and 15 ack packets. The send algorithm will |
668 // inform the congestion manager not to save the acks by returning false. | 668 // inform the congestion manager not to save the acks by returning false. |
669 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { | 669 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { |
670 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 670 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
671 .Times(1).WillOnce(Return(i % 2 == 0 ? false : true)); | 671 .Times(1).WillOnce(Return(i % 2 == 0 ? false : true)); |
672 manager_.OnPacketSent( | 672 manager_.OnPacketSent( |
673 i, clock_.Now(), 1000, NOT_RETRANSMISSION, | 673 i, clock_.Now(), 1000, NOT_RETRANSMISSION, |
674 i % 2 == 0 ? NO_RETRANSMITTABLE_DATA : HAS_RETRANSMITTABLE_DATA); | 674 i % 2 == 0 ? NO_RETRANSMITTABLE_DATA : HAS_RETRANSMITTABLE_DATA); |
675 } | 675 } |
676 | 676 |
677 // Nack the first 29 packets 3 times. | 677 // Nack the first 29 packets 3 times. |
678 ReceivedPacketInfo received_info; | 678 ReceivedPacketInfo received_info; |
679 received_info.largest_observed = kNumSentPackets; | 679 received_info.largest_observed = kNumSentPackets; |
680 received_info.delta_time_largest_observed = | 680 received_info.delta_time_largest_observed = |
681 QuicTime::Delta::FromMilliseconds(5); | 681 QuicTime::Delta::FromMilliseconds(5); |
682 for (size_t i = 1; i < kNumSentPackets; ++i) { | 682 for (size_t i = 1; i < kNumSentPackets; ++i) { |
683 received_info.missing_packets.insert(i); | 683 received_info.missing_packets.insert(i); |
684 } | 684 } |
685 // We never actually get an ack call, since the kNumSentPackets packet was | 685 // We never actually get an ack call, since the kNumSentPackets packet was |
686 // not saved. | 686 // not saved. |
687 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(10); | 687 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(2); |
688 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(10); | 688 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); |
689 SequenceNumberSet retransmissions = | 689 SequenceNumberSet retransmissions = |
690 manager_.OnIncomingAckFrame(received_info, clock_.Now()); | 690 manager_.OnIncomingAckFrame(received_info, clock_.Now()); |
691 EXPECT_EQ(10u, retransmissions.size()); | 691 EXPECT_EQ(2u, retransmissions.size()); |
692 // Only non-ack packets have a nack count. | 692 // Only non-ack packets have a nack count. |
693 for (size_t i = 1; i < kNumSentPackets; i += 2) { | 693 for (size_t i = 1; i < kNumSentPackets; i += 2) { |
694 EXPECT_EQ(kNumSentPackets - i, | 694 EXPECT_EQ(kNumSentPackets - i, |
695 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); | 695 QuicSentPacketManagerPeer::GetNackCount(&manager_, i)); |
696 } | 696 } |
697 | 697 |
698 // Ensure only the odd packets were retransmitted, since the others were not | 698 // Ensure only the odd packets were retransmitted, since the others were not |
699 // retransmittable(ie: acks). | 699 // retransmittable(ie: acks). |
700 for (SequenceNumberSet::const_iterator it = retransmissions.begin(); | 700 for (SequenceNumberSet::const_iterator it = retransmissions.begin(); |
701 it != retransmissions.end(); ++it) { | 701 it != retransmissions.end(); ++it) { |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
887 RetransmitNextPacket(i + 2); | 887 RetransmitNextPacket(i + 2); |
888 } | 888 } |
889 | 889 |
890 // Then backoff starts | 890 // Then backoff starts |
891 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); | 891 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); |
892 } | 892 } |
893 | 893 |
894 } // namespace | 894 } // namespace |
895 } // namespace test | 895 } // namespace test |
896 } // namespace net | 896 } // namespace net |
OLD | NEW |