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

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

Issue 180723003: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unintialized memory error Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_sent_packet_manager.h" 5 #include "net/quic/quic_sent_packet_manager.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
9 #include "net/quic/test_tools/quic_test_utils.h" 9 #include "net/quic/test_tools/quic_test_utils.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 17 matching lines...) Expand all
28 // Disable tail loss probes for most tests. 28 // Disable tail loss probes for most tests.
29 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); 29 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0);
30 // Advance the time 1s so the send times are never QuicTime::Zero. 30 // Advance the time 1s so the send times are never QuicTime::Zero.
31 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); 31 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000));
32 } 32 }
33 33
34 virtual ~QuicSentPacketManagerTest() { 34 virtual ~QuicSentPacketManagerTest() {
35 STLDeleteElements(&packets_); 35 STLDeleteElements(&packets_);
36 } 36 }
37 37
38 virtual void SetUp() {
39 // Ack handling requests a smoothed rtt for loss detection.
40 EXPECT_CALL(*send_algorithm_, SmoothedRtt())
41 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1)));
42 }
43
38 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, 44 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets,
39 size_t num_packets) { 45 size_t num_packets) {
40 if (num_packets == 0) { 46 if (num_packets == 0) {
41 EXPECT_FALSE(manager_.HasUnackedPackets()); 47 EXPECT_FALSE(manager_.HasUnackedPackets());
42 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( 48 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets(
43 &manager_)); 49 &manager_));
44 return; 50 return;
45 } 51 }
46 52
47 EXPECT_TRUE(manager_.HasUnackedPackets()); 53 EXPECT_TRUE(manager_.HasUnackedPackets());
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 613 QuicPacketSequenceNumber unacked[] = { 1, 2 };
608 VerifyUnackedPackets(unacked, arraysize(unacked)); 614 VerifyUnackedPackets(unacked, arraysize(unacked));
609 VerifyRetransmittablePackets(NULL, 0); 615 VerifyRetransmittablePackets(NULL, 0);
610 616
611 EXPECT_TRUE(manager_.HasUnackedPackets()); 617 EXPECT_TRUE(manager_.HasUnackedPackets());
612 EXPECT_EQ(QuicTime::Zero(), 618 EXPECT_EQ(QuicTime::Zero(),
613 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); 619 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1));
614 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); 620 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
615 } 621 }
616 622
617 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) {
618 const size_t kNumSentPackets = 4;
619 // Transmit 4 packets.
620 for (size_t i = 1; i <= kNumSentPackets; ++i) {
621 SendDataPacket(i);
622 }
623 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
624
625 // Nack the first packet 3 times with increasing largest observed.
626 ReceivedPacketInfo received_info;
627 received_info.delta_time_largest_observed =
628 QuicTime::Delta::FromMilliseconds(5);
629 received_info.missing_packets.insert(1);
630 for (QuicPacketSequenceNumber i = 1; i <= 3; ++i) {
631 received_info.largest_observed = i + 1;
632 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
633 EXPECT_CALL(*send_algorithm_, OnPacketAcked(i + 1, _)).Times(1);
634 if (i == 3) {
635 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
636 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
637 }
638 manager_.OnIncomingAck(received_info, clock_.Now());
639 EXPECT_EQ(
640 i == 3 ? 1u : 0u,
641 QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
642 EXPECT_EQ(i, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
643 }
644 EXPECT_EQ(1u, stats_.packets_lost);
645 }
646
647 // A stretch ack is an ack that covers more than 1 packet of previously
648 // unacknowledged data.
649 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketWith1StretchAck) {
650 const size_t kNumSentPackets = 4;
651 // Transmit 4 packets.
652 for (size_t i = 1; i <= kNumSentPackets; ++i) {
653 SendDataPacket(i);
654 }
655
656 // Nack the first packet 3 times in a single StretchAck.
657 ReceivedPacketInfo received_info;
658 received_info.delta_time_largest_observed =
659 QuicTime::Delta::FromMilliseconds(5);
660 received_info.missing_packets.insert(1);
661 received_info.largest_observed = kNumSentPackets;
662 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
663 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
664 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
665 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
666 manager_.OnIncomingAck(received_info, clock_.Now());
667 EXPECT_EQ(
668 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
669 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
670 EXPECT_EQ(1u, stats_.packets_lost);
671 }
672
673 // Ack a packet 3 packets ahead, causing a retransmit.
674 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketSingleAck) {
675 const size_t kNumSentPackets = 5;
676 // Transmit 5 packets.
677 for (size_t i = 1; i <= kNumSentPackets; ++i) {
678 SendDataPacket(i);
679 }
680
681 // Nack the first packet 3 times in an AckFrame with three missing packets.
682 ReceivedPacketInfo received_info;
683 received_info.delta_time_largest_observed =
684 QuicTime::Delta::FromMilliseconds(5);
685 received_info.missing_packets.insert(1);
686 received_info.missing_packets.insert(2);
687 received_info.missing_packets.insert(3);
688 received_info.largest_observed = 4;
689 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
690 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1);
691 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
692 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
693 manager_.OnIncomingAck(received_info, clock_.Now());
694 EXPECT_EQ(
695 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
696 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
697 EXPECT_EQ(1u, stats_.packets_lost);
698 }
699
700 TEST_F(QuicSentPacketManagerTest, EarlyRetransmit1Packet) {
701 const size_t kNumSentPackets = 2;
702 // Transmit 2 packets.
703 for (size_t i = 1; i <= kNumSentPackets; ++i) {
704 SendDataPacket(i);
705 }
706
707 // Early retransmit when the final packet gets acked and the first is nacked.
708 ReceivedPacketInfo received_info;
709 received_info.delta_time_largest_observed =
710 QuicTime::Delta::FromMilliseconds(5);
711 received_info.missing_packets.insert(1);
712 received_info.largest_observed = kNumSentPackets;
713 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
714 EXPECT_CALL(*send_algorithm_, OnPacketAcked(kNumSentPackets, _)).Times(1);
715 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
716 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
717 manager_.OnIncomingAck(received_info, clock_.Now());
718 EXPECT_EQ(
719 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
720 EXPECT_EQ(1u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
721 EXPECT_EQ(1u, stats_.packets_lost);
722 }
723
724 TEST_F(QuicSentPacketManagerTest, EarlyRetransmitAllPackets) {
725 const size_t kNumSentPackets = 5;
726 for (size_t i = 1; i <= kNumSentPackets; ++i) {
727 SendDataPacket(i);
728 }
729
730 // Early retransmit all packets when the final packet arrives, since we do
731 // not expect to receive any more acks.
732 ReceivedPacketInfo received_info;
733 received_info.delta_time_largest_observed =
734 QuicTime::Delta::FromMilliseconds(5);
735 received_info.missing_packets.insert(1);
736 received_info.missing_packets.insert(2);
737 received_info.missing_packets.insert(3);
738 received_info.missing_packets.insert(4);
739 received_info.largest_observed = kNumSentPackets;
740 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
741 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)).Times(1);
742 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(4);
743 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(4);
744 manager_.OnIncomingAck(received_info, clock_.Now());
745 EXPECT_EQ(
746 4u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
747 EXPECT_EQ(4u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
748 EXPECT_EQ(4u, stats_.packets_lost);
749 }
750
751 TEST_F(QuicSentPacketManagerTest, NackRetransmit2Packets) { 623 TEST_F(QuicSentPacketManagerTest, NackRetransmit2Packets) {
752 const size_t kNumSentPackets = 25; 624 const size_t kNumSentPackets = 25;
753 // Transmit 25 packets. 625 // Transmit 25 packets.
754 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { 626 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) {
755 SendDataPacket(i); 627 SendDataPacket(i);
756 } 628 }
757 629
758 // Nack the first 19 packets 3 times, which does not trigger early retransmit. 630 // Nack the first 19 packets 3 times, which does not trigger early retransmit.
759 const size_t kLargestObserved = 20; 631 const size_t kLargestObserved = 20;
760 ReceivedPacketInfo received_info; 632 ReceivedPacketInfo received_info;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 } 686 }
815 687
816 // Ensure only the odd packets were retransmitted, since the others were not 688 // Ensure only the odd packets were retransmitted, since the others were not
817 // retransmittable(ie: acks). 689 // retransmittable(ie: acks).
818 for (size_t i = 0; i < 13; ++i) { 690 for (size_t i = 0; i < 13; ++i) {
819 EXPECT_EQ(1 + 2 * i, manager_.NextPendingRetransmission().sequence_number); 691 EXPECT_EQ(1 + 2 * i, manager_.NextPendingRetransmission().sequence_number);
820 manager_.OnRetransmittedPacket(1 + 2 * i, kNumSentPackets + 1 + i); 692 manager_.OnRetransmittedPacket(1 + 2 * i, kNumSentPackets + 1 + i);
821 } 693 }
822 } 694 }
823 695
824 TEST_F(QuicSentPacketManagerTest, NackTwiceThenAck) {
825 // Transmit 4 packets.
826 for (QuicPacketSequenceNumber i = 1; i <= 4; ++i) {
827 SendDataPacket(i);
828 }
829
830 // Nack the first packet 2 times, then ack it.
831 ReceivedPacketInfo received_info;
832 received_info.missing_packets.insert(1);
833 for (size_t i = 1; i <= 3; ++i) {
834 if (i == 3) {
835 received_info.missing_packets.clear();
836 }
837 received_info.largest_observed = i + 1;
838 received_info.delta_time_largest_observed =
839 QuicTime::Delta::FromMilliseconds(5);
840 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
841 EXPECT_CALL(*send_algorithm_,
842 OnPacketAcked(_, _)).Times(i == 3 ? 2 : 1);
843 manager_.OnIncomingAck(received_info, clock_.Now());
844 EXPECT_FALSE(manager_.HasPendingRetransmissions());
845 // The nack count is not available once the packet has been acked.
846 if (i != 3) {
847 EXPECT_EQ(i, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
848 }
849 }
850 }
851
852 TEST_F(QuicSentPacketManagerTest, Rtt) { 696 TEST_F(QuicSentPacketManagerTest, Rtt) {
853 QuicPacketSequenceNumber sequence_number = 1; 697 QuicPacketSequenceNumber sequence_number = 1;
854 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); 698 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15);
855 SendDataPacket(sequence_number); 699 SendDataPacket(sequence_number);
856 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); 700 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
857 701
858 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); 702 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt));
859 EXPECT_CALL(*send_algorithm_, 703 EXPECT_CALL(*send_algorithm_,
860 OnPacketAcked(sequence_number, _)).Times(1); 704 OnPacketAcked(sequence_number, _)).Times(1);
861 ReceivedPacketInfo received_info; 705 ReceivedPacketInfo received_info;
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 delay = delay.Add(delay); 1116 delay = delay.Add(delay);
1273 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1117 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1274 manager_.OnRetransmissionTimeout(); 1118 manager_.OnRetransmissionTimeout();
1275 RetransmitNextPacket(i + 2); 1119 RetransmitNextPacket(i + 2);
1276 } 1120 }
1277 } 1121 }
1278 1122
1279 } // namespace 1123 } // namespace
1280 } // namespace test 1124 } // namespace test
1281 } // namespace net 1125 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698