| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| 9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 // Disable tail loss probes for most tests. | 28 // Disable tail loss probes for most tests. |
| 29 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); | 29 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); |
| 30 // Advance the time 1s so the send times are never QuicTime::Zero. | 30 // Advance the time 1s so the send times are never QuicTime::Zero. |
| 31 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 31 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
| 32 } | 32 } |
| 33 | 33 |
| 34 virtual ~QuicSentPacketManagerTest() { | 34 virtual ~QuicSentPacketManagerTest() { |
| 35 STLDeleteElements(&packets_); | 35 STLDeleteElements(&packets_); |
| 36 } | 36 } |
| 37 | 37 |
| 38 virtual void SetUp() { | |
| 39 // Ack handling requests a smoothed rtt for loss detection. | |
| 40 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | |
| 41 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | |
| 42 } | |
| 43 | |
| 44 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 38 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
| 45 size_t num_packets) { | 39 size_t num_packets) { |
| 46 if (num_packets == 0) { | 40 if (num_packets == 0) { |
| 47 EXPECT_FALSE(manager_.HasUnackedPackets()); | 41 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 48 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( | 42 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( |
| 49 &manager_)); | 43 &manager_)); |
| 50 return; | 44 return; |
| 51 } | 45 } |
| 52 | 46 |
| 53 EXPECT_TRUE(manager_.HasUnackedPackets()); | 47 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 70 if (manager_.HasRetransmittableFrames(*it)) { | 64 if (manager_.HasRetransmittableFrames(*it)) { |
| 71 ++num_retransmittable; | 65 ++num_retransmittable; |
| 72 } | 66 } |
| 73 } | 67 } |
| 74 EXPECT_EQ(num_packets, | 68 EXPECT_EQ(num_packets, |
| 75 QuicSentPacketManagerPeer::GetNumRetransmittablePackets( | 69 QuicSentPacketManagerPeer::GetNumRetransmittablePackets( |
| 76 &manager_)); | 70 &manager_)); |
| 77 EXPECT_EQ(num_packets, num_retransmittable); | 71 EXPECT_EQ(num_packets, num_retransmittable); |
| 78 } | 72 } |
| 79 | 73 |
| 80 void VerifyAckedPackets(QuicPacketSequenceNumber* expected, | |
| 81 size_t num_expected, | |
| 82 const SequenceNumberSet& actual) { | |
| 83 if (num_expected == 0) { | |
| 84 EXPECT_TRUE(actual.empty()); | |
| 85 return; | |
| 86 } | |
| 87 | |
| 88 EXPECT_EQ(num_expected, actual.size()); | |
| 89 for (size_t i = 0; i < num_expected; ++i) { | |
| 90 EXPECT_TRUE(ContainsKey(actual, expected[i])) << expected[i]; | |
| 91 } | |
| 92 } | |
| 93 | |
| 94 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, | 74 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, |
| 95 QuicPacketSequenceNumber new_sequence_number) { | 75 QuicPacketSequenceNumber new_sequence_number) { |
| 96 QuicSentPacketManagerPeer::MarkForRetransmission( | 76 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 97 &manager_, old_sequence_number, NACK_RETRANSMISSION); | 77 &manager_, old_sequence_number, NACK_RETRANSMISSION); |
| 98 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 78 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 99 QuicSentPacketManager::PendingRetransmission next_retransmission = | 79 QuicSentPacketManager::PendingRetransmission next_retransmission = |
| 100 manager_.NextPendingRetransmission(); | 80 manager_.NextPendingRetransmission(); |
| 101 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); | 81 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); |
| 102 EXPECT_EQ(NACK_RETRANSMISSION, next_retransmission.transmission_type); | 82 EXPECT_EQ(NACK_RETRANSMISSION, next_retransmission.transmission_type); |
| 103 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); | 83 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 199 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
| 220 SendDataPacket(1); | 200 SendDataPacket(1); |
| 221 RetransmitAndSendPacket(1, 2); | 201 RetransmitAndSendPacket(1, 2); |
| 222 | 202 |
| 223 // Ack 2 but not 1. | 203 // Ack 2 but not 1. |
| 224 ReceivedPacketInfo received_info; | 204 ReceivedPacketInfo received_info; |
| 225 received_info.largest_observed = 2; | 205 received_info.largest_observed = 2; |
| 226 received_info.missing_packets.insert(1); | 206 received_info.missing_packets.insert(1); |
| 227 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 207 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 228 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); | 208 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); |
| 229 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 209 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 230 | 210 |
| 231 // Packet 1 is unacked, pending, but not retransmittable. | 211 // Packet 1 is unacked, pending, but not retransmittable. |
| 232 QuicPacketSequenceNumber unacked[] = { 1 }; | 212 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 233 VerifyUnackedPackets(unacked, arraysize(unacked)); | 213 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 234 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 214 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 235 VerifyRetransmittablePackets(NULL, 0); | 215 VerifyRetransmittablePackets(NULL, 0); |
| 236 } | 216 } |
| 237 | 217 |
| 238 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 218 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
| 239 SendDataPacket(1); | 219 SendDataPacket(1); |
| 240 QuicSentPacketManagerPeer::MarkForRetransmission( | 220 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 241 &manager_, 1, NACK_RETRANSMISSION); | 221 &manager_, 1, NACK_RETRANSMISSION); |
| 242 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 222 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 243 | 223 |
| 244 // Ack 1. | 224 // Ack 1. |
| 245 ReceivedPacketInfo received_info; | 225 ReceivedPacketInfo received_info; |
| 246 received_info.largest_observed = 1; | 226 received_info.largest_observed = 1; |
| 247 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 227 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 248 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); | 228 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); |
| 249 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 229 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 250 | 230 |
| 251 // There should no longer be a pending retransmission. | 231 // There should no longer be a pending retransmission. |
| 252 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 232 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 253 | 233 |
| 254 // No unacked packets remain. | 234 // No unacked packets remain. |
| 255 VerifyUnackedPackets(NULL, 0); | 235 VerifyUnackedPackets(NULL, 0); |
| 256 VerifyRetransmittablePackets(NULL, 0); | 236 VerifyRetransmittablePackets(NULL, 0); |
| 257 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 237 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
| 258 } | 238 } |
| 259 | 239 |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 ReceivedPacketInfo received_info; | 452 ReceivedPacketInfo received_info; |
| 473 received_info.largest_observed = 4; | 453 received_info.largest_observed = 4; |
| 474 received_info.missing_packets.insert(1); | 454 received_info.missing_packets.insert(1); |
| 475 received_info.missing_packets.insert(2); | 455 received_info.missing_packets.insert(2); |
| 476 received_info.missing_packets.insert(3); | 456 received_info.missing_packets.insert(3); |
| 477 received_info.missing_packets.insert(4); | 457 received_info.missing_packets.insert(4); |
| 478 received_info.is_truncated = true; | 458 received_info.is_truncated = true; |
| 479 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 459 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 480 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); | 460 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
| 481 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); | 461 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
| 482 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 462 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 483 | 463 |
| 484 // High water mark will be raised. | 464 // High water mark will be raised. |
| 485 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 465 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
| 486 VerifyUnackedPackets(unacked, arraysize(unacked)); | 466 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 487 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 467 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
| 488 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 468 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 489 } | 469 } |
| 490 | 470 |
| 491 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 471 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
| 492 SendDataPacket(1); | 472 SendDataPacket(1); |
| 493 RetransmitAndSendPacket(1, 2); | 473 RetransmitAndSendPacket(1, 2); |
| 494 RetransmitAndSendPacket(2, 3); | 474 RetransmitAndSendPacket(2, 3); |
| 495 RetransmitAndSendPacket(3, 4); | 475 RetransmitAndSendPacket(3, 4); |
| 496 manager_.OnSerializedPacket(CreateDataPacket(5)); | 476 manager_.OnSerializedPacket(CreateDataPacket(5)); |
| 497 manager_.OnSerializedPacket(CreateDataPacket(6)); | 477 manager_.OnSerializedPacket(CreateDataPacket(6)); |
| 498 manager_.OnSerializedPacket(CreateDataPacket(7)); | 478 manager_.OnSerializedPacket(CreateDataPacket(7)); |
| 499 manager_.OnSerializedPacket(CreateDataPacket(8)); | 479 manager_.OnSerializedPacket(CreateDataPacket(8)); |
| 500 manager_.OnSerializedPacket(CreateDataPacket(9)); | 480 manager_.OnSerializedPacket(CreateDataPacket(9)); |
| 501 | 481 |
| 502 // Ack previous transmission | 482 // Ack previous transmission |
| 503 { | 483 { |
| 504 ReceivedPacketInfo received_info; | 484 ReceivedPacketInfo received_info; |
| 505 received_info.largest_observed = 2; | 485 received_info.largest_observed = 2; |
| 506 received_info.missing_packets.insert(1); | 486 received_info.missing_packets.insert(1); |
| 507 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 487 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 508 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); | 488 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
| 509 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 489 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 510 EXPECT_TRUE(manager_.IsUnacked(4)); | 490 EXPECT_TRUE(manager_.IsUnacked(4)); |
| 511 } | 491 } |
| 512 | 492 |
| 513 // Truncated ack with 4 NACKs | 493 // Truncated ack with 4 NACKs |
| 514 { | 494 { |
| 515 ReceivedPacketInfo received_info; | 495 ReceivedPacketInfo received_info; |
| 516 received_info.largest_observed = 6; | 496 received_info.largest_observed = 6; |
| 517 received_info.missing_packets.insert(3); | 497 received_info.missing_packets.insert(3); |
| 518 received_info.missing_packets.insert(4); | 498 received_info.missing_packets.insert(4); |
| 519 received_info.missing_packets.insert(5); | 499 received_info.missing_packets.insert(5); |
| 520 received_info.missing_packets.insert(6); | 500 received_info.missing_packets.insert(6); |
| 521 received_info.is_truncated = true; | 501 received_info.is_truncated = true; |
| 522 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); | 502 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 523 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); | 503 EXPECT_CALL(*send_algorithm_, OnPacketLost(3, _)); |
| 524 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); | 504 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); |
| 525 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 505 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 526 } | 506 } |
| 527 | 507 |
| 528 // High water mark will be raised. | 508 // High water mark will be raised. |
| 529 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; | 509 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; |
| 530 VerifyUnackedPackets(unacked, arraysize(unacked)); | 510 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 531 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 511 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
| 532 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 512 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 533 } | 513 } |
| 534 | 514 |
| 535 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 515 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; | 556 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
| 577 VerifyUnackedPackets(unacked, arraysize(unacked)); | 557 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 578 VerifyRetransmittablePackets(NULL, 0); | 558 VerifyRetransmittablePackets(NULL, 0); |
| 579 | 559 |
| 580 manager_.DiscardUnackedPacket(1); | 560 manager_.DiscardUnackedPacket(1); |
| 581 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 561 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
| 582 | 562 |
| 583 // Ack 2. | 563 // Ack 2. |
| 584 ReceivedPacketInfo received_info; | 564 ReceivedPacketInfo received_info; |
| 585 received_info.largest_observed = 2; | 565 received_info.largest_observed = 2; |
| 586 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 566 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 587 | 567 |
| 588 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); | 568 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); |
| 589 | 569 |
| 590 // Discard the 3rd packet and ensure there are no FEC packets. | 570 // Discard the 3rd packet and ensure there are no FEC packets. |
| 591 manager_.DiscardUnackedPacket(3); | 571 manager_.DiscardUnackedPacket(3); |
| 592 EXPECT_FALSE(manager_.HasUnackedPackets()); | 572 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 593 } | 573 } |
| 594 | 574 |
| 595 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 575 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
| 596 VerifyUnackedPackets(NULL, 0); | 576 VerifyUnackedPackets(NULL, 0); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 680 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
| 701 | 681 |
| 702 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 682 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
| 703 EXPECT_CALL(*send_algorithm_, | 683 EXPECT_CALL(*send_algorithm_, |
| 704 OnPacketAcked(sequence_number, _)).Times(1); | 684 OnPacketAcked(sequence_number, _)).Times(1); |
| 705 ReceivedPacketInfo received_info; | 685 ReceivedPacketInfo received_info; |
| 706 received_info.largest_observed = sequence_number; | 686 received_info.largest_observed = sequence_number; |
| 707 received_info.delta_time_largest_observed = | 687 received_info.delta_time_largest_observed = |
| 708 QuicTime::Delta::FromMilliseconds(5); | 688 QuicTime::Delta::FromMilliseconds(5); |
| 709 manager_.OnIncomingAck(received_info, clock_.Now()); | 689 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 710 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 690 EXPECT_EQ(expected_rtt, |
| 691 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 711 } | 692 } |
| 712 | 693 |
| 713 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { | 694 TEST_F(QuicSentPacketManagerTest, RttWithInvalidDelta) { |
| 714 // Expect that the RTT is equal to the local time elapsed, since the | 695 // Expect that the RTT is equal to the local time elapsed, since the |
| 715 // delta_time_largest_observed is larger than the local time elapsed | 696 // delta_time_largest_observed is larger than the local time elapsed |
| 716 // and is hence invalid. | 697 // and is hence invalid. |
| 717 QuicPacketSequenceNumber sequence_number = 1; | 698 QuicPacketSequenceNumber sequence_number = 1; |
| 718 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 699 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 719 SendDataPacket(sequence_number); | 700 SendDataPacket(sequence_number); |
| 720 clock_.AdvanceTime(expected_rtt); | 701 clock_.AdvanceTime(expected_rtt); |
| 721 | 702 |
| 722 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 703 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
| 723 EXPECT_CALL(*send_algorithm_, | 704 EXPECT_CALL(*send_algorithm_, |
| 724 OnPacketAcked(sequence_number, _)).Times(1); | 705 OnPacketAcked(sequence_number, _)).Times(1); |
| 725 ReceivedPacketInfo received_info; | 706 ReceivedPacketInfo received_info; |
| 726 received_info.largest_observed = sequence_number; | 707 received_info.largest_observed = sequence_number; |
| 727 received_info.delta_time_largest_observed = | 708 received_info.delta_time_largest_observed = |
| 728 QuicTime::Delta::FromMilliseconds(11); | 709 QuicTime::Delta::FromMilliseconds(11); |
| 729 manager_.OnIncomingAck(received_info, clock_.Now()); | 710 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 730 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 711 EXPECT_EQ(expected_rtt, |
| 712 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 731 } | 713 } |
| 732 | 714 |
| 733 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { | 715 TEST_F(QuicSentPacketManagerTest, RttWithInfiniteDelta) { |
| 734 // Expect that the RTT is equal to the local time elapsed, since the | 716 // Expect that the RTT is equal to the local time elapsed, since the |
| 735 // delta_time_largest_observed is infinite, and is hence invalid. | 717 // delta_time_largest_observed is infinite, and is hence invalid. |
| 736 QuicPacketSequenceNumber sequence_number = 1; | 718 QuicPacketSequenceNumber sequence_number = 1; |
| 737 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 719 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 738 SendDataPacket(sequence_number); | 720 SendDataPacket(sequence_number); |
| 739 clock_.AdvanceTime(expected_rtt); | 721 clock_.AdvanceTime(expected_rtt); |
| 740 | 722 |
| 741 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 723 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
| 742 EXPECT_CALL(*send_algorithm_, | 724 EXPECT_CALL(*send_algorithm_, |
| 743 OnPacketAcked(sequence_number, _)).Times(1); | 725 OnPacketAcked(sequence_number, _)).Times(1); |
| 744 ReceivedPacketInfo received_info; | 726 ReceivedPacketInfo received_info; |
| 745 received_info.largest_observed = sequence_number; | 727 received_info.largest_observed = sequence_number; |
| 746 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); | 728 received_info.delta_time_largest_observed = QuicTime::Delta::Infinite(); |
| 747 manager_.OnIncomingAck(received_info, clock_.Now()); | 729 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 748 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 730 EXPECT_EQ(expected_rtt, |
| 731 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 749 } | 732 } |
| 750 | 733 |
| 751 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { | 734 TEST_F(QuicSentPacketManagerTest, RttZeroDelta) { |
| 752 // Expect that the RTT is the time between send and receive since the | 735 // Expect that the RTT is the time between send and receive since the |
| 753 // delta_time_largest_observed is zero. | 736 // delta_time_largest_observed is zero. |
| 754 QuicPacketSequenceNumber sequence_number = 1; | 737 QuicPacketSequenceNumber sequence_number = 1; |
| 755 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 738 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 756 SendDataPacket(sequence_number); | 739 SendDataPacket(sequence_number); |
| 757 clock_.AdvanceTime(expected_rtt); | 740 clock_.AdvanceTime(expected_rtt); |
| 758 | 741 |
| 759 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); | 742 EXPECT_CALL(*send_algorithm_, UpdateRtt(expected_rtt)); |
| 760 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) | 743 EXPECT_CALL(*send_algorithm_, OnPacketAcked(sequence_number, _)) |
| 761 .Times(1); | 744 .Times(1); |
| 762 ReceivedPacketInfo received_info; | 745 ReceivedPacketInfo received_info; |
| 763 received_info.largest_observed = sequence_number; | 746 received_info.largest_observed = sequence_number; |
| 764 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 747 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 765 manager_.OnIncomingAck(received_info, clock_.Now()); | 748 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 766 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 749 EXPECT_EQ(expected_rtt, |
| 750 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); |
| 767 } | 751 } |
| 768 | 752 |
| 769 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 753 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
| 770 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 754 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 771 | 755 |
| 772 // Send 1 packet. | 756 // Send 1 packet. |
| 773 QuicPacketSequenceNumber sequence_number = 1; | 757 QuicPacketSequenceNumber sequence_number = 1; |
| 774 SendDataPacket(sequence_number); | 758 SendDataPacket(sequence_number); |
| 775 | 759 |
| 776 // The first tail loss probe retransmits 1 packet. | 760 // The first tail loss probe retransmits 1 packet. |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 977 } | 961 } |
| 978 | 962 |
| 979 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { | 963 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { |
| 980 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 964 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 981 } | 965 } |
| 982 | 966 |
| 983 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 967 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
| 984 SendCryptoPacket(1); | 968 SendCryptoPacket(1); |
| 985 | 969 |
| 986 // Check the min. | 970 // Check the min. |
| 987 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 971 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
| 988 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 972 1 * base::Time::kMicrosecondsPerMillisecond); |
| 989 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 973 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 990 manager_.GetRetransmissionTime()); | 974 manager_.GetRetransmissionTime()); |
| 991 | 975 |
| 992 // Test with a standard smoothed RTT. | 976 // Test with a standard smoothed RTT. |
| 993 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 977 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
| 994 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 978 100 * base::Time::kMicrosecondsPerMillisecond); |
| 995 | 979 |
| 996 QuicTime::Delta srtt = manager_.SmoothedRtt(); | 980 QuicTime::Delta srtt = manager_.SmoothedRtt(); |
| 997 QuicTime expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds( | 981 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); |
| 998 static_cast<int64>(1.5 * srtt.ToMilliseconds()))); | |
| 999 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 982 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1000 | 983 |
| 1001 // Retransmit the packet by invoking the retransmission timeout. | 984 // Retransmit the packet by invoking the retransmission timeout. |
| 1002 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds( | 985 clock_.AdvanceTime(srtt.Multiply(1.5)); |
| 1003 static_cast<int64>(1.5 * srtt.ToMilliseconds()))); | |
| 1004 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); | 986 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)); |
| 1005 manager_.OnRetransmissionTimeout(); | 987 manager_.OnRetransmissionTimeout(); |
| 1006 RetransmitNextPacket(2); | 988 RetransmitNextPacket(2); |
| 1007 | 989 |
| 1008 // The retransmission time should now be twice as far in the future. | 990 // The retransmission time should now be twice as far in the future. |
| 1009 expected_time = clock_.Now().Add(QuicTime::Delta::FromMilliseconds( | 991 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); |
| 1010 static_cast<int64>(2 * 1.5 * srtt.ToMilliseconds()))); | |
| 1011 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 992 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1012 } | 993 } |
| 1013 | 994 |
| 1014 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { | 995 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
| 1015 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 996 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 1016 SendDataPacket(1); | 997 SendDataPacket(1); |
| 1017 SendDataPacket(2); | 998 SendDataPacket(2); |
| 1018 | 999 |
| 1019 // Check the min. | 1000 // Check the min. |
| 1020 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1001 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
| 1021 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(1))); | 1002 1 * base::Time::kMicrosecondsPerMillisecond); |
| 1022 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1003 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 1023 manager_.GetRetransmissionTime()); | 1004 manager_.GetRetransmissionTime()); |
| 1024 | 1005 |
| 1025 // Test with a standard smoothed RTT. | 1006 // Test with a standard smoothed RTT. |
| 1026 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1007 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( |
| 1027 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 1008 100 * base::Time::kMicrosecondsPerMillisecond); |
| 1028 QuicTime::Delta srtt = manager_.SmoothedRtt(); | 1009 QuicTime::Delta srtt = manager_.SmoothedRtt(); |
| 1029 QuicTime::Delta expected_tlp_delay = QuicTime::Delta::FromMilliseconds( | 1010 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
| 1030 static_cast<int64>(2 * srtt.ToMilliseconds())); | |
| 1031 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1011 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1032 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1012 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1033 | 1013 |
| 1034 // Retransmit the packet by invoking the retransmission timeout. | 1014 // Retransmit the packet by invoking the retransmission timeout. |
| 1035 clock_.AdvanceTime(expected_tlp_delay); | 1015 clock_.AdvanceTime(expected_tlp_delay); |
| 1036 manager_.OnRetransmissionTimeout(); | 1016 manager_.OnRetransmissionTimeout(); |
| 1037 RetransmitNextPacket(3); | 1017 RetransmitNextPacket(3); |
| 1038 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1018 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1039 | 1019 |
| 1040 expected_time = clock_.Now().Add(expected_tlp_delay); | 1020 expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1041 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1021 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1042 } | 1022 } |
| 1043 | 1023 |
| 1044 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { | 1024 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeRTO) { |
| 1045 EXPECT_CALL(*send_algorithm_, SmoothedRtt()) | 1025 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
| 1046 .WillRepeatedly(Return(QuicTime::Delta::FromMilliseconds(100))); | 1026 QuicTime::Delta::FromMilliseconds(100), QuicTime::Delta::Zero()); |
| 1047 | 1027 |
| 1048 SendDataPacket(1); | 1028 SendDataPacket(1); |
| 1049 SendDataPacket(2); | 1029 SendDataPacket(2); |
| 1050 | 1030 |
| 1051 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); | 1031 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); |
| 1052 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1032 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 1053 .WillRepeatedly(Return(expected_rto_delay)); | 1033 .WillRepeatedly(Return(expected_rto_delay)); |
| 1054 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); | 1034 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); |
| 1055 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1035 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1056 | 1036 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1126 | 1106 |
| 1127 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1107 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
| 1128 .WillRepeatedly(Return(QuicTime::Zero())); | 1108 .WillRepeatedly(Return(QuicTime::Zero())); |
| 1129 SendDataPacket(1); | 1109 SendDataPacket(1); |
| 1130 SendDataPacket(2); | 1110 SendDataPacket(2); |
| 1131 | 1111 |
| 1132 // Handle an ack which causes the loss algorithm to be evaluated and | 1112 // Handle an ack which causes the loss algorithm to be evaluated and |
| 1133 // set the loss timeout. | 1113 // set the loss timeout. |
| 1134 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); | 1114 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 1135 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); | 1115 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
| 1136 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _, _)) | 1116 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
| 1137 .WillOnce(Return(SequenceNumberSet())); | 1117 .WillOnce(Return(SequenceNumberSet())); |
| 1138 ReceivedPacketInfo received_info; | 1118 ReceivedPacketInfo received_info; |
| 1139 received_info.largest_observed = 2; | 1119 received_info.largest_observed = 2; |
| 1140 received_info.missing_packets.insert(1); | 1120 received_info.missing_packets.insert(1); |
| 1141 manager_.OnIncomingAck(received_info, clock_.Now()); | 1121 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 1142 | 1122 |
| 1143 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); | 1123 QuicTime timeout(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10))); |
| 1144 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) | 1124 EXPECT_CALL(*loss_algorithm, GetLossTimeout()) |
| 1145 .WillRepeatedly(Return(timeout)); | 1125 .WillRepeatedly(Return(timeout)); |
| 1146 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); | 1126 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); |
| 1147 | 1127 |
| 1148 // Fire the retransmission timeout and ensure the loss detection algorithm | 1128 // Fire the retransmission timeout and ensure the loss detection algorithm |
| 1149 // is invoked. | 1129 // is invoked. |
| 1150 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _, _)) | 1130 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
| 1151 .WillOnce(Return(SequenceNumberSet())); | 1131 .WillOnce(Return(SequenceNumberSet())); |
| 1152 manager_.OnRetransmissionTimeout(); | 1132 manager_.OnRetransmissionTimeout(); |
| 1153 } | 1133 } |
| 1154 | 1134 |
| 1155 } // namespace | 1135 } // namespace |
| 1156 } // namespace test | 1136 } // namespace test |
| 1157 } // namespace net | 1137 } // namespace net |
| OLD | NEW |