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

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

Issue 99583006: Minor change of QUIC's RTO behavior to not change the congestion window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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') | 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 } 106 }
107 107
108 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { 108 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) {
109 packets_.push_back(QuicPacket::NewFecPacket( 109 packets_.push_back(QuicPacket::NewFecPacket(
110 NULL, 0, false, PACKET_8BYTE_GUID, false, 110 NULL, 0, false, PACKET_8BYTE_GUID, false,
111 PACKET_6BYTE_SEQUENCE_NUMBER)); 111 PACKET_6BYTE_SEQUENCE_NUMBER));
112 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 112 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER,
113 packets_.back(), 0u, NULL); 113 packets_.back(), 0u, NULL);
114 } 114 }
115 115
116 void SendDataPacket(QuicPacketSequenceNumber sequence_number) {
117 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _))
118 .Times(1).WillOnce(Return(true));
119 SerializedPacket packet(CreatePacket(sequence_number));
120 manager_.OnSerializedPacket(packet, clock_.ApproximateNow());
121 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
122 packet.packet->length(), NOT_RETRANSMISSION,
123 HAS_RETRANSMITTABLE_DATA);
124 }
125
126 // Based on QuicConnection's WritePendingRetransmissions.
127 void RetransmitNextPacket(
128 QuicPacketSequenceNumber retransmission_sequence_number) {
129 EXPECT_TRUE(manager_.HasPendingRetransmissions());
130 EXPECT_CALL(*send_algorithm_,
131 OnPacketSent(_, retransmission_sequence_number, _, _, _))
132 .Times(1).WillOnce(Return(true));
133 const QuicSentPacketManager::PendingRetransmission pending =
134 manager_.NextPendingRetransmission();
135 manager_.OnRetransmittedPacket(
136 pending.sequence_number, retransmission_sequence_number);
137 manager_.OnPacketSent(retransmission_sequence_number,
138 clock_.ApproximateNow(), 1000,
139 pending.transmission_type, HAS_RETRANSMITTABLE_DATA);
140 }
141
116 testing::StrictMock<MockHelper> helper_; 142 testing::StrictMock<MockHelper> helper_;
117 QuicSentPacketManager manager_; 143 QuicSentPacketManager manager_;
118 vector<QuicPacket*> packets_; 144 vector<QuicPacket*> packets_;
119 MockClock clock_; 145 MockClock clock_;
120 MockSendAlgorithm* send_algorithm_; 146 MockSendAlgorithm* send_algorithm_;
121 }; 147 };
122 148
123 TEST_F(QuicSentPacketManagerTest, IsUnacked) { 149 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
124 VerifyUnackedPackets(NULL, 0); 150 VerifyUnackedPackets(NULL, 0);
125 151
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 // Ack 1 but not 2. 221 // Ack 1 but not 2.
196 ReceivedPacketInfo received_info; 222 ReceivedPacketInfo received_info;
197 received_info.largest_observed = 1; 223 received_info.largest_observed = 1;
198 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u)); 224 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u));
199 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 225 manager_.OnIncomingAck(received_info, QuicTime::Zero());
200 226
201 // 2 remains unacked, but no packets have retransmittable data. 227 // 2 remains unacked, but no packets have retransmittable data.
202 QuicPacketSequenceNumber unacked[] = { 2 }; 228 QuicPacketSequenceNumber unacked[] = { 2 };
203 VerifyUnackedPackets(unacked, arraysize(unacked)); 229 VerifyUnackedPackets(unacked, arraysize(unacked));
204 VerifyRetransmittablePackets(NULL, 0); 230 VerifyRetransmittablePackets(NULL, 0);
231
232 // Verify that if the retransmission alarm does fire to abandon packet 2,
233 // the sent packet manager is not notified, since there is no retransmittable
234 // data outstanding.
235 manager_.OnRetransmissionTimeout();
205 } 236 }
206 237
207 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { 238 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
208 SerializedPacket serialized_packet(CreatePacket(1)); 239 SerializedPacket serialized_packet(CreatePacket(1));
209 240
210 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 241 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero());
211 RetransmitPacket(1, 2); 242 RetransmitPacket(1, 2);
212 RetransmitPacket(2, 3); 243 RetransmitPacket(2, 3);
213 244
214 // Ack 1 but not 2 or 3. 245 // Ack 1 but not 2 or 3.
215 ReceivedPacketInfo received_info; 246 ReceivedPacketInfo received_info;
216 received_info.largest_observed = 1; 247 received_info.largest_observed = 1;
217 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u)); 248 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u));
218 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 249 manager_.OnIncomingAck(received_info, QuicTime::Zero());
219 250
220 // 3 remains unacked, but no packets have retransmittable data. 251 // 3 remains unacked, but no packets have retransmittable data.
221 QuicPacketSequenceNumber unacked[] = { 3 }; 252 QuicPacketSequenceNumber unacked[] = { 3 };
222 VerifyUnackedPackets(unacked, arraysize(unacked)); 253 VerifyUnackedPackets(unacked, arraysize(unacked));
223 VerifyRetransmittablePackets(NULL, 0); 254 VerifyRetransmittablePackets(NULL, 0);
255
256 // Verify that if the retransmission alarm does fire to abandon packet 3,
257 // the sent packet manager is not notified, since there is no retransmittable
258 // data outstanding.
259 manager_.OnRetransmissionTimeout();
224 } 260 }
225 261
226 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { 262 TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
227 SerializedPacket serialized_packet(CreatePacket(1)); 263 SerializedPacket serialized_packet(CreatePacket(1));
228 264
229 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 265 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero());
230 RetransmitPacket(1, 2); 266 RetransmitPacket(1, 2);
231 RetransmitPacket(2, 3); 267 RetransmitPacket(2, 3);
232 RetransmitPacket(3, 4); 268 RetransmitPacket(3, 4);
233 269
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 825 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
790 // Send 100 packets and then ensure all are abandoned when the RTO fires. 826 // Send 100 packets and then ensure all are abandoned when the RTO fires.
791 const size_t kNumSentPackets = 100; 827 const size_t kNumSentPackets = 100;
792 for (size_t i = 1; i <= kNumSentPackets; ++i) { 828 for (size_t i = 1; i <= kNumSentPackets; ++i) {
793 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 829 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
794 .Times(1).WillOnce(Return(true)); 830 .Times(1).WillOnce(Return(true));
795 manager_.OnPacketSent(i, clock_.Now(), 1000, 831 manager_.OnPacketSent(i, clock_.Now(), 1000,
796 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 832 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
797 } 833 }
798 834
799 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
800 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); 835 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets);
801 836
802 manager_.OnRetransmissionTimeout(); 837 manager_.OnRetransmissionTimeout();
803 } 838 }
804 839
805 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { 840 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) {
806 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
807 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(1); 841 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(1);
808 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 842 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
809 .WillOnce(Return(delay)); 843 .WillOnce(Return(delay));
810 844
811 manager_.OnRetransmissionTimeout(); 845 manager_.OnRetransmissionTimeout();
812 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), 846 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200),
813 manager_.GetRetransmissionDelay()); 847 manager_.GetRetransmissionDelay());
814 } 848 }
815 849
816 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { 850 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) {
817 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
818 QuicTime::Delta delay = QuicTime::Delta::FromSeconds(500); 851 QuicTime::Delta delay = QuicTime::Delta::FromSeconds(500);
819 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 852 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
820 .WillOnce(Return(delay)); 853 .WillOnce(Return(delay));
821 854
822 manager_.OnRetransmissionTimeout(); 855 manager_.OnRetransmissionTimeout();
823 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), 856 EXPECT_EQ(QuicTime::Delta::FromSeconds(60),
824 manager_.GetRetransmissionDelay()); 857 manager_.GetRetransmissionDelay());
825 } 858 }
826 859
827 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { 860 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) {
861 SendDataPacket(1);
828 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); 862 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
829 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 863 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
830 .WillRepeatedly(Return(delay)); 864 .WillRepeatedly(Return(delay));
831 865
832 // Delay should back off exponentially. 866 // Delay should back off exponentially.
833 for (int i = 0; i < 5; ++i) { 867 for (int i = 0; i < 5; ++i) {
834 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); 868 EXPECT_EQ(delay, manager_.GetRetransmissionDelay());
835 delay = delay.Add(delay); 869 delay = delay.Add(delay);
870 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _));
836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); 871 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
837 manager_.OnRetransmissionTimeout(); 872 manager_.OnRetransmissionTimeout();
873 RetransmitNextPacket(i + 2);
838 } 874 }
839 } 875 }
840 876
841 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { 877 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) {
842 FLAGS_limit_rto_increase_for_tests = true; 878 FLAGS_limit_rto_increase_for_tests = true;
843 879
880 SendDataPacket(1);
844 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); 881 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
845 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 882 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
846 .WillRepeatedly(Return(delay)); 883 .WillRepeatedly(Return(delay));
847 884
848 // No backoff for the first 5 retransmissions. 885 // No backoff for the first 5 retransmissions.
849 for (int i = 0; i < 5; ++i) { 886 for (int i = 0; i < 5; ++i) {
850 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); 887 EXPECT_EQ(delay, manager_.GetRetransmissionDelay());
888 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _));
851 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); 889 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
852 manager_.OnRetransmissionTimeout(); 890 manager_.OnRetransmissionTimeout();
891 RetransmitNextPacket(i + 2);
853 } 892 }
854 893
855 // Then backoff starts 894 // Then backoff starts
856 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); 895 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay());
857 } 896 }
858 897
859 } // namespace 898 } // namespace
860 } // namespace test 899 } // namespace test
861 } // namespace net 900 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698