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

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

Issue 2515613002: deprecate FLAGS_quic_disable_pre_34 (Closed)
Patch Set: Created 4 years, 1 month 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/core/quic_sent_packet_manager.cc ('k') | net/quic/core/quic_types.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/core/quic_sent_packet_manager.h" 5 #include "net/quic/core/quic_sent_packet_manager.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "net/quic/core/quic_flags.h" 10 #include "net/quic/core/quic_flags.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 public: 49 public:
50 MOCK_METHOD2(OnSpuriousPacketRetransmission, 50 MOCK_METHOD2(OnSpuriousPacketRetransmission,
51 void(TransmissionType transmission_type, 51 void(TransmissionType transmission_type,
52 QuicByteCount byte_size)); 52 QuicByteCount byte_size));
53 MOCK_METHOD3(OnPacketLoss, 53 MOCK_METHOD3(OnPacketLoss,
54 void(QuicPacketNumber lost_packet_number, 54 void(QuicPacketNumber lost_packet_number,
55 TransmissionType transmission_type, 55 TransmissionType transmission_type,
56 QuicTime detection_time)); 56 QuicTime detection_time));
57 }; 57 };
58 58
59 // Run tests with different ack frame packets set mode. 59 class QuicSentPacketManagerTest : public ::testing::Test {
60 struct TestParams {
61 explicit TestParams(bool missing) : missing(missing) {}
62
63 friend std::ostream& operator<<(std::ostream& os, const TestParams& p) {
64 os << "{ ack frame packets set mode: " << p.missing << " }";
65 return os;
66 }
67
68 bool missing;
69 };
70
71 std::vector<TestParams> GetTestParams() {
72 std::vector<TestParams> params;
73 for (bool missing : {true, false}) {
74 params.push_back(TestParams(missing));
75 }
76 return params;
77 }
78
79 class QuicSentPacketManagerTest : public ::testing::TestWithParam<TestParams> {
80 protected: 60 protected:
81 QuicSentPacketManagerTest() 61 QuicSentPacketManagerTest()
82 : manager_(Perspective::IS_SERVER, 62 : manager_(Perspective::IS_SERVER,
83 kDefaultPathId, 63 kDefaultPathId,
84 &clock_, 64 &clock_,
85 &stats_, 65 &stats_,
86 FLAGS_quic_default_enable_cubic_bytes ? kCubicBytes : kCubic, 66 FLAGS_quic_default_enable_cubic_bytes ? kCubicBytes : kCubic,
87 kNack, 67 kNack,
88 /*delegate=*/nullptr), 68 /*delegate=*/nullptr),
89 send_algorithm_(new StrictMock<MockSendAlgorithm>), 69 send_algorithm_(new StrictMock<MockSendAlgorithm>),
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 } 195 }
216 196
217 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { 197 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) {
218 return CreatePacket(packet_number, true); 198 return CreatePacket(packet_number, true);
219 } 199 }
220 200
221 SerializedPacket CreatePacket(QuicPacketNumber packet_number, 201 SerializedPacket CreatePacket(QuicPacketNumber packet_number,
222 bool retransmittable) { 202 bool retransmittable) {
223 SerializedPacket packet(kDefaultPathId, packet_number, 203 SerializedPacket packet(kDefaultPathId, packet_number,
224 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, 204 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength,
225 0u, false, false); 205 false, false);
226 if (retransmittable) { 206 if (retransmittable) {
227 packet.retransmittable_frames.push_back( 207 packet.retransmittable_frames.push_back(
228 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece()))); 208 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece())));
229 } 209 }
230 return packet; 210 return packet;
231 } 211 }
232 212
233 void SendDataPacket(QuicPacketNumber packet_number) { 213 void SendDataPacket(QuicPacketNumber packet_number) {
234 EXPECT_CALL(*send_algorithm_, 214 EXPECT_CALL(*send_algorithm_,
235 OnPacketSent(_, BytesInFlight(), packet_number, _, _)) 215 OnPacketSent(_, BytesInFlight(), packet_number, _, _))
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 const PendingRetransmission pending = manager_.NextPendingRetransmission(); 256 const PendingRetransmission pending = manager_.NextPendingRetransmission();
277 SerializedPacket packet(CreatePacket(retransmission_packet_number, false)); 257 SerializedPacket packet(CreatePacket(retransmission_packet_number, false));
278 manager_.OnPacketSent(&packet, pending.path_id, pending.packet_number, 258 manager_.OnPacketSent(&packet, pending.path_id, pending.packet_number,
279 clock_.Now(), pending.transmission_type, 259 clock_.Now(), pending.transmission_type,
280 HAS_RETRANSMITTABLE_DATA); 260 HAS_RETRANSMITTABLE_DATA);
281 } 261 }
282 262
283 // Initialize a frame acknowledging all packets up to largest_observed. 263 // Initialize a frame acknowledging all packets up to largest_observed.
284 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) { 264 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) {
285 QuicAckFrame frame(MakeAckFrame(largest_observed)); 265 QuicAckFrame frame(MakeAckFrame(largest_observed));
286 frame.missing = GetParam().missing; 266 if (largest_observed > 0) {
287 if (!GetParam().missing) { 267 frame.packets.Add(1, largest_observed + 1);
288 if (largest_observed > 0) {
289 frame.packets.Add(1, largest_observed + 1);
290 }
291 } 268 }
292 return frame; 269 return frame;
293 } 270 }
294 271
295 // Explicitly nack packet [lower, higher). 272 // Explicitly nack packet [lower, higher).
296 void NackPackets(QuicPacketNumber lower, 273 void NackPackets(QuicPacketNumber lower,
297 QuicPacketNumber higher, 274 QuicPacketNumber higher,
298 QuicAckFrame* frame) { 275 QuicAckFrame* frame) {
299 if (frame->missing) { 276 frame->packets.Remove(lower, higher);
300 frame->packets.Add(lower, higher);
301 } else {
302 frame->packets.Remove(lower, higher);
303 }
304 } 277 }
305 278
306 QuicFlagSaver flags_; // Save/restore all QUIC flag values. 279 QuicFlagSaver flags_; // Save/restore all QUIC flag values.
307 QuicSentPacketManager manager_; 280 QuicSentPacketManager manager_;
308 MockClock clock_; 281 MockClock clock_;
309 QuicConnectionStats stats_; 282 QuicConnectionStats stats_;
310 MockSendAlgorithm* send_algorithm_; 283 MockSendAlgorithm* send_algorithm_;
311 std::unique_ptr<MockNetworkChangeVisitor> network_change_visitor_; 284 std::unique_ptr<MockNetworkChangeVisitor> network_change_visitor_;
312 }; 285 };
313 286
314 INSTANTIATE_TEST_CASE_P(QuicSentPacketManagerTest, 287 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
315 QuicSentPacketManagerTest,
316 ::testing::ValuesIn(GetTestParams()));
317
318 TEST_P(QuicSentPacketManagerTest, IsUnacked) {
319 VerifyUnackedPackets(nullptr, 0); 288 VerifyUnackedPackets(nullptr, 0);
320 SendDataPacket(1); 289 SendDataPacket(1);
321 290
322 QuicPacketNumber unacked[] = {1}; 291 QuicPacketNumber unacked[] = {1};
323 VerifyUnackedPackets(unacked, arraysize(unacked)); 292 VerifyUnackedPackets(unacked, arraysize(unacked));
324 QuicPacketNumber retransmittable[] = {1}; 293 QuicPacketNumber retransmittable[] = {1};
325 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 294 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
326 } 295 }
327 296
328 TEST_P(QuicSentPacketManagerTest, IsUnAckedRetransmit) { 297 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) {
329 SendDataPacket(1); 298 SendDataPacket(1);
330 RetransmitAndSendPacket(1, 2); 299 RetransmitAndSendPacket(1, 2);
331 300
332 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 301 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_,
333 kDefaultPathId, 2)); 302 kDefaultPathId, 2));
334 QuicPacketNumber unacked[] = {1, 2}; 303 QuicPacketNumber unacked[] = {1, 2};
335 VerifyUnackedPackets(unacked, arraysize(unacked)); 304 VerifyUnackedPackets(unacked, arraysize(unacked));
336 QuicPacketNumber retransmittable[] = {2}; 305 QuicPacketNumber retransmittable[] = {2};
337 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 306 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
338 } 307 }
339 308
340 TEST_P(QuicSentPacketManagerTest, RetransmitThenAck) { 309 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
341 SendDataPacket(1); 310 SendDataPacket(1);
342 RetransmitAndSendPacket(1, 2); 311 RetransmitAndSendPacket(1, 2);
343 312
344 // Ack 2 but not 1. 313 // Ack 2 but not 1.
345 QuicAckFrame ack_frame = InitAckFrame(2); 314 QuicAckFrame ack_frame = InitAckFrame(2);
346 NackPackets(1, 2, &ack_frame); 315 NackPackets(1, 2, &ack_frame);
347 ExpectAck(2); 316 ExpectAck(2);
348 manager_.OnIncomingAck(ack_frame, clock_.Now()); 317 manager_.OnIncomingAck(ack_frame, clock_.Now());
349 318
350 // Packet 1 is unacked, pending, but not retransmittable. 319 // Packet 1 is unacked, pending, but not retransmittable.
351 QuicPacketNumber unacked[] = {1}; 320 QuicPacketNumber unacked[] = {1};
352 VerifyUnackedPackets(unacked, arraysize(unacked)); 321 VerifyUnackedPackets(unacked, arraysize(unacked));
353 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 322 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
354 VerifyRetransmittablePackets(nullptr, 0); 323 VerifyRetransmittablePackets(nullptr, 0);
355 } 324 }
356 325
357 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { 326 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) {
358 SendDataPacket(1); 327 SendDataPacket(1);
359 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, kDefaultPathId, 1, 328 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, kDefaultPathId, 1,
360 TLP_RETRANSMISSION); 329 TLP_RETRANSMISSION);
361 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 330 EXPECT_TRUE(manager_.HasPendingRetransmissions());
362 331
363 // Ack 1. 332 // Ack 1.
364 QuicAckFrame ack_frame = InitAckFrame(1); 333 QuicAckFrame ack_frame = InitAckFrame(1);
365 ExpectAck(1); 334 ExpectAck(1);
366 manager_.OnIncomingAck(ack_frame, clock_.Now()); 335 manager_.OnIncomingAck(ack_frame, clock_.Now());
367 336
368 // There should no longer be a pending retransmission. 337 // There should no longer be a pending retransmission.
369 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 338 EXPECT_FALSE(manager_.HasPendingRetransmissions());
370 339
371 // No unacked packets remain. 340 // No unacked packets remain.
372 VerifyUnackedPackets(nullptr, 0); 341 VerifyUnackedPackets(nullptr, 0);
373 VerifyRetransmittablePackets(nullptr, 0); 342 VerifyRetransmittablePackets(nullptr, 0);
374 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); 343 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted);
375 } 344 }
376 345
377 TEST_P(QuicSentPacketManagerTest, RetransmitThenStopRetransmittingBeforeSend) { 346 TEST_F(QuicSentPacketManagerTest, RetransmitThenStopRetransmittingBeforeSend) {
378 SendDataPacket(1); 347 SendDataPacket(1);
379 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, kDefaultPathId, 1, 348 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, kDefaultPathId, 1,
380 TLP_RETRANSMISSION); 349 TLP_RETRANSMISSION);
381 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 350 EXPECT_TRUE(manager_.HasPendingRetransmissions());
382 351
383 manager_.CancelRetransmissionsForStream(kStreamId); 352 manager_.CancelRetransmissionsForStream(kStreamId);
384 353
385 // There should no longer be a pending retransmission. 354 // There should no longer be a pending retransmission.
386 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 355 EXPECT_FALSE(manager_.HasPendingRetransmissions());
387 356
388 QuicPacketNumber unacked[] = {1}; 357 QuicPacketNumber unacked[] = {1};
389 VerifyUnackedPackets(unacked, arraysize(unacked)); 358 VerifyUnackedPackets(unacked, arraysize(unacked));
390 VerifyRetransmittablePackets(nullptr, 0); 359 VerifyRetransmittablePackets(nullptr, 0);
391 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); 360 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted);
392 } 361 }
393 362
394 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { 363 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) {
395 SendDataPacket(1); 364 SendDataPacket(1);
396 RetransmitAndSendPacket(1, 2); 365 RetransmitAndSendPacket(1, 2);
397 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 366 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
398 clock_.AdvanceTime(rtt); 367 clock_.AdvanceTime(rtt);
399 368
400 // Ack 1 but not 2. 369 // Ack 1 but not 2.
401 ExpectAck(1); 370 ExpectAck(1);
402 QuicAckFrame ack_frame = InitAckFrame(1); 371 QuicAckFrame ack_frame = InitAckFrame(1);
403 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 372 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
404 373
405 // 2 remains unacked, but no packets have retransmittable data. 374 // 2 remains unacked, but no packets have retransmittable data.
406 QuicPacketNumber unacked[] = {2}; 375 QuicPacketNumber unacked[] = {2};
407 VerifyUnackedPackets(unacked, arraysize(unacked)); 376 VerifyUnackedPackets(unacked, arraysize(unacked));
408 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 377 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
409 VerifyRetransmittablePackets(nullptr, 0); 378 VerifyRetransmittablePackets(nullptr, 0);
410 379
411 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 380 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
412 } 381 }
413 382
414 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { 383 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) {
415 SendDataPacket(1); 384 SendDataPacket(1);
416 RetransmitAndSendPacket(1, 2); 385 RetransmitAndSendPacket(1, 2);
417 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 386 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
418 clock_.AdvanceTime(rtt); 387 clock_.AdvanceTime(rtt);
419 388
420 // First, ACK packet 1 which makes packet 2 non-retransmittable. 389 // First, ACK packet 1 which makes packet 2 non-retransmittable.
421 ExpectAck(1); 390 ExpectAck(1);
422 QuicAckFrame ack_frame = InitAckFrame(1); 391 QuicAckFrame ack_frame = InitAckFrame(1);
423 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 392 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
424 393
(...skipping 21 matching lines...) Expand all
446 // No packets remain unacked. 415 // No packets remain unacked.
447 VerifyUnackedPackets(nullptr, 0); 416 VerifyUnackedPackets(nullptr, 0);
448 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 417 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
449 VerifyRetransmittablePackets(nullptr, 0); 418 VerifyRetransmittablePackets(nullptr, 0);
450 419
451 // Verify that the retransmission alarm would not fire, 420 // Verify that the retransmission alarm would not fire,
452 // since there is no retransmittable data outstanding. 421 // since there is no retransmittable data outstanding.
453 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 422 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
454 } 423 }
455 424
456 TEST_P(QuicSentPacketManagerTest, 425 TEST_F(QuicSentPacketManagerTest,
457 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) { 426 DISABLED_RetransmitTwiceThenAckPreviousBeforeSend) {
458 SendDataPacket(1); 427 SendDataPacket(1);
459 RetransmitAndSendPacket(1, 2); 428 RetransmitAndSendPacket(1, 2);
460 429
461 // Fire the RTO, which will mark 2 for retransmission (but will not send it). 430 // Fire the RTO, which will mark 2 for retransmission (but will not send it).
462 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 431 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
463 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 432 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
464 manager_.OnRetransmissionTimeout(); 433 manager_.OnRetransmissionTimeout();
465 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 434 EXPECT_TRUE(manager_.HasPendingRetransmissions());
466 435
467 // Ack 1 but not 2, before 2 is able to be sent. 436 // Ack 1 but not 2, before 2 is able to be sent.
468 // Since 1 has been retransmitted, it has already been lost, and so the 437 // Since 1 has been retransmitted, it has already been lost, and so the
469 // send algorithm is not informed that it has been ACK'd. 438 // send algorithm is not informed that it has been ACK'd.
470 QuicAckFrame ack_frame = InitAckFrame(1); 439 QuicAckFrame ack_frame = InitAckFrame(1);
471 ExpectUpdatedRtt(1); 440 ExpectUpdatedRtt(1);
472 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); 441 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
473 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 442 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
474 443
475 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT. 444 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT.
476 QuicPacketNumber unacked[] = {2}; 445 QuicPacketNumber unacked[] = {2};
477 VerifyUnackedPackets(unacked, arraysize(unacked)); 446 VerifyUnackedPackets(unacked, arraysize(unacked));
478 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 447 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
479 VerifyRetransmittablePackets(nullptr, 0); 448 VerifyRetransmittablePackets(nullptr, 0);
480 449
481 // Verify that the retransmission alarm would not fire, 450 // Verify that the retransmission alarm would not fire,
482 // since there is no retransmittable data outstanding. 451 // since there is no retransmittable data outstanding.
483 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 452 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
484 } 453 }
485 454
486 TEST_P(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { 455 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
487 StrictMock<MockDebugDelegate> debug_delegate; 456 StrictMock<MockDebugDelegate> debug_delegate;
488 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmission(TLP_RETRANSMISSION, 457 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmission(TLP_RETRANSMISSION,
489 kDefaultLength)) 458 kDefaultLength))
490 .Times(2); 459 .Times(2);
491 manager_.SetDebugDelegate(&debug_delegate); 460 manager_.SetDebugDelegate(&debug_delegate);
492 461
493 SendDataPacket(1); 462 SendDataPacket(1);
494 RetransmitAndSendPacket(1, 2); 463 RetransmitAndSendPacket(1, 2);
495 RetransmitAndSendPacket(2, 3); 464 RetransmitAndSendPacket(2, 3);
496 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 465 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
(...skipping 27 matching lines...) Expand all
524 NackPackets(2, 3, &ack_frame); 493 NackPackets(2, 3, &ack_frame);
525 ExpectAckAndLoss(true, 5, 2); 494 ExpectAckAndLoss(true, 5, 2);
526 EXPECT_CALL(debug_delegate, OnPacketLoss(2, LOSS_RETRANSMISSION, _)); 495 EXPECT_CALL(debug_delegate, OnPacketLoss(2, LOSS_RETRANSMISSION, _));
527 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 496 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
528 497
529 VerifyUnackedPackets(nullptr, 0); 498 VerifyUnackedPackets(nullptr, 0);
530 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 499 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
531 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); 500 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted);
532 } 501 }
533 502
534 TEST_P(QuicSentPacketManagerTest, AckOriginalTransmission) { 503 TEST_F(QuicSentPacketManagerTest, AckOriginalTransmission) {
535 auto loss_algorithm = base::MakeUnique<MockLossAlgorithm>(); 504 auto loss_algorithm = base::MakeUnique<MockLossAlgorithm>();
536 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get()); 505 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get());
537 506
538 SendDataPacket(1); 507 SendDataPacket(1);
539 RetransmitAndSendPacket(1, 2); 508 RetransmitAndSendPacket(1, 2);
540 509
541 // Ack original transmission, but that wasn't lost via fast retransmit, 510 // Ack original transmission, but that wasn't lost via fast retransmit,
542 // so no call on OnSpuriousRetransmission is expected. 511 // so no call on OnSpuriousRetransmission is expected.
543 { 512 {
544 QuicAckFrame ack_frame = InitAckFrame(1); 513 QuicAckFrame ack_frame = InitAckFrame(1);
(...skipping 14 matching lines...) Expand all
559 RetransmitAndSendPacket(3, 5, LOSS_RETRANSMISSION); 528 RetransmitAndSendPacket(3, 5, LOSS_RETRANSMISSION);
560 } 529 }
561 530
562 // Ack 3, which causes SpuriousRetransmitDetected to be called. 531 // Ack 3, which causes SpuriousRetransmitDetected to be called.
563 { 532 {
564 QuicAckFrame ack_frame = InitAckFrame(4); 533 QuicAckFrame ack_frame = InitAckFrame(4);
565 NackPackets(2, 3, &ack_frame); 534 NackPackets(2, 3, &ack_frame);
566 } 535 }
567 } 536 }
568 537
569 TEST_P(QuicSentPacketManagerTest, GetLeastUnacked) { 538 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) {
570 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); 539 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId));
571 } 540 }
572 541
573 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { 542 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) {
574 SendDataPacket(1); 543 SendDataPacket(1);
575 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); 544 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId));
576 } 545 }
577 546
578 TEST_P(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { 547 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) {
579 SendDataPacket(1); 548 SendDataPacket(1);
580 SendAckPacket(2); 549 SendAckPacket(2);
581 550
582 // Now ack the ack and expect an RTT update. 551 // Now ack the ack and expect an RTT update.
583 QuicAckFrame ack_frame = InitAckFrame(2); 552 QuicAckFrame ack_frame = InitAckFrame(2);
584 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5); 553 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5);
585 554
586 ExpectAck(1); 555 ExpectAck(1);
587 manager_.OnIncomingAck(ack_frame, clock_.Now()); 556 manager_.OnIncomingAck(ack_frame, clock_.Now());
588 557
589 SendAckPacket(3); 558 SendAckPacket(3);
590 559
591 // Now ack the ack and expect only an RTT update. 560 // Now ack the ack and expect only an RTT update.
592 ack_frame = InitAckFrame(3); 561 ack_frame = InitAckFrame(3);
593 ExpectUpdatedRtt(3); 562 ExpectUpdatedRtt(3);
594 manager_.OnIncomingAck(ack_frame, clock_.Now()); 563 manager_.OnIncomingAck(ack_frame, clock_.Now());
595 } 564 }
596 565
597 TEST_P(QuicSentPacketManagerTest, Rtt) { 566 TEST_F(QuicSentPacketManagerTest, Rtt) {
598 QuicPacketNumber packet_number = 1; 567 QuicPacketNumber packet_number = 1;
599 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); 568 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15);
600 SendDataPacket(packet_number); 569 SendDataPacket(packet_number);
601 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); 570 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
602 571
603 ExpectAck(packet_number); 572 ExpectAck(packet_number);
604 QuicAckFrame ack_frame = InitAckFrame(packet_number); 573 QuicAckFrame ack_frame = InitAckFrame(packet_number);
605 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5); 574 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5);
606 manager_.OnIncomingAck(ack_frame, clock_.Now()); 575 manager_.OnIncomingAck(ack_frame, clock_.Now());
607 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); 576 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
608 } 577 }
609 578
610 TEST_P(QuicSentPacketManagerTest, RttWithInvalidDelta) { 579 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) {
611 // Expect that the RTT is equal to the local time elapsed, since the 580 // Expect that the RTT is equal to the local time elapsed, since the
612 // ack_delay_time is larger than the local time elapsed 581 // ack_delay_time is larger than the local time elapsed
613 // and is hence invalid. 582 // and is hence invalid.
614 QuicPacketNumber packet_number = 1; 583 QuicPacketNumber packet_number = 1;
615 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); 584 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10);
616 SendDataPacket(packet_number); 585 SendDataPacket(packet_number);
617 clock_.AdvanceTime(expected_rtt); 586 clock_.AdvanceTime(expected_rtt);
618 587
619 ExpectAck(packet_number); 588 ExpectAck(packet_number);
620 QuicAckFrame ack_frame = InitAckFrame(packet_number); 589 QuicAckFrame ack_frame = InitAckFrame(packet_number);
621 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(11); 590 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(11);
622 manager_.OnIncomingAck(ack_frame, clock_.Now()); 591 manager_.OnIncomingAck(ack_frame, clock_.Now());
623 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); 592 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
624 } 593 }
625 594
626 TEST_P(QuicSentPacketManagerTest, RttWithInfiniteDelta) { 595 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) {
627 // Expect that the RTT is equal to the local time elapsed, since the 596 // Expect that the RTT is equal to the local time elapsed, since the
628 // ack_delay_time is infinite, and is hence invalid. 597 // ack_delay_time is infinite, and is hence invalid.
629 QuicPacketNumber packet_number = 1; 598 QuicPacketNumber packet_number = 1;
630 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); 599 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10);
631 SendDataPacket(packet_number); 600 SendDataPacket(packet_number);
632 clock_.AdvanceTime(expected_rtt); 601 clock_.AdvanceTime(expected_rtt);
633 602
634 ExpectAck(packet_number); 603 ExpectAck(packet_number);
635 QuicAckFrame ack_frame = InitAckFrame(packet_number); 604 QuicAckFrame ack_frame = InitAckFrame(packet_number);
636 ack_frame.ack_delay_time = QuicTime::Delta::Infinite(); 605 ack_frame.ack_delay_time = QuicTime::Delta::Infinite();
637 manager_.OnIncomingAck(ack_frame, clock_.Now()); 606 manager_.OnIncomingAck(ack_frame, clock_.Now());
638 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); 607 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
639 } 608 }
640 609
641 TEST_P(QuicSentPacketManagerTest, RttZeroDelta) { 610 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) {
642 // Expect that the RTT is the time between send and receive since the 611 // Expect that the RTT is the time between send and receive since the
643 // ack_delay_time is zero. 612 // ack_delay_time is zero.
644 QuicPacketNumber packet_number = 1; 613 QuicPacketNumber packet_number = 1;
645 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); 614 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10);
646 SendDataPacket(packet_number); 615 SendDataPacket(packet_number);
647 clock_.AdvanceTime(expected_rtt); 616 clock_.AdvanceTime(expected_rtt);
648 617
649 ExpectAck(packet_number); 618 ExpectAck(packet_number);
650 QuicAckFrame ack_frame = InitAckFrame(packet_number); 619 QuicAckFrame ack_frame = InitAckFrame(packet_number);
651 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 620 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
652 manager_.OnIncomingAck(ack_frame, clock_.Now()); 621 manager_.OnIncomingAck(ack_frame, clock_.Now());
653 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); 622 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
654 } 623 }
655 624
656 TEST_P(QuicSentPacketManagerTest, TailLossProbeTimeout) { 625 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) {
657 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 626 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
658 627
659 // Send 1 packet. 628 // Send 1 packet.
660 QuicPacketNumber packet_number = 1; 629 QuicPacketNumber packet_number = 1;
661 SendDataPacket(packet_number); 630 SendDataPacket(packet_number);
662 631
663 QuicPathId path_id = kInvalidPathId; 632 QuicPathId path_id = kInvalidPathId;
664 // The first tail loss probe retransmits 1 packet. 633 // The first tail loss probe retransmits 1 packet.
665 manager_.OnRetransmissionTimeout(); 634 manager_.OnRetransmissionTimeout();
666 EXPECT_EQ(QuicTime::Delta::Zero(), 635 EXPECT_EQ(QuicTime::Delta::Zero(),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 QuicPacketNumber lost[] = {1, 2}; 672 QuicPacketNumber lost[] = {1, 2};
704 ExpectAcksAndLosses(true, acked, arraysize(acked), lost, arraysize(lost)); 673 ExpectAcksAndLosses(true, acked, arraysize(acked), lost, arraysize(lost));
705 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 674 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
706 675
707 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 676 EXPECT_FALSE(manager_.HasPendingRetransmissions());
708 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 677 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
709 EXPECT_EQ(2u, stats_.tlp_count); 678 EXPECT_EQ(2u, stats_.tlp_count);
710 EXPECT_EQ(0u, stats_.rto_count); 679 EXPECT_EQ(0u, stats_.rto_count);
711 } 680 }
712 681
713 TEST_P(QuicSentPacketManagerTest, TailLossProbeThenRTO) { 682 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) {
714 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 683 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
715 684
716 // Send 100 packets. 685 // Send 100 packets.
717 const size_t kNumSentPackets = 100; 686 const size_t kNumSentPackets = 100;
718 for (size_t i = 1; i <= kNumSentPackets; ++i) { 687 for (size_t i = 1; i <= kNumSentPackets; ++i) {
719 SendDataPacket(i); 688 SendDataPacket(i);
720 } 689 }
721 QuicTime rto_packet_time = clock_.Now(); 690 QuicTime rto_packet_time = clock_.Now();
722 // Advance the time. 691 // Advance the time.
723 clock_.AdvanceTime(manager_.GetRetransmissionTime() - clock_.Now()); 692 clock_.AdvanceTime(manager_.GetRetransmissionTime() - clock_.Now());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 NackPackets(0, 103, &ack_frame); 742 NackPackets(0, 103, &ack_frame);
774 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 743 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
775 EXPECT_CALL(*send_algorithm_, 744 EXPECT_CALL(*send_algorithm_,
776 OnCongestionEvent(true, _, _, ElementsAre(Pair(103, _)), _)); 745 OnCongestionEvent(true, _, _, ElementsAre(Pair(103, _)), _));
777 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 746 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
778 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 747 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
779 // All packets before 103 should be lost. 748 // All packets before 103 should be lost.
780 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 749 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
781 } 750 }
782 751
783 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { 752 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) {
784 // Send 2 crypto packets and 3 data packets. 753 // Send 2 crypto packets and 3 data packets.
785 const size_t kNumSentCryptoPackets = 2; 754 const size_t kNumSentCryptoPackets = 2;
786 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 755 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
787 SendCryptoPacket(i); 756 SendCryptoPacket(i);
788 } 757 }
789 const size_t kNumSentDataPackets = 3; 758 const size_t kNumSentDataPackets = 3;
790 for (size_t i = 1; i <= kNumSentDataPackets; ++i) { 759 for (size_t i = 1; i <= kNumSentDataPackets; ++i) {
791 SendDataPacket(kNumSentCryptoPackets + i); 760 SendDataPacket(kNumSentCryptoPackets + i);
792 } 761 }
793 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 762 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
(...skipping 22 matching lines...) Expand all
816 QuicPacketNumber acked[] = {3, 4, 5, 8, 9}; 785 QuicPacketNumber acked[] = {3, 4, 5, 8, 9};
817 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); 786 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
818 QuicAckFrame ack_frame = InitAckFrame(9); 787 QuicAckFrame ack_frame = InitAckFrame(9);
819 NackPackets(1, 3, &ack_frame); 788 NackPackets(1, 3, &ack_frame);
820 NackPackets(6, 8, &ack_frame); 789 NackPackets(6, 8, &ack_frame);
821 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 790 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
822 791
823 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 792 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
824 } 793 }
825 794
826 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeoutVersionNegotiation) { 795 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutVersionNegotiation) {
827 // Send 2 crypto packets and 3 data packets. 796 // Send 2 crypto packets and 3 data packets.
828 const size_t kNumSentCryptoPackets = 2; 797 const size_t kNumSentCryptoPackets = 2;
829 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 798 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
830 SendCryptoPacket(i); 799 SendCryptoPacket(i);
831 } 800 }
832 const size_t kNumSentDataPackets = 3; 801 const size_t kNumSentDataPackets = 3;
833 for (size_t i = 1; i <= kNumSentDataPackets; ++i) { 802 for (size_t i = 1; i <= kNumSentDataPackets; ++i) {
834 SendDataPacket(kNumSentCryptoPackets + i); 803 SendDataPacket(kNumSentCryptoPackets + i);
835 } 804 }
836 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 805 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
(...skipping 29 matching lines...) Expand all
866 QuicPacketNumber acked[] = {8, 9}; 835 QuicPacketNumber acked[] = {8, 9};
867 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); 836 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0);
868 QuicAckFrame ack_frame = InitAckFrame(9); 837 QuicAckFrame ack_frame = InitAckFrame(9);
869 for (QuicPacketNumber i = 1; i < 8; ++i) { 838 for (QuicPacketNumber i = 1; i < 8; ++i) {
870 NackPackets(i, i + 1, &ack_frame); 839 NackPackets(i, i + 1, &ack_frame);
871 } 840 }
872 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 841 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
873 EXPECT_EQ(10u, manager_.GetLeastUnacked(kDefaultPathId)); 842 EXPECT_EQ(10u, manager_.GetLeastUnacked(kDefaultPathId));
874 } 843 }
875 844
876 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) { 845 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) {
877 // Send 1 crypto packet. 846 // Send 1 crypto packet.
878 SendCryptoPacket(1); 847 SendCryptoPacket(1);
879 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 848 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
880 849
881 // Retransmit the crypto packet as 2. 850 // Retransmit the crypto packet as 2.
882 manager_.OnRetransmissionTimeout(); 851 manager_.OnRetransmissionTimeout();
883 RetransmitNextPacket(2); 852 RetransmitNextPacket(2);
884 853
885 // Retransmit the crypto packet as 3. 854 // Retransmit the crypto packet as 3.
886 manager_.OnRetransmissionTimeout(); 855 manager_.OnRetransmissionTimeout();
887 RetransmitNextPacket(3); 856 RetransmitNextPacket(3);
888 857
889 // Now ack the second crypto packet, and ensure the first gets removed, but 858 // Now ack the second crypto packet, and ensure the first gets removed, but
890 // the third does not. 859 // the third does not.
891 ExpectUpdatedRtt(2); 860 ExpectUpdatedRtt(2);
892 QuicAckFrame ack_frame = InitAckFrame(2); 861 QuicAckFrame ack_frame = InitAckFrame(2);
893 NackPackets(1, 2, &ack_frame); 862 NackPackets(1, 2, &ack_frame);
894 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 863 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
895 864
896 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 865 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
897 QuicPacketNumber unacked[] = {3}; 866 QuicPacketNumber unacked[] = {3};
898 VerifyUnackedPackets(unacked, arraysize(unacked)); 867 VerifyUnackedPackets(unacked, arraysize(unacked));
899 } 868 }
900 869
901 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { 870 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) {
902 // Send 2 crypto packets and 1 data packet. 871 // Send 2 crypto packets and 1 data packet.
903 const size_t kNumSentCryptoPackets = 2; 872 const size_t kNumSentCryptoPackets = 2;
904 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 873 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
905 SendCryptoPacket(i); 874 SendCryptoPacket(i);
906 } 875 }
907 SendDataPacket(3); 876 SendDataPacket(3);
908 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 877 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
909 878
910 // Retransmit 2 crypto packets, but not the serialized packet. 879 // Retransmit 2 crypto packets, but not the serialized packet.
911 manager_.OnRetransmissionTimeout(); 880 manager_.OnRetransmissionTimeout();
912 RetransmitNextPacket(4); 881 RetransmitNextPacket(4);
913 RetransmitNextPacket(5); 882 RetransmitNextPacket(5);
914 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 883 EXPECT_FALSE(manager_.HasPendingRetransmissions());
915 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 884 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
916 } 885 }
917 886
918 TEST_P(QuicSentPacketManagerTest, 887 TEST_F(QuicSentPacketManagerTest,
919 CryptoHandshakeRetransmissionThenRetransmitAll) { 888 CryptoHandshakeRetransmissionThenRetransmitAll) {
920 // Send 1 crypto packet. 889 // Send 1 crypto packet.
921 SendCryptoPacket(1); 890 SendCryptoPacket(1);
922 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 891 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
923 892
924 // Retransmit the crypto packet as 2. 893 // Retransmit the crypto packet as 2.
925 manager_.OnRetransmissionTimeout(); 894 manager_.OnRetransmissionTimeout();
926 RetransmitNextPacket(2); 895 RetransmitNextPacket(2);
927 896
928 // Now retransmit all the unacked packets, which occurs when there is a 897 // Now retransmit all the unacked packets, which occurs when there is a
929 // version negotiation. 898 // version negotiation.
930 manager_.RetransmitUnackedPackets(ALL_UNACKED_RETRANSMISSION); 899 manager_.RetransmitUnackedPackets(ALL_UNACKED_RETRANSMISSION);
931 QuicPacketNumber unacked[] = {1, 2}; 900 QuicPacketNumber unacked[] = {1, 2};
932 VerifyUnackedPackets(unacked, arraysize(unacked)); 901 VerifyUnackedPackets(unacked, arraysize(unacked));
933 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 902 EXPECT_TRUE(manager_.HasPendingRetransmissions());
934 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 903 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
935 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 904 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
936 } 905 }
937 906
938 TEST_P(QuicSentPacketManagerTest, 907 TEST_F(QuicSentPacketManagerTest,
939 CryptoHandshakeRetransmissionThenNeuterAndAck) { 908 CryptoHandshakeRetransmissionThenNeuterAndAck) {
940 // Send 1 crypto packet. 909 // Send 1 crypto packet.
941 SendCryptoPacket(1); 910 SendCryptoPacket(1);
942 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 911 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
943 912
944 // Retransmit the crypto packet as 2. 913 // Retransmit the crypto packet as 2.
945 manager_.OnRetransmissionTimeout(); 914 manager_.OnRetransmissionTimeout();
946 RetransmitNextPacket(2); 915 RetransmitNextPacket(2);
947 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 916 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
948 917
(...skipping 15 matching lines...) Expand all
964 933
965 // Ensure both packets get discarded when packet 2 is acked. 934 // Ensure both packets get discarded when packet 2 is acked.
966 QuicAckFrame ack_frame = InitAckFrame(3); 935 QuicAckFrame ack_frame = InitAckFrame(3);
967 NackPackets(1, 3, &ack_frame); 936 NackPackets(1, 3, &ack_frame);
968 ExpectUpdatedRtt(3); 937 ExpectUpdatedRtt(3);
969 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 938 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
970 VerifyUnackedPackets(nullptr, 0); 939 VerifyUnackedPackets(nullptr, 0);
971 VerifyRetransmittablePackets(nullptr, 0); 940 VerifyRetransmittablePackets(nullptr, 0);
972 } 941 }
973 942
974 TEST_P(QuicSentPacketManagerTest, RetransmissionTimeout) { 943 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
975 StrictMock<MockDebugDelegate> debug_delegate; 944 StrictMock<MockDebugDelegate> debug_delegate;
976 manager_.SetDebugDelegate(&debug_delegate); 945 manager_.SetDebugDelegate(&debug_delegate);
977 946
978 // Send 100 packets. 947 // Send 100 packets.
979 const size_t kNumSentPackets = 100; 948 const size_t kNumSentPackets = 100;
980 for (size_t i = 1; i <= kNumSentPackets; ++i) { 949 for (size_t i = 1; i <= kNumSentPackets; ++i) {
981 SendDataPacket(i); 950 SendDataPacket(i);
982 } 951 }
983 952
984 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); 953 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe());
(...skipping 16 matching lines...) Expand all
1001 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 970 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1002 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 971 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1003 // RTO's use loss detection instead of immediately declaring retransmitted 972 // RTO's use loss detection instead of immediately declaring retransmitted
1004 // packets lost. 973 // packets lost.
1005 for (int i = 1; i <= 99; ++i) { 974 for (int i = 1; i <= 99; ++i) {
1006 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _)); 975 EXPECT_CALL(debug_delegate, OnPacketLoss(i, LOSS_RETRANSMISSION, _));
1007 } 976 }
1008 manager_.OnIncomingAck(ack_frame, clock_.Now()); 977 manager_.OnIncomingAck(ack_frame, clock_.Now());
1009 } 978 }
1010 979
1011 TEST_P(QuicSentPacketManagerTest, NewRetransmissionTimeout) { 980 TEST_F(QuicSentPacketManagerTest, NewRetransmissionTimeout) {
1012 QuicConfig client_config; 981 QuicConfig client_config;
1013 QuicTagVector options; 982 QuicTagVector options;
1014 options.push_back(kNRTO); 983 options.push_back(kNRTO);
1015 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 984 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1016 client_config.SetConnectionOptionsToSend(options); 985 client_config.SetConnectionOptionsToSend(options);
1017 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 986 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1018 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 987 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1019 EXPECT_CALL(*send_algorithm_, PacingRate(_)) 988 EXPECT_CALL(*send_algorithm_, PacingRate(_))
1020 .WillRepeatedly(Return(QuicBandwidth::Zero())); 989 .WillRepeatedly(Return(QuicBandwidth::Zero()));
1021 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) 990 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
(...skipping 21 matching lines...) Expand all
1043 NackPackets(0, 102, &ack_frame); 1012 NackPackets(0, 102, &ack_frame);
1044 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 1013 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
1045 // This will include packets in the lost packet map. 1014 // This will include packets in the lost packet map.
1046 EXPECT_CALL(*send_algorithm_, 1015 EXPECT_CALL(*send_algorithm_,
1047 OnCongestionEvent(true, _, _, ElementsAre(Pair(102, _)), 1016 OnCongestionEvent(true, _, _, ElementsAre(Pair(102, _)),
1048 /*lost_packets=*/Not(IsEmpty()))); 1017 /*lost_packets=*/Not(IsEmpty())));
1049 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1018 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1050 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1019 manager_.OnIncomingAck(ack_frame, clock_.Now());
1051 } 1020 }
1052 1021
1053 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) { 1022 TEST_F(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckSecond) {
1054 // Send 1 packet. 1023 // Send 1 packet.
1055 SendDataPacket(1); 1024 SendDataPacket(1);
1056 1025
1057 manager_.OnRetransmissionTimeout(); 1026 manager_.OnRetransmissionTimeout();
1058 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1027 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1059 EXPECT_EQ(kDefaultLength, 1028 EXPECT_EQ(kDefaultLength,
1060 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1029 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1061 RetransmitNextPacket(2); 1030 RetransmitNextPacket(2);
1062 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1031 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1063 1032
(...skipping 12 matching lines...) Expand all
1076 NackPackets(1, 2, &ack_frame); 1045 NackPackets(1, 2, &ack_frame);
1077 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 1046 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
1078 ExpectAck(2); 1047 ExpectAck(2);
1079 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1048 manager_.OnIncomingAck(ack_frame, clock_.Now());
1080 1049
1081 // The original packet and newest should be outstanding. 1050 // The original packet and newest should be outstanding.
1082 EXPECT_EQ(2 * kDefaultLength, 1051 EXPECT_EQ(2 * kDefaultLength,
1083 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1052 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1084 } 1053 }
1085 1054
1086 TEST_P(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckFirst) { 1055 TEST_F(QuicSentPacketManagerTest, TwoRetransmissionTimeoutsAckFirst) {
1087 // Send 1 packet. 1056 // Send 1 packet.
1088 SendDataPacket(1); 1057 SendDataPacket(1);
1089 1058
1090 manager_.OnRetransmissionTimeout(); 1059 manager_.OnRetransmissionTimeout();
1091 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1060 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1092 EXPECT_EQ(kDefaultLength, 1061 EXPECT_EQ(kDefaultLength,
1093 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1062 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1094 RetransmitNextPacket(2); 1063 RetransmitNextPacket(2);
1095 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1064 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1096 1065
(...skipping 12 matching lines...) Expand all
1109 NackPackets(1, 3, &ack_frame); 1078 NackPackets(1, 3, &ack_frame);
1110 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 1079 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
1111 ExpectAck(3); 1080 ExpectAck(3);
1112 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1081 manager_.OnIncomingAck(ack_frame, clock_.Now());
1113 1082
1114 // The first two packets should still be outstanding. 1083 // The first two packets should still be outstanding.
1115 EXPECT_EQ(2 * kDefaultLength, 1084 EXPECT_EQ(2 * kDefaultLength,
1116 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1085 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1117 } 1086 }
1118 1087
1119 TEST_P(QuicSentPacketManagerTest, OnPathDegrading) { 1088 TEST_F(QuicSentPacketManagerTest, OnPathDegrading) {
1120 SendDataPacket(1); 1089 SendDataPacket(1);
1121 for (size_t i = 1; i < kMinTimeoutsBeforePathDegrading; ++i) { 1090 for (size_t i = 1; i < kMinTimeoutsBeforePathDegrading; ++i) {
1122 manager_.OnRetransmissionTimeout(); 1091 manager_.OnRetransmissionTimeout();
1123 RetransmitNextPacket(i + 2); 1092 RetransmitNextPacket(i + 2);
1124 } 1093 }
1125 // Next RTO should cause network_change_visitor_'s OnPathDegrading method 1094 // Next RTO should cause network_change_visitor_'s OnPathDegrading method
1126 // to be called. 1095 // to be called.
1127 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); 1096 EXPECT_CALL(*network_change_visitor_, OnPathDegrading());
1128 manager_.OnRetransmissionTimeout(); 1097 manager_.OnRetransmissionTimeout();
1129 } 1098 }
1130 1099
1131 TEST_P(QuicSentPacketManagerTest, GetTransmissionTime) { 1100 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) {
1132 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 1101 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
1133 } 1102 }
1134 1103
1135 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { 1104 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) {
1136 SendCryptoPacket(1); 1105 SendCryptoPacket(1);
1137 1106
1138 // Check the min. 1107 // Check the min.
1139 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); 1108 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
1140 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); 1109 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli);
1141 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(10), 1110 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(10),
1142 manager_.GetRetransmissionTime()); 1111 manager_.GetRetransmissionTime());
1143 1112
1144 // Test with a standard smoothed RTT. 1113 // Test with a standard smoothed RTT.
1145 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); 1114 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli);
1146 1115
1147 QuicTime::Delta srtt = 1116 QuicTime::Delta srtt =
1148 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); 1117 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us());
1149 QuicTime expected_time = clock_.Now() + 1.5 * srtt; 1118 QuicTime expected_time = clock_.Now() + 1.5 * srtt;
1150 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1119 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1151 1120
1152 // Retransmit the packet by invoking the retransmission timeout. 1121 // Retransmit the packet by invoking the retransmission timeout.
1153 clock_.AdvanceTime(1.5 * srtt); 1122 clock_.AdvanceTime(1.5 * srtt);
1154 manager_.OnRetransmissionTimeout(); 1123 manager_.OnRetransmissionTimeout();
1155 RetransmitNextPacket(2); 1124 RetransmitNextPacket(2);
1156 1125
1157 // The retransmission time should now be twice as far in the future. 1126 // The retransmission time should now be twice as far in the future.
1158 expected_time = clock_.Now() + srtt * 2 * 1.5; 1127 expected_time = clock_.Now() + srtt * 2 * 1.5;
1159 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1128 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1160 } 1129 }
1161 1130
1162 TEST_P(QuicSentPacketManagerTest, 1131 TEST_F(QuicSentPacketManagerTest,
1163 GetConservativeTransmissionTimeCryptoHandshake) { 1132 GetConservativeTransmissionTimeCryptoHandshake) {
1164 FLAGS_quic_conservative_handshake_retransmits = true; 1133 FLAGS_quic_conservative_handshake_retransmits = true;
1165 QuicConfig config; 1134 QuicConfig config;
1166 QuicTagVector options; 1135 QuicTagVector options;
1167 options.push_back(kCONH); 1136 options.push_back(kCONH);
1168 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1137 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1169 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1138 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1170 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1139 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1171 manager_.SetFromConfig(config); 1140 manager_.SetFromConfig(config);
1172 // Calling SetFromConfig requires mocking out some send algorithm methods. 1141 // Calling SetFromConfig requires mocking out some send algorithm methods.
(...skipping 21 matching lines...) Expand all
1194 // Retransmit the packet by invoking the retransmission timeout. 1163 // Retransmit the packet by invoking the retransmission timeout.
1195 clock_.AdvanceTime(2 * srtt); 1164 clock_.AdvanceTime(2 * srtt);
1196 manager_.OnRetransmissionTimeout(); 1165 manager_.OnRetransmissionTimeout();
1197 RetransmitNextPacket(2); 1166 RetransmitNextPacket(2);
1198 1167
1199 // The retransmission time should now be twice as far in the future. 1168 // The retransmission time should now be twice as far in the future.
1200 expected_time = clock_.Now() + srtt * 2 * 2; 1169 expected_time = clock_.Now() + srtt * 2 * 2;
1201 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1170 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1202 } 1171 }
1203 1172
1204 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { 1173 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) {
1205 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 1174 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
1206 SendDataPacket(1); 1175 SendDataPacket(1);
1207 SendDataPacket(2); 1176 SendDataPacket(2);
1208 1177
1209 // Check the min. 1178 // Check the min.
1210 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); 1179 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
1211 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); 1180 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli);
1212 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(10), 1181 EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(10),
1213 manager_.GetRetransmissionTime()); 1182 manager_.GetRetransmissionTime());
1214 1183
(...skipping 18 matching lines...) Expand all
1233 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 1202 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
1234 .WillOnce(Return(QuicTime::Delta::Infinite())); 1203 .WillOnce(Return(QuicTime::Delta::Infinite()));
1235 EXPECT_EQ(QuicTime::Delta::Infinite(), 1204 EXPECT_EQ(QuicTime::Delta::Infinite(),
1236 manager_.TimeUntilSend(clock_.Now(), &path_id)); 1205 manager_.TimeUntilSend(clock_.Now(), &path_id));
1237 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1206 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1238 1207
1239 expected_time = clock_.Now() + expected_tlp_delay; 1208 expected_time = clock_.Now() + expected_tlp_delay;
1240 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1209 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1241 } 1210 }
1242 1211
1243 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { 1212 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) {
1244 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); 1213 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
1245 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), 1214 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(100),
1246 QuicTime::Delta::Zero(), QuicTime::Zero()); 1215 QuicTime::Delta::Zero(), QuicTime::Zero());
1247 1216
1248 SendDataPacket(1); 1217 SendDataPacket(1);
1249 SendDataPacket(2); 1218 SendDataPacket(2);
1250 SendDataPacket(3); 1219 SendDataPacket(3);
1251 SendDataPacket(4); 1220 SendDataPacket(4);
1252 1221
1253 QuicTime::Delta expected_rto_delay = 1222 QuicTime::Delta expected_rto_delay =
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time 1256 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time
1288 // and the TLP time. In production, there would always be two TLP's first. 1257 // and the TLP time. In production, there would always be two TLP's first.
1289 // Since retransmission was spurious, smoothed_rtt_ is expired, and replaced 1258 // Since retransmission was spurious, smoothed_rtt_ is expired, and replaced
1290 // by the latest RTT sample of 500ms. 1259 // by the latest RTT sample of 500ms.
1291 expected_time = clock_.Now() + QuicTime::Delta::FromMilliseconds(1000); 1260 expected_time = clock_.Now() + QuicTime::Delta::FromMilliseconds(1000);
1292 // Once we always base the timer on the right edge, leaving the older packets 1261 // Once we always base the timer on the right edge, leaving the older packets
1293 // in flight doesn't change the timeout. 1262 // in flight doesn't change the timeout.
1294 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1263 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1295 } 1264 }
1296 1265
1297 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelayMin) { 1266 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) {
1298 SendDataPacket(1); 1267 SendDataPacket(1);
1299 // Provide a 1ms RTT sample. 1268 // Provide a 1ms RTT sample.
1300 const_cast<RttStats*>(manager_.GetRttStats()) 1269 const_cast<RttStats*>(manager_.GetRttStats())
1301 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(1), QuicTime::Delta::Zero(), 1270 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(1), QuicTime::Delta::Zero(),
1302 QuicTime::Zero()); 1271 QuicTime::Zero());
1303 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(200); 1272 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(200);
1304 1273
1305 // If the delay is smaller than the min, ensure it exponentially backs off 1274 // If the delay is smaller than the min, ensure it exponentially backs off
1306 // from the min. 1275 // from the min.
1307 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); 1276 EXPECT_CALL(*network_change_visitor_, OnPathDegrading());
1308 for (int i = 0; i < 5; ++i) { 1277 for (int i = 0; i < 5; ++i) {
1309 EXPECT_EQ(delay, 1278 EXPECT_EQ(delay,
1310 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); 1279 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_));
1311 delay = delay + delay; 1280 delay = delay + delay;
1312 manager_.OnRetransmissionTimeout(); 1281 manager_.OnRetransmissionTimeout();
1313 RetransmitNextPacket(i + 2); 1282 RetransmitNextPacket(i + 2);
1314 } 1283 }
1315 } 1284 }
1316 1285
1317 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelayMax) { 1286 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) {
1318 SendDataPacket(1); 1287 SendDataPacket(1);
1319 // Provide a 60s RTT sample. 1288 // Provide a 60s RTT sample.
1320 const_cast<RttStats*>(manager_.GetRttStats()) 1289 const_cast<RttStats*>(manager_.GetRttStats())
1321 ->UpdateRtt(QuicTime::Delta::FromSeconds(60), QuicTime::Delta::Zero(), 1290 ->UpdateRtt(QuicTime::Delta::FromSeconds(60), QuicTime::Delta::Zero(),
1322 QuicTime::Zero()); 1291 QuicTime::Zero());
1323 1292
1324 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), 1293 EXPECT_EQ(QuicTime::Delta::FromSeconds(60),
1325 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); 1294 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_));
1326 } 1295 }
1327 1296
1328 TEST_P(QuicSentPacketManagerTest, GetTransmissionDelayExponentialBackoff) { 1297 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayExponentialBackoff) {
1329 SendDataPacket(1); 1298 SendDataPacket(1);
1330 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); 1299 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
1331 1300
1332 // Delay should back off exponentially. 1301 // Delay should back off exponentially.
1333 EXPECT_CALL(*network_change_visitor_, OnPathDegrading()); 1302 EXPECT_CALL(*network_change_visitor_, OnPathDegrading());
1334 for (int i = 0; i < 5; ++i) { 1303 for (int i = 0; i < 5; ++i) {
1335 EXPECT_EQ(delay, 1304 EXPECT_EQ(delay,
1336 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); 1305 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_));
1337 delay = delay + delay; 1306 delay = delay + delay;
1338 manager_.OnRetransmissionTimeout(); 1307 manager_.OnRetransmissionTimeout();
(...skipping 28 matching lines...) Expand all
1367 } 1336 }
1368 expected_delay = QuicTime::Delta::FromMilliseconds(kRttMs + kDeviationMs * 4); 1337 expected_delay = QuicTime::Delta::FromMilliseconds(kRttMs + kDeviationMs * 4);
1369 1338
1370 EXPECT_NEAR(kRttMs, rtt_stats->smoothed_rtt().ToMilliseconds(), 1); 1339 EXPECT_NEAR(kRttMs, rtt_stats->smoothed_rtt().ToMilliseconds(), 1);
1371 EXPECT_NEAR(expected_delay.ToMilliseconds(), 1340 EXPECT_NEAR(expected_delay.ToMilliseconds(),
1372 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_) 1341 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)
1373 .ToMilliseconds(), 1342 .ToMilliseconds(),
1374 1); 1343 1);
1375 } 1344 }
1376 1345
1377 TEST_P(QuicSentPacketManagerTest, GetLossDelay) { 1346 TEST_F(QuicSentPacketManagerTest, GetLossDelay) {
1378 auto loss_algorithm = base::MakeUnique<MockLossAlgorithm>(); 1347 auto loss_algorithm = base::MakeUnique<MockLossAlgorithm>();
1379 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get()); 1348 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm.get());
1380 1349
1381 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) 1350 EXPECT_CALL(*loss_algorithm, GetLossTimeout())
1382 .WillRepeatedly(Return(QuicTime::Zero())); 1351 .WillRepeatedly(Return(QuicTime::Zero()));
1383 SendDataPacket(1); 1352 SendDataPacket(1);
1384 SendDataPacket(2); 1353 SendDataPacket(2);
1385 1354
1386 // Handle an ack which causes the loss algorithm to be evaluated and 1355 // Handle an ack which causes the loss algorithm to be evaluated and
1387 // set the loss timeout. 1356 // set the loss timeout.
1388 ExpectAck(2); 1357 ExpectAck(2);
1389 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 1358 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
1390 QuicAckFrame ack_frame = InitAckFrame(2); 1359 QuicAckFrame ack_frame = InitAckFrame(2);
1391 NackPackets(1, 2, &ack_frame); 1360 NackPackets(1, 2, &ack_frame);
1392 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1361 manager_.OnIncomingAck(ack_frame, clock_.Now());
1393 1362
1394 QuicTime timeout(clock_.Now() + QuicTime::Delta::FromMilliseconds(10)); 1363 QuicTime timeout(clock_.Now() + QuicTime::Delta::FromMilliseconds(10));
1395 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) 1364 EXPECT_CALL(*loss_algorithm, GetLossTimeout())
1396 .WillRepeatedly(Return(timeout)); 1365 .WillRepeatedly(Return(timeout));
1397 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); 1366 EXPECT_EQ(timeout, manager_.GetRetransmissionTime());
1398 1367
1399 // Fire the retransmission timeout and ensure the loss detection algorithm 1368 // Fire the retransmission timeout and ensure the loss detection algorithm
1400 // is invoked. 1369 // is invoked.
1401 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 1370 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
1402 manager_.OnRetransmissionTimeout(); 1371 manager_.OnRetransmissionTimeout();
1403 } 1372 }
1404 1373
1405 TEST_P(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { 1374 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) {
1406 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) 1375 EXPECT_EQ(kNack, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_)
1407 ->GetLossDetectionType()); 1376 ->GetLossDetectionType());
1408 1377
1409 QuicConfig config; 1378 QuicConfig config;
1410 QuicTagVector options; 1379 QuicTagVector options;
1411 options.push_back(kTIME); 1380 options.push_back(kTIME);
1412 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1381 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1413 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1382 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1414 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1383 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1415 manager_.SetFromConfig(config); 1384 manager_.SetFromConfig(config);
1416 1385
1417 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_) 1386 EXPECT_EQ(kTime, QuicSentPacketManagerPeer::GetLossAlgorithm(&manager_)
1418 ->GetLossDetectionType()); 1387 ->GetLossDetectionType());
1419 } 1388 }
1420 1389
1421 TEST_P(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) { 1390 TEST_F(QuicSentPacketManagerTest, NegotiateCongestionControlFromOptions) {
1422 FLAGS_quic_allow_new_bbr = true; 1391 FLAGS_quic_allow_new_bbr = true;
1423 QuicConfig config; 1392 QuicConfig config;
1424 QuicTagVector options; 1393 QuicTagVector options;
1425 1394
1426 options.push_back(kRENO); 1395 options.push_back(kRENO);
1427 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1396 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1428 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1397 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1429 manager_.SetFromConfig(config); 1398 manager_.SetFromConfig(config);
1430 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) 1399 EXPECT_EQ(kReno, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_)
1431 ->GetCongestionControlType()); 1400 ->GetCongestionControlType());
(...skipping 22 matching lines...) Expand all
1454 options.clear(); 1423 options.clear();
1455 options.push_back(kRENO); 1424 options.push_back(kRENO);
1456 options.push_back(kBYTE); 1425 options.push_back(kBYTE);
1457 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1426 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1458 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1427 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1459 manager_.SetFromConfig(config); 1428 manager_.SetFromConfig(config);
1460 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_) 1429 EXPECT_EQ(kRenoBytes, QuicSentPacketManagerPeer::GetSendAlgorithm(manager_)
1461 ->GetCongestionControlType()); 1430 ->GetCongestionControlType());
1462 } 1431 }
1463 1432
1464 TEST_P(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) { 1433 TEST_F(QuicSentPacketManagerTest, NegotiateNumConnectionsFromOptions) {
1465 QuicConfig config; 1434 QuicConfig config;
1466 QuicTagVector options; 1435 QuicTagVector options;
1467 1436
1468 options.push_back(k1CON); 1437 options.push_back(k1CON);
1469 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1438 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1470 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1439 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1471 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); 1440 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1));
1472 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1441 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1473 manager_.SetFromConfig(config); 1442 manager_.SetFromConfig(config);
1474 1443
1475 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1444 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1476 QuicConfig client_config; 1445 QuicConfig client_config;
1477 client_config.SetConnectionOptionsToSend(options); 1446 client_config.SetConnectionOptionsToSend(options);
1478 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1447 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1479 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1)); 1448 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(1));
1480 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1449 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1481 manager_.SetFromConfig(client_config); 1450 manager_.SetFromConfig(client_config);
1482 } 1451 }
1483 1452
1484 TEST_P(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) { 1453 TEST_F(QuicSentPacketManagerTest, NegotiateNConnectionFromOptions) {
1485 // By default, changing the number of open streams does nothing. 1454 // By default, changing the number of open streams does nothing.
1486 manager_.SetNumOpenStreams(5); 1455 manager_.SetNumOpenStreams(5);
1487 1456
1488 QuicConfig config; 1457 QuicConfig config;
1489 QuicTagVector options; 1458 QuicTagVector options;
1490 1459
1491 options.push_back(kNCON); 1460 options.push_back(kNCON);
1492 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1461 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1493 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1462 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1494 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1463 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1495 manager_.SetFromConfig(config); 1464 manager_.SetFromConfig(config);
1496 1465
1497 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5)); 1466 EXPECT_CALL(*send_algorithm_, SetNumEmulatedConnections(5));
1498 manager_.SetNumOpenStreams(5); 1467 manager_.SetNumOpenStreams(5);
1499 } 1468 }
1500 1469
1501 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) { 1470 TEST_F(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtServer) {
1502 QuicConfig config; 1471 QuicConfig config;
1503 QuicTagVector options; 1472 QuicTagVector options;
1504 1473
1505 options.push_back(kNTLP); 1474 options.push_back(kNTLP);
1506 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1475 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1507 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1476 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1508 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1477 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1509 manager_.SetFromConfig(config); 1478 manager_.SetFromConfig(config);
1510 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); 1479 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_));
1511 } 1480 }
1512 1481
1513 TEST_P(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) { 1482 TEST_F(QuicSentPacketManagerTest, NegotiateNoTLPFromOptionsAtClient) {
1514 QuicConfig client_config; 1483 QuicConfig client_config;
1515 QuicTagVector options; 1484 QuicTagVector options;
1516 1485
1517 options.push_back(kNTLP); 1486 options.push_back(kNTLP);
1518 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1487 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1519 client_config.SetConnectionOptionsToSend(options); 1488 client_config.SetConnectionOptionsToSend(options);
1520 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1489 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1521 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1490 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1522 manager_.SetFromConfig(client_config); 1491 manager_.SetFromConfig(client_config);
1523 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_)); 1492 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetMaxTailLossProbes(&manager_));
1524 } 1493 }
1525 1494
1526 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) { 1495 TEST_F(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtServer) {
1527 QuicConfig config; 1496 QuicConfig config;
1528 QuicTagVector options; 1497 QuicTagVector options;
1529 1498
1530 options.push_back(kTLPR); 1499 options.push_back(kTLPR);
1531 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1500 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1532 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1501 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1533 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1502 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1534 manager_.SetFromConfig(config); 1503 manager_.SetFromConfig(config);
1535 EXPECT_TRUE( 1504 EXPECT_TRUE(
1536 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); 1505 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_));
1537 } 1506 }
1538 1507
1539 TEST_P(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) { 1508 TEST_F(QuicSentPacketManagerTest, NegotiateTLPRttFromOptionsAtClient) {
1540 QuicConfig client_config; 1509 QuicConfig client_config;
1541 QuicTagVector options; 1510 QuicTagVector options;
1542 1511
1543 options.push_back(kTLPR); 1512 options.push_back(kTLPR);
1544 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1513 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1545 client_config.SetConnectionOptionsToSend(options); 1514 client_config.SetConnectionOptionsToSend(options);
1546 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1515 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1547 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1516 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1548 manager_.SetFromConfig(client_config); 1517 manager_.SetFromConfig(client_config);
1549 EXPECT_TRUE( 1518 EXPECT_TRUE(
1550 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_)); 1519 QuicSentPacketManagerPeer::GetEnableHalfRttTailLossProbe(&manager_));
1551 } 1520 }
1552 1521
1553 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) { 1522 TEST_F(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtServer) {
1554 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1523 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1555 QuicConfig config; 1524 QuicConfig config;
1556 QuicTagVector options; 1525 QuicTagVector options;
1557 1526
1558 options.push_back(kNRTO); 1527 options.push_back(kNRTO);
1559 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1528 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1560 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1529 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1561 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1530 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1562 manager_.SetFromConfig(config); 1531 manager_.SetFromConfig(config);
1563 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1532 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1564 } 1533 }
1565 1534
1566 TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) { 1535 TEST_F(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) {
1567 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1536 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1568 QuicConfig client_config; 1537 QuicConfig client_config;
1569 QuicTagVector options; 1538 QuicTagVector options;
1570 1539
1571 options.push_back(kNRTO); 1540 options.push_back(kNRTO);
1572 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1541 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1573 client_config.SetConnectionOptionsToSend(options); 1542 client_config.SetConnectionOptionsToSend(options);
1574 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1543 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1575 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1544 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1576 manager_.SetFromConfig(client_config); 1545 manager_.SetFromConfig(client_config);
1577 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); 1546 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
1578 } 1547 }
1579 1548
1580 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtServer) { 1549 TEST_F(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtServer) {
1581 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); 1550 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
1582 QuicConfig config; 1551 QuicConfig config;
1583 QuicTagVector options; 1552 QuicTagVector options;
1584 1553
1585 options.push_back(kUNDO); 1554 options.push_back(kUNDO);
1586 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1555 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1587 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1556 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1588 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1557 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1589 manager_.SetFromConfig(config); 1558 manager_.SetFromConfig(config);
1590 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); 1559 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
(...skipping 30 matching lines...) Expand all
1621 1590
1622 // Ack 1 and ensure the retransmissions are cancelled and put back in flight. 1591 // Ack 1 and ensure the retransmissions are cancelled and put back in flight.
1623 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); 1592 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
1624 ack_frame = InitAckFrame(5); 1593 ack_frame = InitAckFrame(5);
1625 NackPackets(2, kNumSentPackets, &ack_frame); 1594 NackPackets(2, kNumSentPackets, &ack_frame);
1626 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1595 manager_.OnIncomingAck(ack_frame, clock_.Now());
1627 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1596 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1628 EXPECT_EQ(3u * kDefaultLength, BytesInFlight()); 1597 EXPECT_EQ(3u * kDefaultLength, BytesInFlight());
1629 } 1598 }
1630 1599
1631 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) { 1600 TEST_F(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) {
1632 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); 1601 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
1633 QuicConfig client_config; 1602 QuicConfig client_config;
1634 QuicTagVector options; 1603 QuicTagVector options;
1635 1604
1636 options.push_back(kUNDO); 1605 options.push_back(kUNDO);
1637 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); 1606 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
1638 client_config.SetConnectionOptionsToSend(options); 1607 client_config.SetConnectionOptionsToSend(options);
1639 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1608 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1640 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1609 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1641 manager_.SetFromConfig(client_config); 1610 manager_.SetFromConfig(client_config);
1642 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); 1611 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
1643 } 1612 }
1644 1613
1645 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { 1614 TEST_F(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) {
1646 uint32_t initial_rtt_us = 325000; 1615 uint32_t initial_rtt_us = 325000;
1647 EXPECT_NE(initial_rtt_us, 1616 EXPECT_NE(initial_rtt_us,
1648 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); 1617 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds());
1649 1618
1650 QuicConfig config; 1619 QuicConfig config;
1651 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); 1620 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us);
1652 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1621 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1653 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); 1622 EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
1654 manager_.SetFromConfig(config); 1623 manager_.SetFromConfig(config);
1655 1624
1656 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); 1625 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds());
1657 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us()); 1626 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us());
1658 } 1627 }
1659 1628
1660 TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) { 1629 TEST_F(QuicSentPacketManagerTest, ResumeConnectionState) {
1661 // The sent packet manager should use the RTT from CachedNetworkParameters if 1630 // The sent packet manager should use the RTT from CachedNetworkParameters if
1662 // it is provided. 1631 // it is provided.
1663 const int kRttMs = 1234; 1632 const int kRttMs = 1234;
1664 CachedNetworkParameters cached_network_params; 1633 CachedNetworkParameters cached_network_params;
1665 cached_network_params.set_min_rtt_ms(kRttMs); 1634 cached_network_params.set_min_rtt_ms(kRttMs);
1666 1635
1667 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_, false)); 1636 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_, false));
1668 manager_.ResumeConnectionState(cached_network_params, false); 1637 manager_.ResumeConnectionState(cached_network_params, false);
1669 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, 1638 EXPECT_EQ(kRttMs * kNumMicrosPerMilli,
1670 static_cast<uint64_t>(manager_.GetRttStats()->initial_rtt_us())); 1639 static_cast<uint64_t>(manager_.GetRttStats()->initial_rtt_us()));
1671 } 1640 }
1672 1641
1673 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) { 1642 TEST_F(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) {
1674 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); 1643 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
1675 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); 1644 int64_t default_init_rtt = rtt_stats->initial_rtt_us();
1676 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); 1645 rtt_stats->set_initial_rtt_us(default_init_rtt * 2);
1677 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); 1646 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
1678 1647
1679 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); 1648 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1);
1680 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); 1649 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount());
1681 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); 1650 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2);
1682 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); 1651 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount());
1683 1652
1684 EXPECT_CALL(*send_algorithm_, OnConnectionMigration()); 1653 EXPECT_CALL(*send_algorithm_, OnConnectionMigration());
1685 manager_.OnConnectionMigration(kDefaultPathId, IPV4_TO_IPV4_CHANGE); 1654 manager_.OnConnectionMigration(kDefaultPathId, IPV4_TO_IPV4_CHANGE);
1686 1655
1687 EXPECT_EQ(default_init_rtt, rtt_stats->initial_rtt_us()); 1656 EXPECT_EQ(default_init_rtt, rtt_stats->initial_rtt_us());
1688 EXPECT_EQ(0u, manager_.GetConsecutiveRtoCount()); 1657 EXPECT_EQ(0u, manager_.GetConsecutiveRtoCount());
1689 EXPECT_EQ(0u, manager_.GetConsecutiveTlpCount()); 1658 EXPECT_EQ(0u, manager_.GetConsecutiveTlpCount());
1690 } 1659 }
1691 1660
1692 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) { 1661 TEST_F(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) {
1693 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); 1662 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
1694 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); 1663 int64_t default_init_rtt = rtt_stats->initial_rtt_us();
1695 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); 1664 rtt_stats->set_initial_rtt_us(default_init_rtt * 2);
1696 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); 1665 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
1697 1666
1698 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); 1667 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1);
1699 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); 1668 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount());
1700 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); 1669 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2);
1701 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); 1670 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount());
1702 1671
1703 manager_.OnConnectionMigration(kDefaultPathId, IPV4_SUBNET_CHANGE); 1672 manager_.OnConnectionMigration(kDefaultPathId, IPV4_SUBNET_CHANGE);
1704 1673
1705 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); 1674 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
1706 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); 1675 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount());
1707 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); 1676 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount());
1708 } 1677 }
1709 1678
1710 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationPortChange) { 1679 TEST_F(QuicSentPacketManagerTest, ConnectionMigrationPortChange) {
1711 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); 1680 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
1712 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); 1681 int64_t default_init_rtt = rtt_stats->initial_rtt_us();
1713 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); 1682 rtt_stats->set_initial_rtt_us(default_init_rtt * 2);
1714 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); 1683 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
1715 1684
1716 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); 1685 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1);
1717 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); 1686 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount());
1718 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); 1687 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2);
1719 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); 1688 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount());
1720 1689
1721 manager_.OnConnectionMigration(kDefaultPathId, PORT_CHANGE); 1690 manager_.OnConnectionMigration(kDefaultPathId, PORT_CHANGE);
1722 1691
1723 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); 1692 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
1724 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); 1693 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount());
1725 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); 1694 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount());
1726 } 1695 }
1727 1696
1728 TEST_P(QuicSentPacketManagerTest, PathMtuIncreased) { 1697 TEST_F(QuicSentPacketManagerTest, PathMtuIncreased) {
1729 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, BytesInFlight(), 1, _, _)) 1698 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, BytesInFlight(), 1, _, _))
1730 .Times(1) 1699 .Times(1)
1731 .WillOnce(Return(true)); 1700 .WillOnce(Return(true));
1732 SerializedPacket packet(kDefaultPathId, 1, PACKET_6BYTE_PACKET_NUMBER, 1701 SerializedPacket packet(kDefaultPathId, 1, PACKET_6BYTE_PACKET_NUMBER,
1733 nullptr, kDefaultLength + 100, 0u, false, false); 1702 nullptr, kDefaultLength + 100, false, false);
1734 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), 1703 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(),
1735 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 1704 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
1736 1705
1737 // Ack the large packet and expect the path MTU to increase. 1706 // Ack the large packet and expect the path MTU to increase.
1738 ExpectAck(1); 1707 ExpectAck(1);
1739 EXPECT_CALL(*network_change_visitor_, 1708 EXPECT_CALL(*network_change_visitor_,
1740 OnPathMtuIncreased(kDefaultLength + 100)); 1709 OnPathMtuIncreased(kDefaultLength + 100));
1741 QuicAckFrame ack_frame = InitAckFrame(1); 1710 QuicAckFrame ack_frame = InitAckFrame(1);
1742 manager_.OnIncomingAck(ack_frame, clock_.Now()); 1711 manager_.OnIncomingAck(ack_frame, clock_.Now());
1743 } 1712 }
1744 1713
1745 } // namespace 1714 } // namespace
1746 } // namespace test 1715 } // namespace test
1747 } // namespace net 1716 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_sent_packet_manager.cc ('k') | net/quic/core/quic_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698