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

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

Issue 177203008: QUIC test refactor to move tests from the QuicSentPacketManagerTest to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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/congestion_control/tcp_loss_algorithm_test.cc ('k') | 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/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 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 613 QuicPacketSequenceNumber unacked[] = { 1, 2 };
614 VerifyUnackedPackets(unacked, arraysize(unacked)); 614 VerifyUnackedPackets(unacked, arraysize(unacked));
615 VerifyRetransmittablePackets(NULL, 0); 615 VerifyRetransmittablePackets(NULL, 0);
616 616
617 EXPECT_TRUE(manager_.HasUnackedPackets()); 617 EXPECT_TRUE(manager_.HasUnackedPackets());
618 EXPECT_EQ(QuicTime::Zero(), 618 EXPECT_EQ(QuicTime::Zero(),
619 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); 619 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1));
620 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); 620 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
621 } 621 }
622 622
623 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) {
624 const size_t kNumSentPackets = 4;
625 // Transmit 4 packets.
626 for (size_t i = 1; i <= kNumSentPackets; ++i) {
627 SendDataPacket(i);
628 }
629 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
630
631 // Nack the first packet 3 times with increasing largest observed.
632 ReceivedPacketInfo received_info;
633 received_info.delta_time_largest_observed =
634 QuicTime::Delta::FromMilliseconds(5);
635 received_info.missing_packets.insert(1);
636 for (QuicPacketSequenceNumber i = 1; i <= 3; ++i) {
637 received_info.largest_observed = i + 1;
638 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
639 EXPECT_CALL(*send_algorithm_, OnPacketAcked(i + 1, _)).Times(1);
640 if (i == 3) {
641 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
642 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
643 }
644 manager_.OnIncomingAck(received_info, clock_.Now());
645 EXPECT_EQ(
646 i == 3 ? 1u : 0u,
647 QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
648 EXPECT_EQ(i, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
649 }
650 EXPECT_EQ(1u, stats_.packets_lost);
651 }
652
653 // A stretch ack is an ack that covers more than 1 packet of previously
654 // unacknowledged data.
655 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketWith1StretchAck) {
656 const size_t kNumSentPackets = 4;
657 // Transmit 4 packets.
658 for (size_t i = 1; i <= kNumSentPackets; ++i) {
659 SendDataPacket(i);
660 }
661
662 // Nack the first packet 3 times in a single StretchAck.
663 ReceivedPacketInfo received_info;
664 received_info.delta_time_largest_observed =
665 QuicTime::Delta::FromMilliseconds(5);
666 received_info.missing_packets.insert(1);
667 received_info.largest_observed = kNumSentPackets;
668 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
669 EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
670 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
671 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
672 manager_.OnIncomingAck(received_info, clock_.Now());
673 EXPECT_EQ(
674 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
675 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
676 EXPECT_EQ(1u, stats_.packets_lost);
677 }
678
679 // Ack a packet 3 packets ahead, causing a retransmit.
680 TEST_F(QuicSentPacketManagerTest, NackRetransmit1PacketSingleAck) {
681 const size_t kNumSentPackets = 5;
682 // Transmit 5 packets.
683 for (size_t i = 1; i <= kNumSentPackets; ++i) {
684 SendDataPacket(i);
685 }
686
687 // Nack the first packet 3 times in an AckFrame with three missing packets.
688 ReceivedPacketInfo received_info;
689 received_info.delta_time_largest_observed =
690 QuicTime::Delta::FromMilliseconds(5);
691 received_info.missing_packets.insert(1);
692 received_info.missing_packets.insert(2);
693 received_info.missing_packets.insert(3);
694 received_info.largest_observed = 4;
695 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
696 EXPECT_CALL(*send_algorithm_, OnPacketAcked(4, _)).Times(1);
697 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
698 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
699 manager_.OnIncomingAck(received_info, clock_.Now());
700 EXPECT_EQ(
701 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
702 EXPECT_EQ(3u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
703 EXPECT_EQ(1u, stats_.packets_lost);
704 }
705
706 TEST_F(QuicSentPacketManagerTest, EarlyRetransmit1Packet) {
707 const size_t kNumSentPackets = 2;
708 // Transmit 2 packets.
709 for (size_t i = 1; i <= kNumSentPackets; ++i) {
710 SendDataPacket(i);
711 }
712
713 // Early retransmit when the final packet gets acked and the first is nacked.
714 ReceivedPacketInfo received_info;
715 received_info.delta_time_largest_observed =
716 QuicTime::Delta::FromMilliseconds(5);
717 received_info.missing_packets.insert(1);
718 received_info.largest_observed = kNumSentPackets;
719 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
720 EXPECT_CALL(*send_algorithm_, OnPacketAcked(kNumSentPackets, _)).Times(1);
721 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)).Times(1);
722 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
723 manager_.OnIncomingAck(received_info, clock_.Now());
724 EXPECT_EQ(
725 1u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
726 EXPECT_EQ(1u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
727 EXPECT_EQ(1u, stats_.packets_lost);
728 }
729
730 TEST_F(QuicSentPacketManagerTest, EarlyRetransmitAllPackets) {
731 const size_t kNumSentPackets = 5;
732 for (size_t i = 1; i <= kNumSentPackets; ++i) {
733 SendDataPacket(i);
734 }
735
736 // Early retransmit all packets when the final packet arrives, since we do
737 // not expect to receive any more acks.
738 ReceivedPacketInfo received_info;
739 received_info.delta_time_largest_observed =
740 QuicTime::Delta::FromMilliseconds(5);
741 received_info.missing_packets.insert(1);
742 received_info.missing_packets.insert(2);
743 received_info.missing_packets.insert(3);
744 received_info.missing_packets.insert(4);
745 received_info.largest_observed = kNumSentPackets;
746 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
747 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)).Times(1);
748 EXPECT_CALL(*send_algorithm_, OnPacketLost(_, _)).Times(4);
749 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(4);
750 manager_.OnIncomingAck(received_info, clock_.Now());
751 EXPECT_EQ(
752 4u, QuicSentPacketManagerPeer::GetPendingRetransmissionCount(&manager_));
753 EXPECT_EQ(4u, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
754 EXPECT_EQ(4u, stats_.packets_lost);
755 }
756
757 TEST_F(QuicSentPacketManagerTest, NackRetransmit2Packets) { 623 TEST_F(QuicSentPacketManagerTest, NackRetransmit2Packets) {
758 const size_t kNumSentPackets = 25; 624 const size_t kNumSentPackets = 25;
759 // Transmit 25 packets. 625 // Transmit 25 packets.
760 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) { 626 for (QuicPacketSequenceNumber i = 1; i <= kNumSentPackets; ++i) {
761 SendDataPacket(i); 627 SendDataPacket(i);
762 } 628 }
763 629
764 // 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.
765 const size_t kLargestObserved = 20; 631 const size_t kLargestObserved = 20;
766 ReceivedPacketInfo received_info; 632 ReceivedPacketInfo received_info;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 } 686 }
821 687
822 // 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
823 // retransmittable(ie: acks). 689 // retransmittable(ie: acks).
824 for (size_t i = 0; i < 13; ++i) { 690 for (size_t i = 0; i < 13; ++i) {
825 EXPECT_EQ(1 + 2 * i, manager_.NextPendingRetransmission().sequence_number); 691 EXPECT_EQ(1 + 2 * i, manager_.NextPendingRetransmission().sequence_number);
826 manager_.OnRetransmittedPacket(1 + 2 * i, kNumSentPackets + 1 + i); 692 manager_.OnRetransmittedPacket(1 + 2 * i, kNumSentPackets + 1 + i);
827 } 693 }
828 } 694 }
829 695
830 TEST_F(QuicSentPacketManagerTest, NackTwiceThenAck) {
831 // Transmit 4 packets.
832 for (QuicPacketSequenceNumber i = 1; i <= 4; ++i) {
833 SendDataPacket(i);
834 }
835
836 // Nack the first packet 2 times, then ack it.
837 ReceivedPacketInfo received_info;
838 received_info.missing_packets.insert(1);
839 for (size_t i = 1; i <= 3; ++i) {
840 if (i == 3) {
841 received_info.missing_packets.clear();
842 }
843 received_info.largest_observed = i + 1;
844 received_info.delta_time_largest_observed =
845 QuicTime::Delta::FromMilliseconds(5);
846 EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
847 EXPECT_CALL(*send_algorithm_,
848 OnPacketAcked(_, _)).Times(i == 3 ? 2 : 1);
849 manager_.OnIncomingAck(received_info, clock_.Now());
850 EXPECT_FALSE(manager_.HasPendingRetransmissions());
851 // The nack count is not available once the packet has been acked.
852 if (i != 3) {
853 EXPECT_EQ(i, QuicSentPacketManagerPeer::GetNackCount(&manager_, 1));
854 }
855 }
856 }
857
858 TEST_F(QuicSentPacketManagerTest, Rtt) { 696 TEST_F(QuicSentPacketManagerTest, Rtt) {
859 QuicPacketSequenceNumber sequence_number = 1; 697 QuicPacketSequenceNumber sequence_number = 1;
860 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); 698 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15);
861 SendDataPacket(sequence_number); 699 SendDataPacket(sequence_number);
862 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); 700 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
863 701
864 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); 702 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt));
865 EXPECT_CALL(*send_algorithm_, 703 EXPECT_CALL(*send_algorithm_,
866 OnPacketAcked(sequence_number, _)).Times(1); 704 OnPacketAcked(sequence_number, _)).Times(1);
867 ReceivedPacketInfo received_info; 705 ReceivedPacketInfo received_info;
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 delay = delay.Add(delay); 1116 delay = delay.Add(delay);
1279 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1117 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1280 manager_.OnRetransmissionTimeout(); 1118 manager_.OnRetransmissionTimeout();
1281 RetransmitNextPacket(i + 2); 1119 RetransmitNextPacket(i + 2);
1282 } 1120 }
1283 } 1121 }
1284 1122
1285 } // namespace 1123 } // namespace
1286 } // namespace test 1124 } // namespace test
1287 } // namespace net 1125 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/tcp_loss_algorithm_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698