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

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

Issue 593193004: Call QuicSentPacketManager's OnPacketSent method and make (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Change_the_return_type_75724127
Patch Set: Created 6 years, 2 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/test_tools/quic_test_utils.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 "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/quic_flags.h" 8 #include "net/quic/quic_flags.h"
9 #include "net/quic/test_tools/quic_config_peer.h" 9 #include "net/quic/test_tools/quic_config_peer.h"
10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 EXPECT_CALL(*send_algorithm_, 141 EXPECT_CALL(*send_algorithm_,
142 OnCongestionEvent(rtt_updated, _, 142 OnCongestionEvent(rtt_updated, _,
143 Pointwise(KeyEq(), ack_vector), 143 Pointwise(KeyEq(), ack_vector),
144 Pointwise(KeyEq(), lost_vector))); 144 Pointwise(KeyEq(), lost_vector)));
145 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) 145 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
146 .WillRepeatedly(Return(100 * kDefaultTCPMSS)); 146 .WillRepeatedly(Return(100 * kDefaultTCPMSS));
147 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)). 147 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)).
148 Times(AnyNumber()); 148 Times(AnyNumber());
149 } 149 }
150 150
151 // Retransmits a packet as though it was a TLP retransmission, because TLP 151 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number,
152 // leaves the |old_sequence_number| pending. 152 QuicPacketSequenceNumber new_sequence_number) {
153 // TODO(ianswett): Test with transmission types besides TLP.
154 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number,
155 QuicPacketSequenceNumber new_sequence_number) {
156 QuicSentPacketManagerPeer::MarkForRetransmission( 153 QuicSentPacketManagerPeer::MarkForRetransmission(
157 &manager_, old_sequence_number, TLP_RETRANSMISSION); 154 &manager_, old_sequence_number, TLP_RETRANSMISSION);
158 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 155 EXPECT_TRUE(manager_.HasPendingRetransmissions());
159 QuicSentPacketManager::PendingRetransmission next_retransmission = 156 QuicSentPacketManager::PendingRetransmission next_retransmission =
160 manager_.NextPendingRetransmission(); 157 manager_.NextPendingRetransmission();
161 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); 158 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number);
162 EXPECT_EQ(TLP_RETRANSMISSION, 159 EXPECT_EQ(TLP_RETRANSMISSION,
163 next_retransmission.transmission_type); 160 next_retransmission.transmission_type);
164 manager_.OnRetransmittedPacket(old_sequence_number,
165 new_sequence_number);
166 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(
167 &manager_, new_sequence_number));
168 }
169
170 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number,
171 QuicPacketSequenceNumber new_sequence_number) {
172 RetransmitPacket(old_sequence_number, new_sequence_number);
173 161
174 EXPECT_CALL(*send_algorithm_, 162 EXPECT_CALL(*send_algorithm_,
175 OnPacketSent(_, BytesInFlight(), new_sequence_number, 163 OnPacketSent(_, BytesInFlight(), new_sequence_number,
176 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 164 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
177 .WillOnce(Return(true)); 165 .WillOnce(Return(true));
178 manager_.OnPacketSent(new_sequence_number, 166 SerializedPacket packet(CreatePacket(new_sequence_number, false));
167 manager_.OnPacketSent(&packet,
168 old_sequence_number,
179 clock_.Now(), 169 clock_.Now(),
180 kDefaultLength, 170 kDefaultLength,
181 LOSS_RETRANSMISSION, 171 LOSS_RETRANSMISSION,
182 HAS_RETRANSMITTABLE_DATA); 172 HAS_RETRANSMITTABLE_DATA);
173 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(
174 &manager_, new_sequence_number));
183 } 175 }
184 176
185 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { 177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) {
186 return CreatePacket(sequence_number, true); 178 return CreatePacket(sequence_number, true);
187 } 179 }
188 180
189 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, 181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number,
190 bool retransmittable) { 182 bool retransmittable) {
191 packets_.push_back(QuicPacket::NewDataPacket( 183 packets_.push_back(QuicPacket::NewDataPacket(
192 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, 184 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false,
(...skipping 10 matching lines...) Expand all
203 PACKET_6BYTE_SEQUENCE_NUMBER)); 195 PACKET_6BYTE_SEQUENCE_NUMBER));
204 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 196 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER,
205 packets_.back(), 0u, NULL); 197 packets_.back(), 0u, NULL);
206 } 198 }
207 199
208 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { 200 void SendDataPacket(QuicPacketSequenceNumber sequence_number) {
209 EXPECT_CALL(*send_algorithm_, 201 EXPECT_CALL(*send_algorithm_,
210 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) 202 OnPacketSent(_, BytesInFlight(), sequence_number, _, _))
211 .Times(1).WillOnce(Return(true)); 203 .Times(1).WillOnce(Return(true));
212 SerializedPacket packet(CreateDataPacket(sequence_number)); 204 SerializedPacket packet(CreateDataPacket(sequence_number));
213 manager_.OnSerializedPacket(packet); 205 manager_.OnPacketSent(&packet, 0, clock_.Now(),
214 manager_.OnPacketSent(sequence_number, clock_.Now(),
215 packet.packet->length(), NOT_RETRANSMISSION, 206 packet.packet->length(), NOT_RETRANSMISSION,
216 HAS_RETRANSMITTABLE_DATA); 207 HAS_RETRANSMITTABLE_DATA);
217 } 208 }
218 209
219 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { 210 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) {
220 EXPECT_CALL(*send_algorithm_, 211 EXPECT_CALL(*send_algorithm_,
221 OnPacketSent(_, BytesInFlight(), sequence_number, 212 OnPacketSent(_, BytesInFlight(), sequence_number,
222 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 213 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
223 .Times(1).WillOnce(Return(true)); 214 .Times(1).WillOnce(Return(true));
224 SerializedPacket packet(CreateDataPacket(sequence_number)); 215 SerializedPacket packet(CreateDataPacket(sequence_number));
225 packet.retransmittable_frames->AddStreamFrame( 216 packet.retransmittable_frames->AddStreamFrame(
226 new QuicStreamFrame(1, false, 0, IOVector())); 217 new QuicStreamFrame(1, false, 0, IOVector()));
227 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE); 218 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE);
228 manager_.OnSerializedPacket(packet); 219 manager_.OnPacketSent(&packet, 0, clock_.Now(),
229 manager_.OnPacketSent(sequence_number, clock_.Now(),
230 packet.packet->length(), NOT_RETRANSMISSION, 220 packet.packet->length(), NOT_RETRANSMISSION,
231 HAS_RETRANSMITTABLE_DATA); 221 HAS_RETRANSMITTABLE_DATA);
232 } 222 }
233 223
234 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { 224 void SendFecPacket(QuicPacketSequenceNumber sequence_number) {
235 EXPECT_CALL(*send_algorithm_, 225 EXPECT_CALL(*send_algorithm_,
236 OnPacketSent(_, BytesInFlight(), sequence_number, 226 OnPacketSent(_, BytesInFlight(), sequence_number,
237 kDefaultLength, NO_RETRANSMITTABLE_DATA)) 227 kDefaultLength, NO_RETRANSMITTABLE_DATA))
238 .Times(1).WillOnce(Return(true)); 228 .Times(1).WillOnce(Return(true));
239 SerializedPacket packet(CreateFecPacket(sequence_number)); 229 SerializedPacket packet(CreateFecPacket(sequence_number));
240 manager_.OnSerializedPacket(packet); 230 manager_.OnPacketSent(&packet, 0, clock_.Now(),
241 manager_.OnPacketSent(sequence_number, clock_.Now(),
242 packet.packet->length(), NOT_RETRANSMISSION, 231 packet.packet->length(), NOT_RETRANSMISSION,
243 NO_RETRANSMITTABLE_DATA); 232 NO_RETRANSMITTABLE_DATA);
244 } 233 }
245 234
246 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { 235 void SendAckPacket(QuicPacketSequenceNumber sequence_number) {
247 EXPECT_CALL(*send_algorithm_, 236 EXPECT_CALL(*send_algorithm_,
248 OnPacketSent(_, BytesInFlight(), sequence_number, 237 OnPacketSent(_, BytesInFlight(), sequence_number,
249 kDefaultLength, NO_RETRANSMITTABLE_DATA)) 238 kDefaultLength, NO_RETRANSMITTABLE_DATA))
250 .Times(1).WillOnce(Return(false)); 239 .Times(1).WillOnce(Return(false));
251 SerializedPacket packet(CreatePacket(sequence_number, false)); 240 SerializedPacket packet(CreatePacket(sequence_number, false));
252 manager_.OnSerializedPacket(packet); 241 manager_.OnPacketSent(&packet, 0, clock_.Now(),
253 manager_.OnPacketSent(sequence_number, clock_.Now(),
254 packet.packet->length(), NOT_RETRANSMISSION, 242 packet.packet->length(), NOT_RETRANSMISSION,
255 NO_RETRANSMITTABLE_DATA); 243 NO_RETRANSMITTABLE_DATA);
256 } 244 }
257 245
258 // Based on QuicConnection's WritePendingRetransmissions. 246 // Based on QuicConnection's WritePendingRetransmissions.
259 void RetransmitNextPacket( 247 void RetransmitNextPacket(
260 QuicPacketSequenceNumber retransmission_sequence_number) { 248 QuicPacketSequenceNumber retransmission_sequence_number) {
261 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 249 EXPECT_TRUE(manager_.HasPendingRetransmissions());
262 EXPECT_CALL(*send_algorithm_, 250 EXPECT_CALL(*send_algorithm_,
263 OnPacketSent(_, _, retransmission_sequence_number, 251 OnPacketSent(_, _, retransmission_sequence_number,
264 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 252 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
265 .Times(1).WillOnce(Return(true)); 253 .Times(1).WillOnce(Return(true));
266 const QuicSentPacketManager::PendingRetransmission pending = 254 const QuicSentPacketManager::PendingRetransmission pending =
267 manager_.NextPendingRetransmission(); 255 manager_.NextPendingRetransmission();
268 manager_.OnRetransmittedPacket(pending.sequence_number, 256 SerializedPacket packet(
269 retransmission_sequence_number); 257 CreatePacket(retransmission_sequence_number, false));
270 manager_.OnPacketSent(retransmission_sequence_number, clock_.Now(), 258 manager_.OnPacketSent(&packet, pending.sequence_number, clock_.Now(),
271 kDefaultLength, pending.transmission_type, 259 kDefaultLength, pending.transmission_type,
272 HAS_RETRANSMITTABLE_DATA); 260 HAS_RETRANSMITTABLE_DATA);
273 } 261 }
274 262
275 QuicSentPacketManager manager_; 263 QuicSentPacketManager manager_;
276 vector<QuicPacket*> packets_; 264 vector<QuicPacket*> packets_;
277 MockClock clock_; 265 MockClock clock_;
278 QuicConnectionStats stats_; 266 QuicConnectionStats stats_;
279 MockSendAlgorithm* send_algorithm_; 267 MockSendAlgorithm* send_algorithm_;
280 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; 268 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_;
281 }; 269 };
282 270
283 TEST_F(QuicSentPacketManagerTest, IsUnacked) { 271 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
284 VerifyUnackedPackets(NULL, 0); 272 VerifyUnackedPackets(NULL, 0);
285 SendDataPacket(1); 273 SendDataPacket(1);
286 274
287 QuicPacketSequenceNumber unacked[] = { 1 }; 275 QuicPacketSequenceNumber unacked[] = { 1 };
288 VerifyUnackedPackets(unacked, arraysize(unacked)); 276 VerifyUnackedPackets(unacked, arraysize(unacked));
289 QuicPacketSequenceNumber retransmittable[] = { 1 }; 277 QuicPacketSequenceNumber retransmittable[] = { 1 };
290 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 278 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
291 } 279 }
292 280
293 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { 281 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) {
294 SendDataPacket(1); 282 SendDataPacket(1);
295 RetransmitPacket(1, 2); 283 RetransmitAndSendPacket(1, 2);
296 284
297 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); 285 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2));
298 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 286 QuicPacketSequenceNumber unacked[] = { 1, 2 };
299 VerifyUnackedPackets(unacked, arraysize(unacked)); 287 VerifyUnackedPackets(unacked, arraysize(unacked));
300 QuicPacketSequenceNumber retransmittable[] = { 2 }; 288 QuicPacketSequenceNumber retransmittable[] = { 2 };
301 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 289 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
302 } 290 }
303 291
304 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { 292 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
305 SendDataPacket(1); 293 SendDataPacket(1);
(...skipping 29 matching lines...) Expand all
335 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 323 EXPECT_FALSE(manager_.HasPendingRetransmissions());
336 324
337 // No unacked packets remain. 325 // No unacked packets remain.
338 VerifyUnackedPackets(NULL, 0); 326 VerifyUnackedPackets(NULL, 0);
339 VerifyRetransmittablePackets(NULL, 0); 327 VerifyRetransmittablePackets(NULL, 0);
340 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); 328 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted);
341 } 329 }
342 330
343 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { 331 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) {
344 SendDataPacket(1); 332 SendDataPacket(1);
345 RetransmitPacket(1, 2);
346 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
347 clock_.AdvanceTime(rtt);
348
349 // Ack 1 but not 2.
350 ExpectAck(1);
351 QuicAckFrame ack_frame;
352 ack_frame.largest_observed = 1;
353 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
354
355 // 2 should be unacked, since it may provide an RTT measurement.
356 QuicPacketSequenceNumber unacked[] = { 2 };
357 VerifyUnackedPackets(unacked, arraysize(unacked));
358 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
359 VerifyRetransmittablePackets(NULL, 0);
360
361 // Verify that the retransmission alarm would not fire,
362 // since there is no retransmittable data outstanding.
363 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
364 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
365 }
366
367 TEST_F(QuicSentPacketManagerTest, RetransmitAndSendThenAckPrevious) {
368 SendDataPacket(1);
369 RetransmitAndSendPacket(1, 2); 333 RetransmitAndSendPacket(1, 2);
370 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 334 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
371 clock_.AdvanceTime(rtt); 335 clock_.AdvanceTime(rtt);
372 336
373 // Ack 1 but not 2. 337 // Ack 1 but not 2.
374 ExpectAck(1); 338 ExpectAck(1);
375 QuicAckFrame ack_frame; 339 QuicAckFrame ack_frame;
376 ack_frame.largest_observed = 1; 340 ack_frame.largest_observed = 1;
377 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 341 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
378 342
379 // 2 remains unacked, but no packets have retransmittable data. 343 // 2 remains unacked, but no packets have retransmittable data.
380 QuicPacketSequenceNumber unacked[] = { 2 }; 344 QuicPacketSequenceNumber unacked[] = { 2 };
381 VerifyUnackedPackets(unacked, arraysize(unacked)); 345 VerifyUnackedPackets(unacked, arraysize(unacked));
382 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 346 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
383 VerifyRetransmittablePackets(NULL, 0); 347 VerifyRetransmittablePackets(NULL, 0);
384 348
385 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 349 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
386 } 350 }
387 351
388 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { 352 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) {
389 SendDataPacket(1); 353 SendDataPacket(1);
390 RetransmitPacket(1, 2); 354 RetransmitAndSendPacket(1, 2);
391 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _))
392 .WillOnce(Return(true));
393 manager_.OnPacketSent(2, clock_.ApproximateNow(), kDefaultLength,
394 LOSS_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
395 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 355 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
396 clock_.AdvanceTime(rtt); 356 clock_.AdvanceTime(rtt);
397 357
398 // First, ACK packet 1 which makes packet 2 non-retransmittable. 358 // First, ACK packet 1 which makes packet 2 non-retransmittable.
399 ExpectAck(1); 359 ExpectAck(1);
400 QuicAckFrame ack_frame; 360 QuicAckFrame ack_frame;
401 ack_frame.largest_observed = 1; 361 ack_frame.largest_observed = 1;
402 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 362 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
403 363
404 SendDataPacket(3); 364 SendDataPacket(3);
(...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after
1416 .WillOnce(Return(100 * kDefaultTCPMSS)); 1376 .WillOnce(Return(100 * kDefaultTCPMSS));
1417 manager_.SetFromConfig(config); 1377 manager_.SetFromConfig(config);
1418 1378
1419 EXPECT_EQ(initial_rtt_us, 1379 EXPECT_EQ(initial_rtt_us,
1420 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); 1380 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds());
1421 } 1381 }
1422 1382
1423 } // namespace 1383 } // namespace
1424 } // namespace test 1384 } // namespace test
1425 } // namespace net 1385 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/test_tools/quic_test_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698