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

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

Issue 1979763002: Landing Recent QUIC changes until Sun May 8 00:39:29 2016 +0000 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.cc » ('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 <memory> 7 #include <memory>
8 8
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/quic/quic_flags.h" 10 #include "net/quic/quic_flags.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i])) 139 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i]))
140 << " packets[" << i << "]:" << packets[i]; 140 << " packets[" << i << "]:" << packets[i];
141 } 141 }
142 } 142 }
143 143
144 void ExpectAck(QuicPacketNumber largest_observed) { 144 void ExpectAck(QuicPacketNumber largest_observed) {
145 EXPECT_CALL( 145 EXPECT_CALL(
146 *send_algorithm_, 146 *send_algorithm_,
147 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)), 147 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)),
148 IsEmpty())); 148 IsEmpty()));
149 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 149 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
150 EXPECT_CALL(*network_change_visitor_, OnRttChange());
151 } 150 }
152 151
153 void ExpectUpdatedRtt(QuicPacketNumber largest_observed) { 152 void ExpectUpdatedRtt(QuicPacketNumber largest_observed) {
154 EXPECT_CALL(*send_algorithm_, 153 EXPECT_CALL(*send_algorithm_,
155 OnCongestionEvent(true, _, IsEmpty(), IsEmpty())); 154 OnCongestionEvent(true, _, IsEmpty(), IsEmpty()));
156 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 155 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
157 EXPECT_CALL(*network_change_visitor_, OnRttChange());
158 } 156 }
159 157
160 void ExpectAckAndLoss(bool rtt_updated, 158 void ExpectAckAndLoss(bool rtt_updated,
161 QuicPacketNumber largest_observed, 159 QuicPacketNumber largest_observed,
162 QuicPacketNumber lost_packet) { 160 QuicPacketNumber lost_packet) {
163 EXPECT_CALL(*send_algorithm_, 161 EXPECT_CALL(*send_algorithm_,
164 OnCongestionEvent(rtt_updated, _, 162 OnCongestionEvent(rtt_updated, _,
165 ElementsAre(Pair(largest_observed, _)), 163 ElementsAre(Pair(largest_observed, _)),
166 ElementsAre(Pair(lost_packet, _)))); 164 ElementsAre(Pair(lost_packet, _))));
167 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 165 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
168 EXPECT_CALL(*network_change_visitor_, OnRttChange());
169 } 166 }
170 167
171 // |packets_acked| and |packets_lost| should be in packet number order. 168 // |packets_acked| and |packets_lost| should be in packet number order.
172 void ExpectAcksAndLosses(bool rtt_updated, 169 void ExpectAcksAndLosses(bool rtt_updated,
173 QuicPacketNumber* packets_acked, 170 QuicPacketNumber* packets_acked,
174 size_t num_packets_acked, 171 size_t num_packets_acked,
175 QuicPacketNumber* packets_lost, 172 QuicPacketNumber* packets_lost,
176 size_t num_packets_lost) { 173 size_t num_packets_lost) {
177 vector<QuicPacketNumber> ack_vector; 174 vector<QuicPacketNumber> ack_vector;
178 for (size_t i = 0; i < num_packets_acked; ++i) { 175 for (size_t i = 0; i < num_packets_acked; ++i) {
179 ack_vector.push_back(packets_acked[i]); 176 ack_vector.push_back(packets_acked[i]);
180 } 177 }
181 vector<QuicPacketNumber> lost_vector; 178 vector<QuicPacketNumber> lost_vector;
182 for (size_t i = 0; i < num_packets_lost; ++i) { 179 for (size_t i = 0; i < num_packets_lost; ++i) {
183 lost_vector.push_back(packets_lost[i]); 180 lost_vector.push_back(packets_lost[i]);
184 } 181 }
185 EXPECT_CALL( 182 EXPECT_CALL(
186 *send_algorithm_, 183 *send_algorithm_,
187 OnCongestionEvent(rtt_updated, _, Pointwise(KeyEq(), ack_vector), 184 OnCongestionEvent(rtt_updated, _, Pointwise(KeyEq(), ack_vector),
188 Pointwise(KeyEq(), lost_vector))); 185 Pointwise(KeyEq(), lost_vector)));
189 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()) 186 EXPECT_CALL(*network_change_visitor_, OnCongestionChange())
190 .Times(AnyNumber()); 187 .Times(AnyNumber());
191 EXPECT_CALL(*network_change_visitor_, OnRttChange()).Times(AnyNumber());
192 } 188 }
193 189
194 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, 190 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number,
195 QuicPacketNumber new_packet_number) { 191 QuicPacketNumber new_packet_number) {
196 RetransmitAndSendPacket(old_packet_number, new_packet_number, 192 RetransmitAndSendPacket(old_packet_number, new_packet_number,
197 TLP_RETRANSMISSION); 193 TLP_RETRANSMISSION);
198 } 194 }
199 195
200 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, 196 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number,
201 QuicPacketNumber new_packet_number, 197 QuicPacketNumber new_packet_number,
202 TransmissionType transmission_type) { 198 TransmissionType transmission_type) {
203 QuicSentPacketManagerPeer::MarkForRetransmission( 199 QuicSentPacketManagerPeer::MarkForRetransmission(
204 &manager_, old_packet_number, transmission_type); 200 &manager_, old_packet_number, transmission_type);
205 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 201 EXPECT_TRUE(manager_.HasPendingRetransmissions());
206 PendingRetransmission next_retransmission = 202 PendingRetransmission next_retransmission =
207 manager_.NextPendingRetransmission(); 203 manager_.NextPendingRetransmission();
208 EXPECT_EQ(old_packet_number, next_retransmission.packet_number); 204 EXPECT_EQ(old_packet_number, next_retransmission.packet_number);
209 EXPECT_EQ(transmission_type, next_retransmission.transmission_type); 205 EXPECT_EQ(transmission_type, next_retransmission.transmission_type);
210 206
211 EXPECT_CALL(*send_algorithm_, 207 EXPECT_CALL(*send_algorithm_,
212 OnPacketSent(_, BytesInFlight(), new_packet_number, 208 OnPacketSent(_, BytesInFlight(), new_packet_number,
213 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 209 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
214 .WillOnce(Return(true)); 210 .WillOnce(Return(true));
215 SerializedPacket packet(CreatePacket(new_packet_number, false)); 211 SerializedPacket packet(CreatePacket(new_packet_number, false));
216 manager_.OnPacketSent(&packet, old_packet_number, clock_.Now(), 212 manager_.OnPacketSent(&packet, packet.path_id, old_packet_number,
217 transmission_type, HAS_RETRANSMITTABLE_DATA); 213 clock_.Now(), transmission_type,
214 HAS_RETRANSMITTABLE_DATA);
218 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 215 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_,
219 new_packet_number)); 216 new_packet_number));
220 } 217 }
221 218
222 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { 219 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) {
223 return CreatePacket(packet_number, true); 220 return CreatePacket(packet_number, true);
224 } 221 }
225 222
226 SerializedPacket CreatePacket(QuicPacketNumber packet_number, 223 SerializedPacket CreatePacket(QuicPacketNumber packet_number,
227 bool retransmittable) { 224 bool retransmittable) {
228 SerializedPacket packet(kDefaultPathId, packet_number, 225 SerializedPacket packet(kDefaultPathId, packet_number,
229 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, 226 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength,
230 0u, false, false); 227 0u, false, false);
231 if (retransmittable) { 228 if (retransmittable) {
232 packet.retransmittable_frames.push_back( 229 packet.retransmittable_frames.push_back(
233 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece()))); 230 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece())));
234 } 231 }
235 return packet; 232 return packet;
236 } 233 }
237 234
238 void SendDataPacket(QuicPacketNumber packet_number) { 235 void SendDataPacket(QuicPacketNumber packet_number) {
239 EXPECT_CALL(*send_algorithm_, 236 EXPECT_CALL(*send_algorithm_,
240 OnPacketSent(_, BytesInFlight(), packet_number, _, _)) 237 OnPacketSent(_, BytesInFlight(), packet_number, _, _))
241 .Times(1) 238 .Times(1)
242 .WillOnce(Return(true)); 239 .WillOnce(Return(true));
243 SerializedPacket packet(CreateDataPacket(packet_number)); 240 SerializedPacket packet(CreateDataPacket(packet_number));
244 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, 241 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
245 HAS_RETRANSMITTABLE_DATA); 242 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
246 } 243 }
247 244
248 void SendCryptoPacket(QuicPacketNumber packet_number) { 245 void SendCryptoPacket(QuicPacketNumber packet_number) {
249 EXPECT_CALL(*send_algorithm_, 246 EXPECT_CALL(*send_algorithm_,
250 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, 247 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength,
251 HAS_RETRANSMITTABLE_DATA)) 248 HAS_RETRANSMITTABLE_DATA))
252 .Times(1) 249 .Times(1)
253 .WillOnce(Return(true)); 250 .WillOnce(Return(true));
254 SerializedPacket packet(CreateDataPacket(packet_number)); 251 SerializedPacket packet(CreateDataPacket(packet_number));
255 packet.retransmittable_frames.push_back( 252 packet.retransmittable_frames.push_back(
256 QuicFrame(new QuicStreamFrame(1, false, 0, StringPiece()))); 253 QuicFrame(new QuicStreamFrame(1, false, 0, StringPiece())));
257 packet.has_crypto_handshake = IS_HANDSHAKE; 254 packet.has_crypto_handshake = IS_HANDSHAKE;
258 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, 255 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
259 HAS_RETRANSMITTABLE_DATA); 256 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
260 } 257 }
261 258
262 void SendAckPacket(QuicPacketNumber packet_number) { 259 void SendAckPacket(QuicPacketNumber packet_number) {
263 EXPECT_CALL(*send_algorithm_, 260 EXPECT_CALL(*send_algorithm_,
264 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, 261 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength,
265 NO_RETRANSMITTABLE_DATA)) 262 NO_RETRANSMITTABLE_DATA))
266 .Times(1) 263 .Times(1)
267 .WillOnce(Return(false)); 264 .WillOnce(Return(false));
268 SerializedPacket packet(CreatePacket(packet_number, false)); 265 SerializedPacket packet(CreatePacket(packet_number, false));
269 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, 266 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
270 NO_RETRANSMITTABLE_DATA); 267 NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA);
271 } 268 }
272 269
273 // Based on QuicConnection's WritePendingRetransmissions. 270 // Based on QuicConnection's WritePendingRetransmissions.
274 void RetransmitNextPacket(QuicPacketNumber retransmission_packet_number) { 271 void RetransmitNextPacket(QuicPacketNumber retransmission_packet_number) {
275 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 272 EXPECT_TRUE(manager_.HasPendingRetransmissions());
276 EXPECT_CALL(*send_algorithm_, 273 EXPECT_CALL(*send_algorithm_,
277 OnPacketSent(_, _, retransmission_packet_number, kDefaultLength, 274 OnPacketSent(_, _, retransmission_packet_number, kDefaultLength,
278 HAS_RETRANSMITTABLE_DATA)) 275 HAS_RETRANSMITTABLE_DATA))
279 .Times(1) 276 .Times(1)
280 .WillOnce(Return(true)); 277 .WillOnce(Return(true));
281 const PendingRetransmission pending = manager_.NextPendingRetransmission(); 278 const PendingRetransmission pending = manager_.NextPendingRetransmission();
282 SerializedPacket packet(CreatePacket(retransmission_packet_number, false)); 279 SerializedPacket packet(CreatePacket(retransmission_packet_number, false));
283 manager_.OnPacketSent(&packet, pending.packet_number, clock_.Now(), 280 manager_.OnPacketSent(&packet, pending.path_id, pending.packet_number,
284 pending.transmission_type, HAS_RETRANSMITTABLE_DATA); 281 clock_.Now(), pending.transmission_type,
282 HAS_RETRANSMITTABLE_DATA);
285 } 283 }
286 284
287 // Initialize a frame acknowledging all packets up to largest_observed. 285 // Initialize a frame acknowledging all packets up to largest_observed.
288 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) { 286 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) {
289 QuicAckFrame frame(MakeAckFrame(largest_observed)); 287 QuicAckFrame frame(MakeAckFrame(largest_observed));
290 frame.missing = GetParam().missing; 288 frame.missing = GetParam().missing;
291 if (!GetParam().missing) { 289 if (!GetParam().missing) {
292 if (largest_observed > 0) { 290 if (largest_observed > 0) {
293 frame.packets.Add(1, largest_observed + 1); 291 frame.packets.Add(1, largest_observed + 1);
294 } 292 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 455 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
458 } 456 }
459 457
460 TEST_P(QuicSentPacketManagerTest, 458 TEST_P(QuicSentPacketManagerTest,
461 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) { 459 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) {
462 SendDataPacket(1); 460 SendDataPacket(1);
463 RetransmitAndSendPacket(1, 2); 461 RetransmitAndSendPacket(1, 2);
464 462
465 // Fire the RTO, which will mark 2 for retransmission (but will not send it). 463 // Fire the RTO, which will mark 2 for retransmission (but will not send it).
466 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 464 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
467 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 465 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
468 manager_.OnRetransmissionTimeout(); 466 manager_.OnRetransmissionTimeout();
469 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 467 EXPECT_TRUE(manager_.HasPendingRetransmissions());
470 468
471 // Ack 1 but not 2, before 2 is able to be sent. 469 // Ack 1 but not 2, before 2 is able to be sent.
472 // Since 1 has been retransmitted, it has already been lost, and so the 470 // Since 1 has been retransmitted, it has already been lost, and so the
473 // send algorithm is not informed that it has been ACK'd. 471 // send algorithm is not informed that it has been ACK'd.
474 QuicAckFrame ack_frame = InitAckFrame(1); 472 QuicAckFrame ack_frame = InitAckFrame(1);
475 ExpectUpdatedRtt(1); 473 ExpectUpdatedRtt(1);
476 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); 474 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
477 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 475 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called. 817 // Send and Ack the RTO and ensure OnRetransmissionTimeout is called.
820 EXPECT_EQ(102 * kDefaultLength, 818 EXPECT_EQ(102 * kDefaultLength,
821 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 819 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
822 820
823 RetransmitNextPacket(103); 821 RetransmitNextPacket(103);
824 QuicAckFrame ack_frame = InitAckFrame(103); 822 QuicAckFrame ack_frame = InitAckFrame(103);
825 NackPackets(0, 103, &ack_frame); 823 NackPackets(0, 103, &ack_frame);
826 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 824 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
827 EXPECT_CALL(*send_algorithm_, 825 EXPECT_CALL(*send_algorithm_,
828 OnCongestionEvent(true, _, ElementsAre(Pair(103, _)), _)); 826 OnCongestionEvent(true, _, ElementsAre(Pair(103, _)), _));
829 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 827 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
830 EXPECT_CALL(*network_change_visitor_, OnRttChange());
831 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 828 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
832 // All packets before 103 should be lost. 829 // All packets before 103 should be lost.
833 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 830 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
834 } 831 }
835 832
836 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { 833 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeout) {
837 // Send 2 crypto packets and 3 data packets. 834 // Send 2 crypto packets and 3 data packets.
838 const size_t kNumSentCryptoPackets = 2; 835 const size_t kNumSentCryptoPackets = 2;
839 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 836 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
840 SendCryptoPacket(i); 837 SendCryptoPacket(i);
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1040 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1044 1041
1045 // Ack a retransmission. 1042 // Ack a retransmission.
1046 QuicAckFrame ack_frame = InitAckFrame(102); 1043 QuicAckFrame ack_frame = InitAckFrame(102);
1047 NackPackets(0, 102, &ack_frame); 1044 NackPackets(0, 102, &ack_frame);
1048 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 1045 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
1049 // Ensure no packets are lost. 1046 // Ensure no packets are lost.
1050 EXPECT_CALL(*send_algorithm_, 1047 EXPECT_CALL(*send_algorithm_,
1051 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), 1048 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)),
1052 /*lost_packets=*/IsEmpty())); 1049 /*lost_packets=*/IsEmpty()));
1053 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1050 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1054 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1055 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1051 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1056 // RTO's use loss detection instead of immediately declaring retransmitted 1052 // RTO's use loss detection instead of immediately declaring retransmitted
1057 // packets lost. 1053 // packets lost.
1058 for (int i = 1; i <= 99; ++i) { 1054 for (int i = 1; i <= 99; ++i) {
1059 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _)); 1055 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _));
1060 } 1056 }
1061 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1057 manager_.OnIncomingAck(ack_frame, clock_.Now());
1062 } 1058 }
1063 1059
1064 TEST_P(QuicSentPacketManagerTest, NewRetransmissionTimeout) { 1060 TEST_P(QuicSentPacketManagerTest, NewRetransmissionTimeout) {
1065 QuicConfig client_config; 1061 QuicConfig client_config;
1066 QuicTagVector options; 1062 QuicTagVector options;
1067 options.push_back(kNRTO); 1063 options.push_back(kNRTO);
1068 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1064 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1069 client_config.SetConnectionOptionsToSend(options); 1065 client_config.SetConnectionOptionsToSend(options);
1070 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1066 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1071 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1072 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1067 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1073 EXPECT_CALL(*send_algorithm_, PacingRate()) 1068 EXPECT_CALL(*send_algorithm_, PacingRate())
1074 .WillRepeatedly(Return(QuicBandwidth::Zero())); 1069 .WillRepeatedly(Return(QuicBandwidth::Zero()));
1075 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) 1070 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
1076 .WillOnce(Return(10 * kDefaultTCPMSS)); 1071 .WillOnce(Return(10 * kDefaultTCPMSS));
1077 manager_.SetFromConfig(client_config); 1072 manager_.SetFromConfig(client_config);
1078 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1073 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1079 1074
1080 // Send 100 packets. 1075 // Send 100 packets.
1081 const size_t kNumSentPackets = 100; 1076 const size_t kNumSentPackets = 100;
(...skipping 11 matching lines...) Expand all
1093 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1088 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1094 1089
1095 // Ack a retransmission and expect no call to OnRetransmissionTimeout. 1090 // Ack a retransmission and expect no call to OnRetransmissionTimeout.
1096 QuicAckFrame ack_frame = InitAckFrame(102); 1091 QuicAckFrame ack_frame = InitAckFrame(102);
1097 NackPackets(0, 102, &ack_frame); 1092 NackPackets(0, 102, &ack_frame);
1098 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 1093 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
1099 // This will include packets in the lost packet map. 1094 // This will include packets in the lost packet map.
1100 EXPECT_CALL(*send_algorithm_, 1095 EXPECT_CALL(*send_algorithm_,
1101 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)), 1096 OnCongestionEvent(true, _, ElementsAre(Pair(102, _)),
1102 /*lost_packets=*/Not(IsEmpty()))); 1097 /*lost_packets=*/Not(IsEmpty())));
1103 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1098 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1104 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1105 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1099 manager_.OnIncomingAck(ack_frame, clock_.Now());
1106 } 1100 }
1107 1101
1108 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) { 1102 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) {
1109 // Send 1 packet. 1103 // Send 1 packet.
1110 SendDataPacket(1); 1104 SendDataPacket(1);
1111 1105
1112 manager_.OnRetransmissionTimeout(); 1106 manager_.OnRetransmissionTimeout();
1113 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1107 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1114 EXPECT_EQ(kDefaultLength, 1108 EXPECT_EQ(kDefaultLength,
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 1377
1384 TEST_P(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { 1378 TEST_P(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) {
1385 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) 1379 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_)
1386 ->GetLossDetectionType()); 1380 ->GetLossDetectionType());
1387 1381
1388 QuicConfig config; 1382 QuicConfig config;
1389 QuicTagVector options; 1383 QuicTagVector options;
1390 options.push_back(kTIME); 1384 options.push_back(kTIME);
1391 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1385 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1392 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1386 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1393 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1387 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1394 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1395 manager_.SetFromConfig(config); 1388 manager_.SetFromConfig(config);
1396 1389
1397 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) 1390 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_)
1398 ->GetLossDetectionType()); 1391 ->GetLossDetectionType());
1399 } 1392 }
1400 1393
1401 TEST_P(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) { 1394 TEST_P(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) {
1402 FLAGS_quic_allow_bbr = true; 1395 FLAGS_quic_allow_bbr = true;
1403 QuicConfig config; 1396 QuicConfig config;
1404 QuicTagVector options; 1397 QuicTagVector options;
1405 1398
1406 options.push_back(kRENO); 1399 options.push_back(kRENO);
1407 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1400 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1408 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1401 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1409 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1410 manager_.SetFromConfig(config); 1402 manager_.SetFromConfig(config);
1411 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) 1403 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_)
1412 ->GetCongestionControlType()); 1404 ->GetCongestionControlType());
1413 1405
1414 // TODO(rtenneti): Enable the following code after BBR code is checked in. 1406 // TODO(rtenneti): Enable the following code after BBR code is checked in.
1415 #if 0 1407 #if 0
1416 options.clear(); 1408 options.clear();
1417 options.push_back(kTBBR); 1409 options.push_back(kTBBR);
1418 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1410 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1419 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1411 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1420 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1421 manager_.SetFromConfig(config); 1412 manager_.SetFromConfig(config);
1422 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm( 1413 EXPECT_EQ(kBBR, QuicSentPacketManagerPeer::GetSendAlgorithm(
1423 manager_)->GetCongestionControlType()); 1414 manager_)->GetCongestionControlType());
1424 #endif 1415 #endif
1425 1416
1426 options.clear(); 1417 options.clear();
1427 options.push_back(kBYTE); 1418 options.push_back(kBYTE);
1428 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1419 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1429 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1420 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1430 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1431 manager_.SetFromConfig(config); 1421 manager_.SetFromConfig(config);
1432 EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) 1422 EXPECT_EQ(kCubicBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_)
1433 ->GetCongestionControlType()); 1423 ->GetCongestionControlType());
1434 1424
1435 options.clear(); 1425 options.clear();
1436 options.push_back(kRENO); 1426 options.push_back(kRENO);
1437 options.push_back(kBYTE); 1427 options.push_back(kBYTE);
1438 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1428 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1439 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1429 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1440 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1441 manager_.SetFromConfig(config); 1430 manager_.SetFromConfig(config);
1442 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) 1431 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_)
1443 ->GetCongestionControlType()); 1432 ->GetCongestionControlType());
1444 } 1433 }
1445 1434
1446 TEST_P(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { 1435 TEST_P(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) {
1447 QuicConfig config; 1436 QuicConfig config;
1448 QuicTagVector options; 1437 QuicTagVector options;
1449 1438
1450 options.push_back(k1CON); 1439 options.push_back(k1CON);
1451 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1440 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1452 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1441 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1453 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1454 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); 1442 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1));
1455 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1443 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1456 manager_.SetFromConfig(config); 1444 manager_.SetFromConfig(config);
1457 1445
1458 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1446 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1459 QuicConfig client_config; 1447 QuicConfig client_config;
1460 client_config.SetConnectionOptionsToSend(options); 1448 client_config.SetConnectionOptionsToSend(options);
1461 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1449 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1462 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1463 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); 1450 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1));
1464 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1451 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1465 manager_.SetFromConfig(client_config); 1452 manager_.SetFromConfig(client_config);
1466 } 1453 }
1467 1454
1468 TEST_P(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) { 1455 TEST_P(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) {
1469 // By default, changing the number of open streams does nothing. 1456 // By default, changing the number of open streams does nothing.
1470 manager_.SetNumOpenStreams(5); 1457 manager_.SetNumOpenStreams(5);
1471 1458
1472 QuicConfig config; 1459 QuicConfig config;
1473 QuicTagVector options; 1460 QuicTagVector options;
1474 1461
1475 options.push_back(kNCON); 1462 options.push_back(kNCON);
1476 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1463 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1477 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1464 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1478 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1479 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1465 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1480 manager_.SetFromConfig(config); 1466 manager_.SetFromConfig(config);
1481 1467
1482 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5)); 1468 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5));
1483 manager_.SetNumOpenStreams(5); 1469 manager_.SetNumOpenStreams(5);
1484 } 1470 }
1485 1471
1486 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) { 1472 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) {
1487 QuicConfig config; 1473 QuicConfig config;
1488 QuicTagVector options; 1474 QuicTagVector options;
1489 1475
1490 options.push_back(kNTLP); 1476 options.push_back(kNTLP);
1491 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1477 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1492 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1478 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1493 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1494 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1479 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1495 manager_.SetFromConfig(config); 1480 manager_.SetFromConfig(config);
1496 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); 1481 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_));
1497 } 1482 }
1498 1483
1499 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) { 1484 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) {
1500 QuicConfig client_config; 1485 QuicConfig client_config;
1501 QuicTagVector options; 1486 QuicTagVector options;
1502 1487
1503 options.push_back(kNTLP); 1488 options.push_back(kNTLP);
1504 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1489 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1505 client_config.SetConnectionOptionsToSend(options); 1490 client_config.SetConnectionOptionsToSend(options);
1506 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1491 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1507 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1508 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1492 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1509 manager_.SetFromConfig(client_config); 1493 manager_.SetFromConfig(client_config);
1510 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); 1494 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_));
1511 } 1495 }
1512 1496
1513 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) { 1497 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) {
1514 QuicConfig config; 1498 QuicConfig config;
1515 QuicTagVector options; 1499 QuicTagVector options;
1516 1500
1517 options.push_back(kTLPR); 1501 options.push_back(kTLPR);
1518 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1502 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1519 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1503 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1520 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1521 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1504 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1522 manager_.SetFromConfig(config); 1505 manager_.SetFromConfig(config);
1523 EXPECT_TRUE( 1506 EXPECT_TRUE(
1524 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); 1507 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_));
1525 } 1508 }
1526 1509
1527 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) { 1510 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) {
1528 QuicConfig client_config; 1511 QuicConfig client_config;
1529 QuicTagVector options; 1512 QuicTagVector options;
1530 1513
1531 options.push_back(kTLPR); 1514 options.push_back(kTLPR);
1532 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1515 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1533 client_config.SetConnectionOptionsToSend(options); 1516 client_config.SetConnectionOptionsToSend(options);
1534 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1517 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1535 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1536 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1518 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1537 manager_.SetFromConfig(client_config); 1519 manager_.SetFromConfig(client_config);
1538 EXPECT_TRUE( 1520 EXPECT_TRUE(
1539 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); 1521 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_));
1540 } 1522 }
1541 1523
1542 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) { 1524 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) {
1543 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1525 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1544 QuicConfig config; 1526 QuicConfig config;
1545 QuicTagVector options; 1527 QuicTagVector options;
1546 1528
1547 options.push_back(kNRTO); 1529 options.push_back(kNRTO);
1548 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1530 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1549 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1531 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1550 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1551 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1532 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1552 manager_.SetFromConfig(config); 1533 manager_.SetFromConfig(config);
1553 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1534 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1554 } 1535 }
1555 1536
1556 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) { 1537 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) {
1557 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1538 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1558 QuicConfig client_config; 1539 QuicConfig client_config;
1559 QuicTagVector options; 1540 QuicTagVector options;
1560 1541
1561 options.push_back(kNRTO); 1542 options.push_back(kNRTO);
1562 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1543 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1563 client_config.SetConnectionOptionsToSend(options); 1544 client_config.SetConnectionOptionsToSend(options);
1564 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1545 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1565 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1566 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1546 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1567 manager_.SetFromConfig(client_config); 1547 manager_.SetFromConfig(client_config);
1568 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1548 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1569 } 1549 }
1570 1550
1571 TEST_P(QuicSentPacketManagerTest, 1551 TEST_P(QuicSentPacketManagerTest,
1572 NegotiateConservativeReceiveWindowFromOptions) { 1552 NegotiateConservativeReceiveWindowFromOptions) {
1573 EXPECT_EQ(kDefaultSocketReceiveBuffer, 1553 EXPECT_EQ(kDefaultSocketReceiveBuffer,
1574 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); 1554 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_));
1575 1555
1576 // Try to set a size below the minimum and ensure it gets set to the min. 1556 // Try to set a size below the minimum and ensure it gets set to the min.
1577 QuicConfig client_config; 1557 QuicConfig client_config;
1578 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); 1558 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024);
1579 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1559 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1580 EXPECT_CALL(*send_algorithm_, 1560 EXPECT_CALL(*send_algorithm_,
1581 SetMaxCongestionWindow(kMinSocketReceiveBuffer * 0.6)); 1561 SetMaxCongestionWindow(kMinSocketReceiveBuffer * 0.6));
1582 EXPECT_CALL(*send_algorithm_, PacingRate()) 1562 EXPECT_CALL(*send_algorithm_, PacingRate())
1583 .WillRepeatedly(Return(QuicBandwidth::Zero())); 1563 .WillRepeatedly(Return(QuicBandwidth::Zero()));
1584 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) 1564 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
1585 .WillOnce(Return(10 * kDefaultTCPMSS)); 1565 .WillOnce(Return(10 * kDefaultTCPMSS));
1586 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1566 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1587 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1588 manager_.SetFromConfig(client_config); 1567 manager_.SetFromConfig(client_config);
1589 1568
1590 EXPECT_EQ(kMinSocketReceiveBuffer, 1569 EXPECT_EQ(kMinSocketReceiveBuffer,
1591 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); 1570 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_));
1592 1571
1593 // Ensure the smaller send window only allows 16 packets to be sent. 1572 // Ensure the smaller send window only allows 16 packets to be sent.
1594 for (QuicPacketNumber i = 1; i <= 16; ++i) { 1573 for (QuicPacketNumber i = 1; i <= 16; ++i) {
1595 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 1574 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1596 .WillOnce(Return(QuicTime::Delta::Zero())); 1575 .WillOnce(Return(QuicTime::Delta::Zero()));
1597 EXPECT_EQ(QuicTime::Delta::Zero(), 1576 EXPECT_EQ(QuicTime::Delta::Zero(),
1598 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); 1577 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1599 EXPECT_CALL(*send_algorithm_, 1578 EXPECT_CALL(*send_algorithm_,
1600 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, 1579 OnPacketSent(_, BytesInFlight(), i, kDefaultLength,
1601 HAS_RETRANSMITTABLE_DATA)) 1580 HAS_RETRANSMITTABLE_DATA))
1602 .WillOnce(Return(true)); 1581 .WillOnce(Return(true));
1603 SerializedPacket packet(CreatePacket(i, true)); 1582 SerializedPacket packet(CreatePacket(i, true));
1604 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, 1583 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
1605 HAS_RETRANSMITTABLE_DATA); 1584 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
1606 } 1585 }
1607 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 1586 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1608 .WillOnce(Return(QuicTime::Delta::Infinite())); 1587 .WillOnce(Return(QuicTime::Delta::Infinite()));
1609 EXPECT_EQ(QuicTime::Delta::Infinite(), 1588 EXPECT_EQ(QuicTime::Delta::Infinite(),
1610 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); 1589 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1611 } 1590 }
1612 1591
1613 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) { 1592 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) {
1614 EXPECT_EQ(kDefaultSocketReceiveBuffer, 1593 EXPECT_EQ(kDefaultSocketReceiveBuffer,
1615 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); 1594 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_));
1616 1595
1617 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. 1596 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent.
1618 for (QuicPacketNumber i = 1; i <= 244; ++i) { 1597 for (QuicPacketNumber i = 1; i <= 244; ++i) {
1619 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 1598 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1620 .WillOnce(Return(QuicTime::Delta::Zero())); 1599 .WillOnce(Return(QuicTime::Delta::Zero()));
1621 EXPECT_EQ(QuicTime::Delta::Zero(), 1600 EXPECT_EQ(QuicTime::Delta::Zero(),
1622 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); 1601 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1623 EXPECT_CALL(*send_algorithm_, 1602 EXPECT_CALL(*send_algorithm_,
1624 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, 1603 OnPacketSent(_, BytesInFlight(), i, kDefaultLength,
1625 HAS_RETRANSMITTABLE_DATA)) 1604 HAS_RETRANSMITTABLE_DATA))
1626 .WillOnce(Return(true)); 1605 .WillOnce(Return(true));
1627 SerializedPacket packet(CreatePacket(i, true)); 1606 SerializedPacket packet(CreatePacket(i, true));
1628 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, 1607 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
1629 HAS_RETRANSMITTABLE_DATA); 1608 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
1630 } 1609 }
1631 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 1610 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1632 .WillOnce(Return(QuicTime::Delta::Infinite())); 1611 .WillOnce(Return(QuicTime::Delta::Infinite()));
1633 EXPECT_EQ(QuicTime::Delta::Infinite(), 1612 EXPECT_EQ(QuicTime::Delta::Infinite(),
1634 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); 1613 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1635 } 1614 }
1636 1615
1637 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { 1616 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) {
1638 uint32_t initial_rtt_us = 325000; 1617 uint32_t initial_rtt_us = 325000;
1639 EXPECT_NE(initial_rtt_us, 1618 EXPECT_NE(initial_rtt_us,
1640 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); 1619 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds());
1641 1620
1642 QuicConfig config; 1621 QuicConfig config;
1643 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); 1622 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us);
1644 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1623 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1645 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); 1624 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1646 EXPECT_CALL(*network_change_visitor_, OnRttChange());
1647 manager_.SetFromConfig(config); 1625 manager_.SetFromConfig(config);
1648 1626
1649 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); 1627 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds());
1650 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us()); 1628 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us());
1651 } 1629 }
1652 1630
1653 TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) { 1631 TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) {
1654 // The sent packet manager should use the RTT from CachedNetworkParameters if 1632 // The sent packet manager should use the RTT from CachedNetworkParameters if
1655 // it is provided. 1633 // it is provided.
1656 const int kRttMs = 1234; 1634 const int kRttMs = 1234;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1714 manager_.OnConnectionMigration(PORT_CHANGE); 1692 manager_.OnConnectionMigration(PORT_CHANGE);
1715 1693
1716 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); 1694 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
1717 EXPECT_EQ(1u, manager_.consecutive_rto_count()); 1695 EXPECT_EQ(1u, manager_.consecutive_rto_count());
1718 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); 1696 EXPECT_EQ(2u, manager_.consecutive_tlp_count());
1719 } 1697 }
1720 1698
1721 } // namespace 1699 } // namespace
1722 } // namespace test 1700 } // namespace test
1723 } // namespace net 1701 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698