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

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

Issue 420313005: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0723
Patch Set: change QUIC packet size to 1350 Created 6 years, 4 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
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 26 matching lines...) Expand all
37 class MockDebugDelegate : public QuicSentPacketManager::DebugDelegate { 37 class MockDebugDelegate : public QuicSentPacketManager::DebugDelegate {
38 public: 38 public:
39 MOCK_METHOD2(OnSpuriousPacketRetransmition, 39 MOCK_METHOD2(OnSpuriousPacketRetransmition,
40 void(TransmissionType transmission_type, 40 void(TransmissionType transmission_type,
41 QuicByteCount byte_size)); 41 QuicByteCount byte_size));
42 }; 42 };
43 43
44 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { 44 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> {
45 protected: 45 protected:
46 QuicSentPacketManagerTest() 46 QuicSentPacketManagerTest()
47 : manager_(true, &clock_, &stats_, kFixRateCongestionControl, kNack), 47 : manager_(true, &clock_, &stats_, kCubic, kNack),
48 send_algorithm_(new StrictMock<MockSendAlgorithm>), 48 send_algorithm_(new StrictMock<MockSendAlgorithm>),
49 network_change_visitor_(new StrictMock<MockNetworkChangeVisitor>) { 49 network_change_visitor_(new StrictMock<MockNetworkChangeVisitor>) {
50 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); 50 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_);
51 // Disable tail loss probes for most tests. 51 // Disable tail loss probes for most tests.
52 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); 52 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0);
53 // Advance the time 1s so the send times are never QuicTime::Zero. 53 // Advance the time 1s so the send times are never QuicTime::Zero.
54 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); 54 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000));
55 manager_.set_network_change_visitor(network_change_visitor_.get()); 55 manager_.set_network_change_visitor(network_change_visitor_.get());
56 } 56 }
57 57
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 VerifyUnackedPackets(unacked, arraysize(unacked)); 294 VerifyUnackedPackets(unacked, arraysize(unacked));
295 QuicPacketSequenceNumber retransmittable[] = { 2 }; 295 QuicPacketSequenceNumber retransmittable[] = { 2 };
296 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 296 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
297 } 297 }
298 298
299 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { 299 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
300 SendDataPacket(1); 300 SendDataPacket(1);
301 RetransmitAndSendPacket(1, 2); 301 RetransmitAndSendPacket(1, 2);
302 302
303 // Ack 2 but not 1. 303 // Ack 2 but not 1.
304 ReceivedPacketInfo received_info; 304 QuicAckFrame ack_frame;
305 received_info.largest_observed = 2; 305 ack_frame.largest_observed = 2;
306 received_info.missing_packets.insert(1); 306 ack_frame.missing_packets.insert(1);
307 ExpectAck(2); 307 ExpectAck(2);
308 manager_.OnIncomingAck(received_info, clock_.Now()); 308 manager_.OnIncomingAck(ack_frame, clock_.Now());
309 309
310 // Packet 1 is unacked, pending, but not retransmittable. 310 // Packet 1 is unacked, pending, but not retransmittable.
311 QuicPacketSequenceNumber unacked[] = { 1 }; 311 QuicPacketSequenceNumber unacked[] = { 1 };
312 VerifyUnackedPackets(unacked, arraysize(unacked)); 312 VerifyUnackedPackets(unacked, arraysize(unacked));
313 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 313 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
314 VerifyRetransmittablePackets(NULL, 0); 314 VerifyRetransmittablePackets(NULL, 0);
315 } 315 }
316 316
317 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { 317 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) {
318 SendDataPacket(1); 318 SendDataPacket(1);
319 QuicSentPacketManagerPeer::MarkForRetransmission( 319 QuicSentPacketManagerPeer::MarkForRetransmission(
320 &manager_, 1, TLP_RETRANSMISSION); 320 &manager_, 1, TLP_RETRANSMISSION);
321 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 321 EXPECT_TRUE(manager_.HasPendingRetransmissions());
322 322
323 // Ack 1. 323 // Ack 1.
324 ReceivedPacketInfo received_info; 324 QuicAckFrame ack_frame;
325 received_info.largest_observed = 1; 325 ack_frame.largest_observed = 1;
326 ExpectAck(1); 326 ExpectAck(1);
327 manager_.OnIncomingAck(received_info, clock_.Now()); 327 manager_.OnIncomingAck(ack_frame, clock_.Now());
328 328
329 // There should no longer be a pending retransmission. 329 // There should no longer be a pending retransmission.
330 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 330 EXPECT_FALSE(manager_.HasPendingRetransmissions());
331 331
332 // No unacked packets remain. 332 // No unacked packets remain.
333 VerifyUnackedPackets(NULL, 0); 333 VerifyUnackedPackets(NULL, 0);
334 VerifyRetransmittablePackets(NULL, 0); 334 VerifyRetransmittablePackets(NULL, 0);
335 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); 335 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted);
336 } 336 }
337 337
338 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { 338 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) {
339 SendDataPacket(1); 339 SendDataPacket(1);
340 RetransmitPacket(1, 2); 340 RetransmitPacket(1, 2);
341 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 341 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
342 clock_.AdvanceTime(rtt); 342 clock_.AdvanceTime(rtt);
343 343
344 // Ack 1 but not 2. 344 // Ack 1 but not 2.
345 ExpectAck(1); 345 ExpectAck(1);
346 ReceivedPacketInfo received_info; 346 QuicAckFrame ack_frame;
347 received_info.largest_observed = 1; 347 ack_frame.largest_observed = 1;
348 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 348 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
349 349
350 // 2 should be unacked, since it may provide an RTT measurement. 350 // 2 should be unacked, since it may provide an RTT measurement.
351 QuicPacketSequenceNumber unacked[] = { 2 }; 351 QuicPacketSequenceNumber unacked[] = { 2 };
352 VerifyUnackedPackets(unacked, arraysize(unacked)); 352 VerifyUnackedPackets(unacked, arraysize(unacked));
353 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 353 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
354 VerifyRetransmittablePackets(NULL, 0); 354 VerifyRetransmittablePackets(NULL, 0);
355 355
356 // Verify that the retransmission alarm would not fire, 356 // Verify that the retransmission alarm would not fire,
357 // since there is no retransmittable data outstanding. 357 // since there is no retransmittable data outstanding.
358 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 358 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
359 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 359 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
360 } 360 }
361 361
362 TEST_F(QuicSentPacketManagerTest, RetransmitAndSendThenAckPrevious) { 362 TEST_F(QuicSentPacketManagerTest, RetransmitAndSendThenAckPrevious) {
363 SendDataPacket(1); 363 SendDataPacket(1);
364 RetransmitAndSendPacket(1, 2); 364 RetransmitAndSendPacket(1, 2);
365 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 365 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
366 clock_.AdvanceTime(rtt); 366 clock_.AdvanceTime(rtt);
367 367
368 // Ack 1 but not 2. 368 // Ack 1 but not 2.
369 ExpectAck(1); 369 ExpectAck(1);
370 ReceivedPacketInfo received_info; 370 QuicAckFrame ack_frame;
371 received_info.largest_observed = 1; 371 ack_frame.largest_observed = 1;
372 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 372 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
373 373
374 // 2 remains unacked, but no packets have retransmittable data. 374 // 2 remains unacked, but no packets have retransmittable data.
375 QuicPacketSequenceNumber unacked[] = { 2 }; 375 QuicPacketSequenceNumber unacked[] = { 2 };
376 VerifyUnackedPackets(unacked, arraysize(unacked)); 376 VerifyUnackedPackets(unacked, arraysize(unacked));
377 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 377 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
378 VerifyRetransmittablePackets(NULL, 0); 378 VerifyRetransmittablePackets(NULL, 0);
379 379
380 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 380 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
381 } 381 }
382 382
383 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { 383 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) {
384 SendDataPacket(1); 384 SendDataPacket(1);
385 RetransmitPacket(1, 2); 385 RetransmitPacket(1, 2);
386 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _)) 386 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _))
387 .WillOnce(Return(true)); 387 .WillOnce(Return(true));
388 manager_.OnPacketSent(2, clock_.ApproximateNow(), kDefaultLength, 388 manager_.OnPacketSent(2, clock_.ApproximateNow(), kDefaultLength,
389 LOSS_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 389 LOSS_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
390 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 390 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
391 clock_.AdvanceTime(rtt); 391 clock_.AdvanceTime(rtt);
392 392
393 // First, ACK packet 1 which makes packet 2 non-retransmittable. 393 // First, ACK packet 1 which makes packet 2 non-retransmittable.
394 ExpectAck(1); 394 ExpectAck(1);
395 ReceivedPacketInfo received_info; 395 QuicAckFrame ack_frame;
396 received_info.largest_observed = 1; 396 ack_frame.largest_observed = 1;
397 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 397 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
398 398
399 SendDataPacket(3); 399 SendDataPacket(3);
400 SendDataPacket(4); 400 SendDataPacket(4);
401 SendDataPacket(5); 401 SendDataPacket(5);
402 clock_.AdvanceTime(rtt); 402 clock_.AdvanceTime(rtt);
403 403
404 // Next, NACK packet 2 three times. 404 // Next, NACK packet 2 three times.
405 received_info.largest_observed = 3; 405 ack_frame.largest_observed = 3;
406 received_info.missing_packets.insert(2); 406 ack_frame.missing_packets.insert(2);
407 ExpectAck(3); 407 ExpectAck(3);
408 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 408 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
409 409
410 received_info.largest_observed = 4; 410 ack_frame.largest_observed = 4;
411 ExpectAck(4); 411 ExpectAck(4);
412 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 412 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
413 413
414 received_info.largest_observed = 5; 414 ack_frame.largest_observed = 5;
415 ExpectAckAndLoss(true, 5, 2); 415 ExpectAckAndLoss(true, 5, 2);
416 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 416 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
417 417
418 // No packets remain unacked. 418 // No packets remain unacked.
419 VerifyUnackedPackets(NULL, 0); 419 VerifyUnackedPackets(NULL, 0);
420 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 420 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
421 VerifyRetransmittablePackets(NULL, 0); 421 VerifyRetransmittablePackets(NULL, 0);
422 422
423 // Verify that the retransmission alarm would not fire, 423 // Verify that the retransmission alarm would not fire,
424 // since there is no retransmittable data outstanding. 424 // since there is no retransmittable data outstanding.
425 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 425 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
426 } 426 }
427 427
428 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { 428 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) {
429 SendDataPacket(1); 429 SendDataPacket(1);
430 RetransmitAndSendPacket(1, 2); 430 RetransmitAndSendPacket(1, 2);
431 431
432 // Fire the RTO, which will mark 2 for retransmission (but will not send it). 432 // Fire the RTO, which will mark 2 for retransmission (but will not send it).
433 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 433 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
434 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)); 434 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_));
435 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) 435 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
436 .WillOnce(Return(2 * kDefaultTCPMSS)); 436 .WillOnce(Return(2 * kDefaultTCPMSS));
437 manager_.OnRetransmissionTimeout(); 437 manager_.OnRetransmissionTimeout();
438 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 438 EXPECT_TRUE(manager_.HasPendingRetransmissions());
439 439
440 // Ack 1 but not 2, before 2 is able to be sent. 440 // Ack 1 but not 2, before 2 is able to be sent.
441 // Since 1 has been retransmitted, it has already been lost, and so the 441 // Since 1 has been retransmitted, it has already been lost, and so the
442 // send algorithm is not informed that it has been ACK'd. 442 // send algorithm is not informed that it has been ACK'd.
443 ReceivedPacketInfo received_info; 443 QuicAckFrame ack_frame;
444 received_info.largest_observed = 1; 444 ack_frame.largest_observed = 1;
445 ExpectUpdatedRtt(1); 445 ExpectUpdatedRtt(1);
446 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); 446 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
447 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 447 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
448 448
449 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT. 449 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT.
450 QuicPacketSequenceNumber unacked[] = { 2 }; 450 QuicPacketSequenceNumber unacked[] = { 2 };
451 VerifyUnackedPackets(unacked, arraysize(unacked)); 451 VerifyUnackedPackets(unacked, arraysize(unacked));
452 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 452 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
453 VerifyRetransmittablePackets(NULL, 0); 453 VerifyRetransmittablePackets(NULL, 0);
454 454
455 // Verify that the retransmission alarm would not fire, 455 // Verify that the retransmission alarm would not fire,
456 // since there is no retransmittable data outstanding. 456 // since there is no retransmittable data outstanding.
457 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); 457 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
458 } 458 }
459 459
460 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { 460 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
461 StrictMock<MockDebugDelegate> debug_delegate; 461 StrictMock<MockDebugDelegate> debug_delegate;
462 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition( 462 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition(
463 TLP_RETRANSMISSION, kDefaultLength)).Times(2); 463 TLP_RETRANSMISSION, kDefaultLength)).Times(2);
464 manager_.set_debug_delegate(&debug_delegate); 464 manager_.set_debug_delegate(&debug_delegate);
465 465
466 SendDataPacket(1); 466 SendDataPacket(1);
467 RetransmitAndSendPacket(1, 2); 467 RetransmitAndSendPacket(1, 2);
468 RetransmitAndSendPacket(2, 3); 468 RetransmitAndSendPacket(2, 3);
469 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 469 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
470 clock_.AdvanceTime(rtt); 470 clock_.AdvanceTime(rtt);
471 471
472 // Ack 1 but not 2 or 3. 472 // Ack 1 but not 2 or 3.
473 ExpectAck(1); 473 ExpectAck(1);
474 ReceivedPacketInfo received_info; 474 QuicAckFrame ack_frame;
475 received_info.largest_observed = 1; 475 ack_frame.largest_observed = 1;
476 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 476 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
477 477
478 // 2 and 3 remain unacked, but no packets have retransmittable data. 478 // 2 and 3 remain unacked, but no packets have retransmittable data.
479 QuicPacketSequenceNumber unacked[] = { 2, 3 }; 479 QuicPacketSequenceNumber unacked[] = { 2, 3 };
480 VerifyUnackedPackets(unacked, arraysize(unacked)); 480 VerifyUnackedPackets(unacked, arraysize(unacked));
481 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 481 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
482 VerifyRetransmittablePackets(NULL, 0); 482 VerifyRetransmittablePackets(NULL, 0);
483 483
484 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked. 484 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked.
485 SendDataPacket(4); 485 SendDataPacket(4);
486 received_info.largest_observed = 4; 486 ack_frame.largest_observed = 4;
487 received_info.missing_packets.insert(2); 487 ack_frame.missing_packets.insert(2);
488 QuicPacketSequenceNumber acked[] = { 3, 4 }; 488 QuicPacketSequenceNumber acked[] = { 3, 4 };
489 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); 489 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0);
490 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 490 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
491 491
492 QuicPacketSequenceNumber unacked2[] = { 2 }; 492 QuicPacketSequenceNumber unacked2[] = { 2 };
493 VerifyUnackedPackets(unacked2, arraysize(unacked2)); 493 VerifyUnackedPackets(unacked2, arraysize(unacked2));
494 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 494 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
495 495
496 SendDataPacket(5); 496 SendDataPacket(5);
497 received_info.largest_observed = 5; 497 ack_frame.largest_observed = 5;
498 ExpectAckAndLoss(true, 5, 2); 498 ExpectAckAndLoss(true, 5, 2);
499 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 499 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
500 500
501 VerifyUnackedPackets(NULL, 0); 501 VerifyUnackedPackets(NULL, 0);
502 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 502 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
503 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); 503 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted);
504 } 504 }
505 505
506 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) { 506 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) {
507 SendDataPacket(1); 507 SendDataPacket(1);
508 SendDataPacket(2); 508 SendDataPacket(2);
509 SendFecPacket(3); 509 SendFecPacket(3);
510 SendDataPacket(4); 510 SendDataPacket(4);
511 511
512 // Ack 2 and 3, and mark 1 as revived. 512 // Ack 2 and 3, and mark 1 as revived.
513 ReceivedPacketInfo received_info; 513 QuicAckFrame ack_frame;
514 received_info.largest_observed = 3; 514 ack_frame.largest_observed = 3;
515 received_info.missing_packets.insert(1); 515 ack_frame.missing_packets.insert(1);
516 received_info.revived_packets.insert(1); 516 ack_frame.revived_packets.insert(1);
517 QuicPacketSequenceNumber acked[] = { 2, 3 }; 517 QuicPacketSequenceNumber acked[] = { 2, 3 };
518 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); 518 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0);
519 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 519 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
520 520
521 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 521 EXPECT_FALSE(manager_.HasPendingRetransmissions());
522 QuicPacketSequenceNumber unacked[] = { 1, 4 }; 522 QuicPacketSequenceNumber unacked[] = { 1, 4 };
523 VerifyUnackedPackets(unacked, arraysize(unacked)); 523 VerifyUnackedPackets(unacked, arraysize(unacked));
524 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 524 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
525 QuicPacketSequenceNumber retransmittable[] = { 4 }; 525 QuicPacketSequenceNumber retransmittable[] = { 4 };
526 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 526 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
527 527
528 // Ack the 4th packet and expect the 1st to be considered lost. 528 // Ack the 4th packet and expect the 1st to be considered lost.
529 received_info.largest_observed = 4; 529 ack_frame.largest_observed = 4;
530 ExpectAckAndLoss(true, 4, 1); 530 ExpectAckAndLoss(true, 4, 1);
531 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 531 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
532 532
533 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 533 EXPECT_FALSE(manager_.HasPendingRetransmissions());
534 VerifyRetransmittablePackets(NULL, 0); 534 VerifyRetransmittablePackets(NULL, 0);
535 } 535 }
536 536
537 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) { 537 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) {
538 SendDataPacket(1); 538 SendDataPacket(1);
539 SendDataPacket(2); 539 SendDataPacket(2);
540 SendDataPacket(3); 540 SendDataPacket(3);
541 SendDataPacket(4); 541 SendDataPacket(4);
542 SendFecPacket(5); 542 SendFecPacket(5);
543 543
544 // Ack 2, 3, and 4, and expect the 1st to be considered lost. 544 // Ack 2, 3, and 4, and expect the 1st to be considered lost.
545 ReceivedPacketInfo received_info; 545 QuicAckFrame ack_frame;
546 received_info.largest_observed = 4; 546 ack_frame.largest_observed = 4;
547 received_info.missing_packets.insert(1); 547 ack_frame.missing_packets.insert(1);
548 QuicPacketSequenceNumber acked[] = { 2, 3, 4 }; 548 QuicPacketSequenceNumber acked[] = { 2, 3, 4 };
549 QuicPacketSequenceNumber lost[] = { 1 }; 549 QuicPacketSequenceNumber lost[] = { 1 };
550 ExpectAcksAndLosses(true, acked, arraysize(acked), lost, arraysize(lost)); 550 ExpectAcksAndLosses(true, acked, arraysize(acked), lost, arraysize(lost));
551 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 551 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
552 552
553 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 553 EXPECT_TRUE(manager_.HasPendingRetransmissions());
554 QuicPacketSequenceNumber unacked[] = { 1, 5 }; 554 QuicPacketSequenceNumber unacked[] = { 1, 5 };
555 VerifyUnackedPackets(unacked, arraysize(unacked)); 555 VerifyUnackedPackets(unacked, arraysize(unacked));
556 QuicPacketSequenceNumber retransmittable[] = { 1 }; 556 QuicPacketSequenceNumber retransmittable[] = { 1 };
557 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 557 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
558 558
559 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be 559 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be
560 // removed from pending retransmissions map. 560 // removed from pending retransmissions map.
561 received_info.largest_observed = 5; 561 ack_frame.largest_observed = 5;
562 received_info.revived_packets.insert(1); 562 ack_frame.revived_packets.insert(1);
563 ExpectAck(5); 563 ExpectAck(5);
564 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 564 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
565 565
566 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 566 EXPECT_FALSE(manager_.HasPendingRetransmissions());
567 VerifyRetransmittablePackets(NULL, 0); 567 VerifyRetransmittablePackets(NULL, 0);
568 } 568 }
569 569
570 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { 570 TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
571 SendDataPacket(1); 571 SendDataPacket(1);
572 RetransmitAndSendPacket(1, 2); 572 RetransmitAndSendPacket(1, 2);
573 RetransmitAndSendPacket(2, 3); 573 RetransmitAndSendPacket(2, 3);
574 RetransmitAndSendPacket(3, 4); 574 RetransmitAndSendPacket(3, 4);
575 RetransmitAndSendPacket(4, 5); 575 RetransmitAndSendPacket(4, 5);
576 576
577 // Truncated ack with 4 NACKs, so the first packet is lost. 577 // Truncated ack with 4 NACKs, so the first packet is lost.
578 ReceivedPacketInfo received_info; 578 QuicAckFrame ack_frame;
579 received_info.largest_observed = 4; 579 ack_frame.largest_observed = 4;
580 received_info.missing_packets.insert(1); 580 ack_frame.missing_packets.insert(1);
581 received_info.missing_packets.insert(2); 581 ack_frame.missing_packets.insert(2);
582 received_info.missing_packets.insert(3); 582 ack_frame.missing_packets.insert(3);
583 received_info.missing_packets.insert(4); 583 ack_frame.missing_packets.insert(4);
584 received_info.is_truncated = true; 584 ack_frame.is_truncated = true;
585 585
586 QuicPacketSequenceNumber lost[] = { 1 }; 586 QuicPacketSequenceNumber lost[] = { 1 };
587 ExpectAcksAndLosses(true, NULL, 0, lost, arraysize(lost)); 587 ExpectAcksAndLosses(true, NULL, 0, lost, arraysize(lost));
588 manager_.OnIncomingAck(received_info, clock_.Now()); 588 manager_.OnIncomingAck(ack_frame, clock_.Now());
589 589
590 // High water mark will be raised. 590 // High water mark will be raised.
591 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 }; 591 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 };
592 VerifyUnackedPackets(unacked, arraysize(unacked)); 592 VerifyUnackedPackets(unacked, arraysize(unacked));
593 QuicPacketSequenceNumber retransmittable[] = { 5 }; 593 QuicPacketSequenceNumber retransmittable[] = { 5 };
594 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 594 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
595 } 595 }
596 596
597 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { 597 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) {
598 SendDataPacket(1); 598 SendDataPacket(1);
599 RetransmitAndSendPacket(1, 2); 599 RetransmitAndSendPacket(1, 2);
600 RetransmitAndSendPacket(2, 3); 600 RetransmitAndSendPacket(2, 3);
601 RetransmitAndSendPacket(3, 4); 601 RetransmitAndSendPacket(3, 4);
602 manager_.OnSerializedPacket(CreateDataPacket(5)); 602 manager_.OnSerializedPacket(CreateDataPacket(5));
603 manager_.OnSerializedPacket(CreateDataPacket(6)); 603 manager_.OnSerializedPacket(CreateDataPacket(6));
604 manager_.OnSerializedPacket(CreateDataPacket(7)); 604 manager_.OnSerializedPacket(CreateDataPacket(7));
605 manager_.OnSerializedPacket(CreateDataPacket(8)); 605 manager_.OnSerializedPacket(CreateDataPacket(8));
606 manager_.OnSerializedPacket(CreateDataPacket(9)); 606 manager_.OnSerializedPacket(CreateDataPacket(9));
607 607
608 // Ack previous transmission 608 // Ack previous transmission
609 { 609 {
610 ReceivedPacketInfo received_info; 610 QuicAckFrame ack_frame;
611 received_info.largest_observed = 2; 611 ack_frame.largest_observed = 2;
612 received_info.missing_packets.insert(1); 612 ack_frame.missing_packets.insert(1);
613 ExpectAck(2); 613 ExpectAck(2);
614 manager_.OnIncomingAck(received_info, clock_.Now()); 614 manager_.OnIncomingAck(ack_frame, clock_.Now());
615 EXPECT_TRUE(manager_.IsUnacked(4)); 615 EXPECT_TRUE(manager_.IsUnacked(4));
616 } 616 }
617 617
618 // Truncated ack with 4 NACKs 618 // Truncated ack with 4 NACKs
619 { 619 {
620 ReceivedPacketInfo received_info; 620 QuicAckFrame ack_frame;
621 received_info.largest_observed = 6; 621 ack_frame.largest_observed = 6;
622 received_info.missing_packets.insert(3); 622 ack_frame.missing_packets.insert(3);
623 received_info.missing_packets.insert(4); 623 ack_frame.missing_packets.insert(4);
624 received_info.missing_packets.insert(5); 624 ack_frame.missing_packets.insert(5);
625 received_info.missing_packets.insert(6); 625 ack_frame.missing_packets.insert(6);
626 received_info.is_truncated = true; 626 ack_frame.is_truncated = true;
627 ExpectAckAndLoss(false, 1, 3); 627 ExpectAckAndLoss(false, 1, 3);
628 manager_.OnIncomingAck(received_info, clock_.Now()); 628 manager_.OnIncomingAck(ack_frame, clock_.Now());
629 } 629 }
630 630
631 // High water mark will be raised. 631 // High water mark will be raised.
632 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; 632 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 };
633 VerifyUnackedPackets(unacked, arraysize(unacked)); 633 VerifyUnackedPackets(unacked, arraysize(unacked));
634 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; 634 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 };
635 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 635 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
636 } 636 }
637 637
638 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { 638 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) {
(...skipping 27 matching lines...) Expand all
666 666
667 SerializedPacket serialized_packet3(CreateFecPacket(3)); 667 SerializedPacket serialized_packet3(CreateFecPacket(3));
668 manager_.OnSerializedPacket(serialized_packet3); 668 manager_.OnSerializedPacket(serialized_packet3);
669 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); 669 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
670 670
671 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; 671 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 };
672 VerifyUnackedPackets(unacked, arraysize(unacked)); 672 VerifyUnackedPackets(unacked, arraysize(unacked));
673 VerifyRetransmittablePackets(NULL, 0); 673 VerifyRetransmittablePackets(NULL, 0);
674 674
675 // Ack 2, which has never been sent, so there's no rtt update. 675 // Ack 2, which has never been sent, so there's no rtt update.
676 ReceivedPacketInfo received_info; 676 QuicAckFrame ack_frame;
677 received_info.largest_observed = 2; 677 ack_frame.largest_observed = 2;
678 manager_.OnIncomingAck(received_info, clock_.Now()); 678 manager_.OnIncomingAck(ack_frame, clock_.Now());
679 679
680 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); 680 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket());
681 } 681 }
682 682
683 TEST_F(QuicSentPacketManagerTest, GetSentTime) { 683 TEST_F(QuicSentPacketManagerTest, GetSentTime) {
684 VerifyUnackedPackets(NULL, 0); 684 VerifyUnackedPackets(NULL, 0);
685 685
686 SerializedPacket serialized_packet(CreateFecPacket(1)); 686 SerializedPacket serialized_packet(CreateFecPacket(1));
687 manager_.OnSerializedPacket(serialized_packet); 687 manager_.OnSerializedPacket(serialized_packet);
688 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)) 688 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _))
(...skipping 17 matching lines...) Expand all
706 EXPECT_EQ(QuicTime::Zero(), 706 EXPECT_EQ(QuicTime::Zero(),
707 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); 707 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1));
708 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); 708 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
709 } 709 }
710 710
711 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { 711 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) {
712 SendDataPacket(1); 712 SendDataPacket(1);
713 SendAckPacket(2); 713 SendAckPacket(2);
714 714
715 // Now ack the ack and expect an RTT update. 715 // Now ack the ack and expect an RTT update.
716 ReceivedPacketInfo received_info; 716 QuicAckFrame ack_frame;
717 received_info.largest_observed = 2; 717 ack_frame.largest_observed = 2;
718 received_info.delta_time_largest_observed = 718 ack_frame.delta_time_largest_observed =
719 QuicTime::Delta::FromMilliseconds(5); 719 QuicTime::Delta::FromMilliseconds(5);
720 720
721 ExpectAck(1); 721 ExpectAck(1);
722 manager_.OnIncomingAck(received_info, clock_.Now()); 722 manager_.OnIncomingAck(ack_frame, clock_.Now());
723 723
724 SendAckPacket(3); 724 SendAckPacket(3);
725 725
726 // Now ack the ack and expect only an RTT update. 726 // Now ack the ack and expect only an RTT update.
727 received_info.largest_observed = 3; 727 ack_frame.largest_observed = 3;
728 ExpectUpdatedRtt(3); 728 ExpectUpdatedRtt(3);
729 manager_.OnIncomingAck(received_info, clock_.Now()); 729 manager_.OnIncomingAck(ack_frame, clock_.Now());
730 } 730 }
731 731
732 TEST_F(QuicSentPacketManagerTest, Rtt) { 732 TEST_F(QuicSentPacketManagerTest, Rtt) {
733 QuicPacketSequenceNumber sequence_number = 1; 733 QuicPacketSequenceNumber sequence_number = 1;
734 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); 734 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15);
735 SendDataPacket(sequence_number); 735 SendDataPacket(sequence_number);
736 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); 736 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
737 737
738 ExpectAck(sequence_number); 738 ExpectAck(sequence_number);
739 ReceivedPacketInfo received_info; 739 QuicAckFrame ack_frame;
740 received_info.largest_observed = sequence_number; 740 ack_frame.largest_observed = sequence_number;
741 received_info.delta_time_largest_observed = 741 ack_frame.delta_time_largest_observed =
742 QuicTime::Delta::FromMilliseconds(5); 742 QuicTime::Delta::FromMilliseconds(5);
743 manager_.OnIncomingAck(received_info, clock_.Now()); 743 manager_.OnIncomingAck(ack_frame, clock_.Now());
744 EXPECT_EQ(expected_rtt, 744 EXPECT_EQ(expected_rtt,
745 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); 745 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
746 } 746 }
747 747
748 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { 748 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) {
749 // Expect that the RTT is equal to the local time elapsed, since the 749 // Expect that the RTT is equal to the local time elapsed, since the
750 // delta_time_largest_observed is larger than the local time elapsed 750 // delta_time_largest_observed is larger than the local time elapsed
751 // and is hence invalid. 751 // and is hence invalid.
752 QuicPacketSequenceNumber sequence_number = 1; 752 QuicPacketSequenceNumber sequence_number = 1;
753 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); 753 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10);
754 SendDataPacket(sequence_number); 754 SendDataPacket(sequence_number);
755 clock_.AdvanceTime(expected_rtt); 755 clock_.AdvanceTime(expected_rtt);
756 756
757 ExpectAck(sequence_number); 757 ExpectAck(sequence_number);
758 ReceivedPacketInfo received_info; 758 QuicAckFrame ack_frame;
759 received_info.largest_observed = sequence_number; 759 ack_frame.largest_observed = sequence_number;
760 received_info.delta_time_largest_observed = 760 ack_frame.delta_time_largest_observed =
761 QuicTime::Delta::FromMilliseconds(11); 761 QuicTime::Delta::FromMilliseconds(11);
762 manager_.OnIncomingAck(received_info, clock_.Now()); 762 manager_.OnIncomingAck(ack_frame, clock_.Now());
763 EXPECT_EQ(expected_rtt, 763 EXPECT_EQ(expected_rtt,
764 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); 764 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
765 } 765 }
766 766
767 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { 767 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) {
768 // Expect that the RTT is equal to the local time elapsed, since the 768 // Expect that the RTT is equal to the local time elapsed, since the
769 // delta_time_largest_observed is infinite, and is hence invalid. 769 // delta_time_largest_observed is infinite, and is hence invalid.
770 QuicPacketSequenceNumber sequence_number = 1; 770 QuicPacketSequenceNumber sequence_number = 1;
771 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); 771 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10);
772 SendDataPacket(sequence_number); 772 SendDataPacket(sequence_number);
773 clock_.AdvanceTime(expected_rtt); 773 clock_.AdvanceTime(expected_rtt);
774 774
775 ExpectAck(sequence_number); 775 ExpectAck(sequence_number);
776 ReceivedPacketInfo received_info; 776 QuicAckFrame ack_frame;
777 received_info.largest_observed = sequence_number; 777 ack_frame.largest_observed = sequence_number;
778 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); 778 ack_frame.delta_time_largest_observed = QuicTime::Delta::Infinite();
779 manager_.OnIncomingAck(received_info, clock_.Now()); 779 manager_.OnIncomingAck(ack_frame, clock_.Now());
780 EXPECT_EQ(expected_rtt, 780 EXPECT_EQ(expected_rtt,
781 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); 781 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
782 } 782 }
783 783
784 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { 784 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) {
785 // Expect that the RTT is the time between send and receive since the 785 // Expect that the RTT is the time between send and receive since the
786 // delta_time_largest_observed is zero. 786 // delta_time_largest_observed is zero.
787 QuicPacketSequenceNumber sequence_number = 1; 787 QuicPacketSequenceNumber sequence_number = 1;
788 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); 788 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10);
789 SendDataPacket(sequence_number); 789 SendDataPacket(sequence_number);
790 clock_.AdvanceTime(expected_rtt); 790 clock_.AdvanceTime(expected_rtt);
791 791
792 ExpectAck(sequence_number); 792 ExpectAck(sequence_number);
793 ReceivedPacketInfo received_info; 793 QuicAckFrame ack_frame;
794 received_info.largest_observed = sequence_number; 794 ack_frame.largest_observed = sequence_number;
795 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 795 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
796 manager_.OnIncomingAck(received_info, clock_.Now()); 796 manager_.OnIncomingAck(ack_frame, clock_.Now());
797 EXPECT_EQ(expected_rtt, 797 EXPECT_EQ(expected_rtt,
798 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); 798 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
799 } 799 }
800 800
801 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { 801 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) {
802 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 802 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
803 803
804 // Send 1 packet. 804 // Send 1 packet.
805 QuicPacketSequenceNumber sequence_number = 1; 805 QuicPacketSequenceNumber sequence_number = 1;
806 SendDataPacket(sequence_number); 806 SendDataPacket(sequence_number);
(...skipping 17 matching lines...) Expand all
824 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 824 EXPECT_TRUE(manager_.HasPendingRetransmissions());
825 RetransmitNextPacket(3); 825 RetransmitNextPacket(3);
826 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( 826 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return(
827 QuicTime::Delta::Infinite())); 827 QuicTime::Delta::Infinite()));
828 EXPECT_EQ(QuicTime::Delta::Infinite(), 828 EXPECT_EQ(QuicTime::Delta::Infinite(),
829 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); 829 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
830 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 830 EXPECT_FALSE(manager_.HasPendingRetransmissions());
831 831
832 // Ack the third and ensure the first two are still pending. 832 // Ack the third and ensure the first two are still pending.
833 ExpectAck(3); 833 ExpectAck(3);
834 ReceivedPacketInfo received_info; 834 QuicAckFrame ack_frame;
835 received_info.largest_observed = 3; 835 ack_frame.largest_observed = 3;
836 received_info.missing_packets.insert(1); 836 ack_frame.missing_packets.insert(1);
837 received_info.missing_packets.insert(2); 837 ack_frame.missing_packets.insert(2);
838 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 838 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
839 839
840 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 840 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
841 841
842 // Acking two more packets will lose both of them due to nacks. 842 // Acking two more packets will lose both of them due to nacks.
843 received_info.largest_observed = 5; 843 ack_frame.largest_observed = 5;
844 QuicPacketSequenceNumber lost[] = { 1, 2 }; 844 QuicPacketSequenceNumber lost[] = { 1, 2 };
845 ExpectAcksAndLosses(false, NULL, 0, lost, arraysize(lost)); 845 ExpectAcksAndLosses(false, NULL, 0, lost, arraysize(lost));
846 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 846 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
847 847
848 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 848 EXPECT_FALSE(manager_.HasPendingRetransmissions());
849 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 849 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
850 EXPECT_EQ(2u, stats_.tlp_count); 850 EXPECT_EQ(2u, stats_.tlp_count);
851 EXPECT_EQ(0u, stats_.rto_count); 851 EXPECT_EQ(0u, stats_.rto_count);
852 } 852 }
853 853
854 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { 854 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) {
855 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 855 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
856 856
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
924 manager_.OnRetransmissionTimeout(); 924 manager_.OnRetransmissionTimeout();
925 RetransmitNextPacket(8); 925 RetransmitNextPacket(8);
926 RetransmitNextPacket(9); 926 RetransmitNextPacket(9);
927 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 927 EXPECT_FALSE(manager_.HasPendingRetransmissions());
928 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 928 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
929 929
930 // Now ack the two crypto packets and the speculatively encrypted request, 930 // Now ack the two crypto packets and the speculatively encrypted request,
931 // and ensure the first four crypto packets get abandoned, but not lost. 931 // and ensure the first four crypto packets get abandoned, but not lost.
932 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 }; 932 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 };
933 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); 933 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0);
934 ReceivedPacketInfo received_info; 934 QuicAckFrame ack_frame;
935 received_info.largest_observed = 9; 935 ack_frame.largest_observed = 9;
936 received_info.missing_packets.insert(1); 936 ack_frame.missing_packets.insert(1);
937 received_info.missing_packets.insert(2); 937 ack_frame.missing_packets.insert(2);
938 received_info.missing_packets.insert(6); 938 ack_frame.missing_packets.insert(6);
939 received_info.missing_packets.insert(7); 939 ack_frame.missing_packets.insert(7);
940 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 940 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
941 941
942 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 942 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
943 } 943 }
944 944
945 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutVersionNegotiation) { 945 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutVersionNegotiation) {
946 // Send 2 crypto packets and 3 data packets. 946 // Send 2 crypto packets and 3 data packets.
947 const size_t kNumSentCryptoPackets = 2; 947 const size_t kNumSentCryptoPackets = 2;
948 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 948 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
949 SendCryptoPacket(i); 949 SendCryptoPacket(i);
950 } 950 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 manager_.OnRetransmissionTimeout(); 984 manager_.OnRetransmissionTimeout();
985 RetransmitNextPacket(2); 985 RetransmitNextPacket(2);
986 986
987 // Retransmit the crypto packet as 3. 987 // Retransmit the crypto packet as 3.
988 manager_.OnRetransmissionTimeout(); 988 manager_.OnRetransmissionTimeout();
989 RetransmitNextPacket(3); 989 RetransmitNextPacket(3);
990 990
991 // Now ack the second crypto packet, and ensure the first gets removed, but 991 // Now ack the second crypto packet, and ensure the first gets removed, but
992 // the third does not. 992 // the third does not.
993 ExpectUpdatedRtt(2); 993 ExpectUpdatedRtt(2);
994 ReceivedPacketInfo received_info; 994 QuicAckFrame ack_frame;
995 received_info.largest_observed = 2; 995 ack_frame.largest_observed = 2;
996 received_info.missing_packets.insert(1); 996 ack_frame.missing_packets.insert(1);
997 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 997 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
998 998
999 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 999 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1000 QuicPacketSequenceNumber unacked[] = { 3 }; 1000 QuicPacketSequenceNumber unacked[] = { 3 };
1001 VerifyUnackedPackets(unacked, arraysize(unacked)); 1001 VerifyUnackedPackets(unacked, arraysize(unacked));
1002 } 1002 }
1003 1003
1004 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { 1004 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) {
1005 // Send 2 crypto packets and serialize 1 data packet. 1005 // Send 2 crypto packets and serialize 1 data packet.
1006 const size_t kNumSentCryptoPackets = 2; 1006 const size_t kNumSentCryptoPackets = 2;
1007 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 1007 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1057 // connection goes forward secure. 1057 // connection goes forward secure.
1058 manager_.NeuterUnencryptedPackets(); 1058 manager_.NeuterUnencryptedPackets();
1059 QuicPacketSequenceNumber unacked[] = { 1, 2, 3}; 1059 QuicPacketSequenceNumber unacked[] = { 1, 2, 3};
1060 VerifyUnackedPackets(unacked, arraysize(unacked)); 1060 VerifyUnackedPackets(unacked, arraysize(unacked));
1061 VerifyRetransmittablePackets(NULL, 0); 1061 VerifyRetransmittablePackets(NULL, 0);
1062 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1062 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1063 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1063 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1064 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1064 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1065 1065
1066 // Ensure both packets get discarded when packet 2 is acked. 1066 // Ensure both packets get discarded when packet 2 is acked.
1067 ReceivedPacketInfo received_info; 1067 QuicAckFrame ack_frame;
1068 received_info.largest_observed = 3; 1068 ack_frame.largest_observed = 3;
1069 received_info.missing_packets.insert(1); 1069 ack_frame.missing_packets.insert(1);
1070 received_info.missing_packets.insert(2); 1070 ack_frame.missing_packets.insert(2);
1071 ExpectUpdatedRtt(3); 1071 ExpectUpdatedRtt(3);
1072 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 1072 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
1073 VerifyUnackedPackets(NULL, 0); 1073 VerifyUnackedPackets(NULL, 0);
1074 VerifyRetransmittablePackets(NULL, 0); 1074 VerifyRetransmittablePackets(NULL, 0);
1075 } 1075 }
1076 1076
1077 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { 1077 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
1078 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 1078 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
1079 // Serialize two data packets and send the latter. 1079 // Serialize two data packets and send the latter.
1080 SerializedPacket packet(CreateDataPacket(1)); 1080 SerializedPacket packet(CreateDataPacket(1));
1081 manager_.OnSerializedPacket(packet); 1081 manager_.OnSerializedPacket(packet);
1082 SendDataPacket(2); 1082 SendDataPacket(2);
(...skipping 26 matching lines...) Expand all
1109 EXPECT_EQ(min_rtt, 1109 EXPECT_EQ(min_rtt,
1110 QuicSentPacketManagerPeer::GetRttStats( 1110 QuicSentPacketManagerPeer::GetRttStats(
1111 &manager_)->recent_min_rtt()); 1111 &manager_)->recent_min_rtt());
1112 1112
1113 // Send two packets with no prior bytes in flight. 1113 // Send two packets with no prior bytes in flight.
1114 SendDataPacket(1); 1114 SendDataPacket(1);
1115 SendDataPacket(2); 1115 SendDataPacket(2);
1116 1116
1117 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100)); 1117 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100));
1118 // Ack two packets with 100ms RTT observations. 1118 // Ack two packets with 100ms RTT observations.
1119 ReceivedPacketInfo received_info; 1119 QuicAckFrame ack_frame;
1120 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 1120 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
1121 received_info.largest_observed = 1; 1121 ack_frame.largest_observed = 1;
1122 ExpectAck(1); 1122 ExpectAck(1);
1123 manager_.OnIncomingAck(received_info, clock_.Now()); 1123 manager_.OnIncomingAck(ack_frame, clock_.Now());
1124 1124
1125 // First ack does not change recent min rtt. 1125 // First ack does not change recent min rtt.
1126 EXPECT_EQ(min_rtt, 1126 EXPECT_EQ(min_rtt,
1127 QuicSentPacketManagerPeer::GetRttStats( 1127 QuicSentPacketManagerPeer::GetRttStats(
1128 &manager_)->recent_min_rtt()); 1128 &manager_)->recent_min_rtt());
1129 1129
1130 received_info.largest_observed = 2; 1130 ack_frame.largest_observed = 2;
1131 ExpectAck(2); 1131 ExpectAck(2);
1132 manager_.OnIncomingAck(received_info, clock_.Now()); 1132 manager_.OnIncomingAck(ack_frame, clock_.Now());
1133 1133
1134 EXPECT_EQ(min_rtt, 1134 EXPECT_EQ(min_rtt,
1135 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); 1135 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt());
1136 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), 1136 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100),
1137 QuicSentPacketManagerPeer::GetRttStats( 1137 QuicSentPacketManagerPeer::GetRttStats(
1138 &manager_)->recent_min_rtt()); 1138 &manager_)->recent_min_rtt());
1139 } 1139 }
1140 1140
1141 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 1141 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
1142 // Send 100 packets and then ensure all are abandoned when the RTO fires. 1142 // Send 100 packets and then ensure all are abandoned when the RTO fires.
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1251 RetransmitNextPacket(6); 1251 RetransmitNextPacket(6);
1252 EXPECT_EQ(2 * kDefaultLength, 1252 EXPECT_EQ(2 * kDefaultLength,
1253 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1253 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1254 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 1254 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1255 1255
1256 // The delay should double the second time. 1256 // The delay should double the second time.
1257 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay); 1257 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay);
1258 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1258 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1259 1259
1260 // Ack a packet and ensure the RTO goes back to the original value. 1260 // Ack a packet and ensure the RTO goes back to the original value.
1261 ReceivedPacketInfo received_info; 1261 QuicAckFrame ack_frame;
1262 received_info.largest_observed = 2; 1262 ack_frame.largest_observed = 2;
1263 received_info.missing_packets.insert(1); 1263 ack_frame.missing_packets.insert(1);
1264 ExpectUpdatedRtt(2); 1264 ExpectUpdatedRtt(2);
1265 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); 1265 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
1266 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); 1266 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
1267 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1267 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1268 EXPECT_EQ(4 * kDefaultLength, 1268 EXPECT_EQ(4 * kDefaultLength,
1269 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_)); 1269 QuicSentPacketManagerPeer::GetBytesInFlight(&manager_));
1270 1270
1271 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time 1271 // Wait 2RTTs from now for the RTO, since it's the max of the RTO time
1272 // and the TLP time. In production, there would always be two TLP's first. 1272 // and the TLP time. In production, there would always be two TLP's first.
1273 expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds(200)); 1273 expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds(200));
1274 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); 1274 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
1275 } 1275 }
1276 1276
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) 1330 EXPECT_CALL(*loss_algorithm, GetLossTimeout())
1331 .WillRepeatedly(Return(QuicTime::Zero())); 1331 .WillRepeatedly(Return(QuicTime::Zero()));
1332 SendDataPacket(1); 1332 SendDataPacket(1);
1333 SendDataPacket(2); 1333 SendDataPacket(2);
1334 1334
1335 // Handle an ack which causes the loss algorithm to be evaluated and 1335 // Handle an ack which causes the loss algorithm to be evaluated and
1336 // set the loss timeout. 1336 // set the loss timeout.
1337 ExpectAck(2); 1337 ExpectAck(2);
1338 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) 1338 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _))
1339 .WillOnce(Return(SequenceNumberSet())); 1339 .WillOnce(Return(SequenceNumberSet()));
1340 ReceivedPacketInfo received_info; 1340 QuicAckFrame ack_frame;
1341 received_info.largest_observed = 2; 1341 ack_frame.largest_observed = 2;
1342 received_info.missing_packets.insert(1); 1342 ack_frame.missing_packets.insert(1);
1343 manager_.OnIncomingAck(received_info, clock_.Now()); 1343 manager_.OnIncomingAck(ack_frame, clock_.Now());
1344 1344
1345 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); 1345 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)));
1346 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) 1346 EXPECT_CALL(*loss_algorithm, GetLossTimeout())
1347 .WillRepeatedly(Return(timeout)); 1347 .WillRepeatedly(Return(timeout));
1348 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); 1348 EXPECT_EQ(timeout, manager_.GetRetransmissionTime());
1349 1349
1350 // Fire the retransmission timeout and ensure the loss detection algorithm 1350 // Fire the retransmission timeout and ensure the loss detection algorithm
1351 // is invoked. 1351 // is invoked.
1352 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) 1352 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _))
1353 .WillOnce(Return(SequenceNumberSet())); 1353 .WillOnce(Return(SequenceNumberSet()));
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 .WillOnce(Return(100 * kDefaultTCPMSS)); 1428 .WillOnce(Return(100 * kDefaultTCPMSS));
1429 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1429 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1430 manager_.SetFromConfig(config); 1430 manager_.SetFromConfig(config);
1431 1431
1432 EXPECT_TRUE(manager_.using_pacing()); 1432 EXPECT_TRUE(manager_.using_pacing());
1433 } 1433 }
1434 1434
1435 } // namespace 1435 } // namespace
1436 } // namespace test 1436 } // namespace test
1437 } // namespace net 1437 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698