| 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 <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/quic_flags.h" | 10 #include "net/quic/quic_flags.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 | 38 |
| 39 // Minimum number of consecutive RTOs before path is considered to be degrading. | 39 // Minimum number of consecutive RTOs before path is considered to be degrading. |
| 40 const size_t kMinTimeoutsBeforePathDegrading = 2; | 40 const size_t kMinTimeoutsBeforePathDegrading = 2; |
| 41 | 41 |
| 42 // Matcher to check the key of the key-value pair it receives as first argument | 42 // Matcher to check the key of the key-value pair it receives as first argument |
| 43 // equals its second argument. | 43 // equals its second argument. |
| 44 MATCHER(KeyEq, "") { | 44 MATCHER(KeyEq, "") { |
| 45 return std::tr1::get<0>(arg).first == std::tr1::get<1>(arg); | 45 return std::tr1::get<0>(arg).first == std::tr1::get<1>(arg); |
| 46 } | 46 } |
| 47 | 47 |
| 48 class MockDebugDelegate : public QuicSentPacketManager::DebugDelegate { | 48 class MockDebugDelegate : public QuicSentPacketManagerInterface::DebugDelegate { |
| 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 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 network_change_visitor_(new StrictMock<MockNetworkChangeVisitor>) { | 90 network_change_visitor_(new StrictMock<MockNetworkChangeVisitor>) { |
| 91 // These tests only work with pacing enabled. | 91 // These tests only work with pacing enabled. |
| 92 saved_FLAGS_quic_disable_pacing_ = FLAGS_quic_disable_pacing; | 92 saved_FLAGS_quic_disable_pacing_ = FLAGS_quic_disable_pacing; |
| 93 FLAGS_quic_disable_pacing = false; | 93 FLAGS_quic_disable_pacing = false; |
| 94 | 94 |
| 95 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); | 95 QuicSentPacketManagerPeer::SetSendAlgorithm(&manager_, send_algorithm_); |
| 96 // Disable tail loss probes for most tests. | 96 // Disable tail loss probes for most tests. |
| 97 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); | 97 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 0); |
| 98 // Advance the time 1s so the send times are never QuicTime::Zero. | 98 // Advance the time 1s so the send times are never QuicTime::Zero. |
| 99 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 99 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
| 100 manager_.set_network_change_visitor(network_change_visitor_.get()); | 100 manager_.SetNetworkChangeVisitor(network_change_visitor_.get()); |
| 101 | 101 |
| 102 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate()) | 102 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate()) |
| 103 .Times(AnyNumber()); | 103 .Times(AnyNumber()); |
| 104 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()) | 104 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()) |
| 105 .Times(AnyNumber()) | 105 .Times(AnyNumber()) |
| 106 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 106 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 107 EXPECT_CALL(*send_algorithm_, InSlowStart()).Times(AnyNumber()); | 107 EXPECT_CALL(*send_algorithm_, InSlowStart()).Times(AnyNumber()); |
| 108 EXPECT_CALL(*send_algorithm_, InRecovery()).Times(AnyNumber()); | 108 EXPECT_CALL(*send_algorithm_, InRecovery()).Times(AnyNumber()); |
| 109 } | 109 } |
| 110 | 110 |
| 111 ~QuicSentPacketManagerTest() override { | 111 ~QuicSentPacketManagerTest() override { |
| 112 STLDeleteElements(&packets_); | 112 STLDeleteElements(&packets_); |
| 113 FLAGS_quic_disable_pacing = saved_FLAGS_quic_disable_pacing_; | 113 FLAGS_quic_disable_pacing = saved_FLAGS_quic_disable_pacing_; |
| 114 } | 114 } |
| 115 | 115 |
| 116 QuicByteCount BytesInFlight() { | 116 QuicByteCount BytesInFlight() { |
| 117 return QuicSentPacketManagerPeer::GetBytesInFlight(&manager_); | 117 return QuicSentPacketManagerPeer::GetBytesInFlight(&manager_); |
| 118 } | 118 } |
| 119 void VerifyUnackedPackets(QuicPacketNumber* packets, size_t num_packets) { | 119 void VerifyUnackedPackets(QuicPacketNumber* packets, size_t num_packets) { |
| 120 if (num_packets == 0) { | 120 if (num_packets == 0) { |
| 121 EXPECT_FALSE(manager_.HasUnackedPackets()); | 121 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 122 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( | 122 EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetNumRetransmittablePackets( |
| 123 &manager_)); | 123 &manager_)); |
| 124 return; | 124 return; |
| 125 } | 125 } |
| 126 | 126 |
| 127 EXPECT_TRUE(manager_.HasUnackedPackets()); | 127 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 128 EXPECT_EQ(packets[0], manager_.GetLeastUnacked()); | 128 EXPECT_EQ(packets[0], manager_.GetLeastUnacked(kDefaultPathId)); |
| 129 for (size_t i = 0; i < num_packets; ++i) { | 129 for (size_t i = 0; i < num_packets; ++i) { |
| 130 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; | 130 EXPECT_TRUE(manager_.IsUnacked(kDefaultPathId, packets[i])) << packets[i]; |
| 131 } | 131 } |
| 132 } | 132 } |
| 133 | 133 |
| 134 void VerifyRetransmittablePackets(QuicPacketNumber* packets, | 134 void VerifyRetransmittablePackets(QuicPacketNumber* packets, |
| 135 size_t num_packets) { | 135 size_t num_packets) { |
| 136 EXPECT_EQ( | 136 EXPECT_EQ( |
| 137 num_packets, | 137 num_packets, |
| 138 QuicSentPacketManagerPeer::GetNumRetransmittablePackets(&manager_)); | 138 QuicSentPacketManagerPeer::GetNumRetransmittablePackets(&manager_)); |
| 139 for (size_t i = 0; i < num_packets; ++i) { | 139 for (size_t i = 0; i < num_packets; ++i) { |
| 140 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i])) | 140 EXPECT_TRUE(manager_.HasRetransmittableFrames(kDefaultPathId, packets[i])) |
| 141 << " packets[" << i << "]:" << packets[i]; | 141 << " packets[" << i << "]:" << packets[i]; |
| 142 } | 142 } |
| 143 } | 143 } |
| 144 | 144 |
| 145 void ExpectAck(QuicPacketNumber largest_observed) { | 145 void ExpectAck(QuicPacketNumber largest_observed) { |
| 146 EXPECT_CALL( | 146 EXPECT_CALL( |
| 147 *send_algorithm_, | 147 *send_algorithm_, |
| 148 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)), | 148 OnCongestionEvent(true, _, ElementsAre(Pair(largest_observed, _)), |
| 149 IsEmpty())); | 149 IsEmpty())); |
| 150 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); | 150 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, | 191 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, |
| 192 QuicPacketNumber new_packet_number) { | 192 QuicPacketNumber new_packet_number) { |
| 193 RetransmitAndSendPacket(old_packet_number, new_packet_number, | 193 RetransmitAndSendPacket(old_packet_number, new_packet_number, |
| 194 TLP_RETRANSMISSION); | 194 TLP_RETRANSMISSION); |
| 195 } | 195 } |
| 196 | 196 |
| 197 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, | 197 void RetransmitAndSendPacket(QuicPacketNumber old_packet_number, |
| 198 QuicPacketNumber new_packet_number, | 198 QuicPacketNumber new_packet_number, |
| 199 TransmissionType transmission_type) { | 199 TransmissionType transmission_type) { |
| 200 QuicSentPacketManagerPeer::MarkForRetransmission( | 200 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 201 &manager_, old_packet_number, transmission_type); | 201 &manager_, kDefaultPathId, old_packet_number, transmission_type); |
| 202 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 202 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 203 PendingRetransmission next_retransmission = | 203 PendingRetransmission next_retransmission = |
| 204 manager_.NextPendingRetransmission(); | 204 manager_.NextPendingRetransmission(); |
| 205 EXPECT_EQ(old_packet_number, next_retransmission.packet_number); | 205 EXPECT_EQ(old_packet_number, next_retransmission.packet_number); |
| 206 EXPECT_EQ(transmission_type, next_retransmission.transmission_type); | 206 EXPECT_EQ(transmission_type, next_retransmission.transmission_type); |
| 207 | 207 |
| 208 EXPECT_CALL(*send_algorithm_, | 208 EXPECT_CALL(*send_algorithm_, |
| 209 OnPacketSent(_, BytesInFlight(), new_packet_number, | 209 OnPacketSent(_, BytesInFlight(), new_packet_number, |
| 210 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 210 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
| 211 .WillOnce(Return(true)); | 211 .WillOnce(Return(true)); |
| 212 SerializedPacket packet(CreatePacket(new_packet_number, false)); | 212 SerializedPacket packet(CreatePacket(new_packet_number, false)); |
| 213 manager_.OnPacketSent(&packet, packet.path_id, old_packet_number, | 213 manager_.OnPacketSent(&packet, packet.path_id, old_packet_number, |
| 214 clock_.Now(), transmission_type, | 214 clock_.Now(), transmission_type, |
| 215 HAS_RETRANSMITTABLE_DATA); | 215 HAS_RETRANSMITTABLE_DATA); |
| 216 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, | 216 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( |
| 217 new_packet_number)); | 217 &manager_, packet.path_id, new_packet_number)); |
| 218 } | 218 } |
| 219 | 219 |
| 220 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { | 220 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { |
| 221 return CreatePacket(packet_number, true); | 221 return CreatePacket(packet_number, true); |
| 222 } | 222 } |
| 223 | 223 |
| 224 SerializedPacket CreatePacket(QuicPacketNumber packet_number, | 224 SerializedPacket CreatePacket(QuicPacketNumber packet_number, |
| 225 bool retransmittable) { | 225 bool retransmittable) { |
| 226 SerializedPacket packet(kDefaultPathId, packet_number, | 226 SerializedPacket packet(kDefaultPathId, packet_number, |
| 227 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, | 227 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 QuicPacketNumber unacked[] = {1}; | 326 QuicPacketNumber unacked[] = {1}; |
| 327 VerifyUnackedPackets(unacked, arraysize(unacked)); | 327 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 328 QuicPacketNumber retransmittable[] = {1}; | 328 QuicPacketNumber retransmittable[] = {1}; |
| 329 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 329 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 330 } | 330 } |
| 331 | 331 |
| 332 TEST_P(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 332 TEST_P(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 333 SendDataPacket(1); | 333 SendDataPacket(1); |
| 334 RetransmitAndSendPacket(1, 2); | 334 RetransmitAndSendPacket(1, 2); |
| 335 | 335 |
| 336 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); | 336 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, |
| 337 kDefaultPathId, 2)); |
| 337 QuicPacketNumber unacked[] = {1, 2}; | 338 QuicPacketNumber unacked[] = {1, 2}; |
| 338 VerifyUnackedPackets(unacked, arraysize(unacked)); | 339 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 339 QuicPacketNumber retransmittable[] = {2}; | 340 QuicPacketNumber retransmittable[] = {2}; |
| 340 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 341 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 341 } | 342 } |
| 342 | 343 |
| 343 TEST_P(QuicSentPacketManagerTest, RetransmitThenAck) { | 344 TEST_P(QuicSentPacketManagerTest, RetransmitThenAck) { |
| 344 SendDataPacket(1); | 345 SendDataPacket(1); |
| 345 RetransmitAndSendPacket(1, 2); | 346 RetransmitAndSendPacket(1, 2); |
| 346 | 347 |
| 347 // Ack 2 but not 1. | 348 // Ack 2 but not 1. |
| 348 QuicAckFrame ack_frame = InitAckFrame(2); | 349 QuicAckFrame ack_frame = InitAckFrame(2); |
| 349 NackPackets(1, 2, &ack_frame); | 350 NackPackets(1, 2, &ack_frame); |
| 350 ExpectAck(2); | 351 ExpectAck(2); |
| 351 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 352 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 352 | 353 |
| 353 // Packet 1 is unacked, pending, but not retransmittable. | 354 // Packet 1 is unacked, pending, but not retransmittable. |
| 354 QuicPacketNumber unacked[] = {1}; | 355 QuicPacketNumber unacked[] = {1}; |
| 355 VerifyUnackedPackets(unacked, arraysize(unacked)); | 356 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 356 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 357 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 357 VerifyRetransmittablePackets(nullptr, 0); | 358 VerifyRetransmittablePackets(nullptr, 0); |
| 358 } | 359 } |
| 359 | 360 |
| 360 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 361 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
| 361 SendDataPacket(1); | 362 SendDataPacket(1); |
| 362 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, 1, | 363 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, kDefaultPathId, 1, |
| 363 TLP_RETRANSMISSION); | 364 TLP_RETRANSMISSION); |
| 364 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 365 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 365 | 366 |
| 366 // Ack 1. | 367 // Ack 1. |
| 367 QuicAckFrame ack_frame = InitAckFrame(1); | 368 QuicAckFrame ack_frame = InitAckFrame(1); |
| 368 ExpectAck(1); | 369 ExpectAck(1); |
| 369 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 370 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 370 | 371 |
| 371 // There should no longer be a pending retransmission. | 372 // There should no longer be a pending retransmission. |
| 372 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 373 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 373 | 374 |
| 374 // No unacked packets remain. | 375 // No unacked packets remain. |
| 375 VerifyUnackedPackets(nullptr, 0); | 376 VerifyUnackedPackets(nullptr, 0); |
| 376 VerifyRetransmittablePackets(nullptr, 0); | 377 VerifyRetransmittablePackets(nullptr, 0); |
| 377 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 378 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
| 378 } | 379 } |
| 379 | 380 |
| 380 TEST_P(QuicSentPacketManagerTest, RetransmitThenStopRetransmittingBeforeSend) { | 381 TEST_P(QuicSentPacketManagerTest, RetransmitThenStopRetransmittingBeforeSend) { |
| 381 SendDataPacket(1); | 382 SendDataPacket(1); |
| 382 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, 1, | 383 QuicSentPacketManagerPeer::MarkForRetransmission(&manager_, kDefaultPathId, 1, |
| 383 TLP_RETRANSMISSION); | 384 TLP_RETRANSMISSION); |
| 384 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 385 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 385 | 386 |
| 386 manager_.CancelRetransmissionsForStream(kStreamId); | 387 manager_.CancelRetransmissionsForStream(kStreamId); |
| 387 | 388 |
| 388 // There should no longer be a pending retransmission. | 389 // There should no longer be a pending retransmission. |
| 389 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 390 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 390 | 391 |
| 391 QuicPacketNumber unacked[] = {1}; | 392 QuicPacketNumber unacked[] = {1}; |
| 392 VerifyUnackedPackets(unacked, arraysize(unacked)); | 393 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 // Verify that the retransmission alarm would not fire, | 485 // Verify that the retransmission alarm would not fire, |
| 485 // since there is no retransmittable data outstanding. | 486 // since there is no retransmittable data outstanding. |
| 486 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 487 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 487 } | 488 } |
| 488 | 489 |
| 489 TEST_P(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { | 490 TEST_P(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
| 490 StrictMock<MockDebugDelegate> debug_delegate; | 491 StrictMock<MockDebugDelegate> debug_delegate; |
| 491 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmission(TLP_RETRANSMISSION, | 492 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmission(TLP_RETRANSMISSION, |
| 492 kDefaultLength)) | 493 kDefaultLength)) |
| 493 .Times(2); | 494 .Times(2); |
| 494 manager_.set_debug_delegate(&debug_delegate); | 495 manager_.SetDebugDelegate(&debug_delegate); |
| 495 | 496 |
| 496 SendDataPacket(1); | 497 SendDataPacket(1); |
| 497 RetransmitAndSendPacket(1, 2); | 498 RetransmitAndSendPacket(1, 2); |
| 498 RetransmitAndSendPacket(2, 3); | 499 RetransmitAndSendPacket(2, 3); |
| 499 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 500 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 500 clock_.AdvanceTime(rtt); | 501 clock_.AdvanceTime(rtt); |
| 501 | 502 |
| 502 // Ack 1 but not 2 or 3. | 503 // Ack 1 but not 2 or 3. |
| 503 ExpectAck(1); | 504 ExpectAck(1); |
| 504 QuicAckFrame ack_frame = InitAckFrame(1); | 505 QuicAckFrame ack_frame = InitAckFrame(1); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 SendDataPacket(7); | 588 SendDataPacket(7); |
| 588 SendDataPacket(8); | 589 SendDataPacket(8); |
| 589 SendDataPacket(9); | 590 SendDataPacket(9); |
| 590 | 591 |
| 591 // Ack previous transmission | 592 // Ack previous transmission |
| 592 { | 593 { |
| 593 QuicAckFrame ack_frame = InitAckFrame(2); | 594 QuicAckFrame ack_frame = InitAckFrame(2); |
| 594 NackPackets(1, 2, &ack_frame); | 595 NackPackets(1, 2, &ack_frame); |
| 595 ExpectAck(2); | 596 ExpectAck(2); |
| 596 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 597 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 597 EXPECT_TRUE(manager_.IsUnacked(4)); | 598 EXPECT_TRUE(manager_.IsUnacked(kDefaultPathId, 4)); |
| 598 } | 599 } |
| 599 | 600 |
| 600 // Truncated ack with 4 NACKs | 601 // Truncated ack with 4 NACKs |
| 601 { | 602 { |
| 602 QuicAckFrame ack_frame = InitAckFrame(6); | 603 QuicAckFrame ack_frame = InitAckFrame(6); |
| 603 NackPackets(3, 7, &ack_frame); | 604 NackPackets(3, 7, &ack_frame); |
| 604 ack_frame.is_truncated = true; | 605 ack_frame.is_truncated = true; |
| 605 ExpectAckAndLoss(true, 1, 3); | 606 ExpectAckAndLoss(true, 1, 3); |
| 606 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 607 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 607 } | 608 } |
| 608 | 609 |
| 609 // High water mark will be raised. | 610 // High water mark will be raised. |
| 610 QuicPacketNumber unacked[] = {4, 5, 6, 7, 8, 9}; | 611 QuicPacketNumber unacked[] = {4, 5, 6, 7, 8, 9}; |
| 611 VerifyUnackedPackets(unacked, arraysize(unacked)); | 612 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 612 QuicPacketNumber retransmittable[] = {5, 6, 7, 8, 9}; | 613 QuicPacketNumber retransmittable[] = {5, 6, 7, 8, 9}; |
| 613 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 614 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 614 } | 615 } |
| 615 | 616 |
| 616 TEST_P(QuicSentPacketManagerTest, GetLeastUnacked) { | 617 TEST_P(QuicSentPacketManagerTest, GetLeastUnacked) { |
| 617 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 618 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); |
| 618 } | 619 } |
| 619 | 620 |
| 620 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { | 621 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { |
| 621 SendDataPacket(1); | 622 SendDataPacket(1); |
| 622 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 623 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); |
| 623 } | 624 } |
| 624 | 625 |
| 625 TEST_P(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { | 626 TEST_P(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { |
| 626 SendDataPacket(1); | 627 SendDataPacket(1); |
| 627 SendAckPacket(2); | 628 SendAckPacket(2); |
| 628 | 629 |
| 629 // Now ack the ack and expect an RTT update. | 630 // Now ack the ack and expect an RTT update. |
| 630 QuicAckFrame ack_frame = InitAckFrame(2); | 631 QuicAckFrame ack_frame = InitAckFrame(2); |
| 631 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5); | 632 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5); |
| 632 | 633 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); | 701 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); |
| 701 } | 702 } |
| 702 | 703 |
| 703 TEST_P(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 704 TEST_P(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
| 704 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 705 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 705 | 706 |
| 706 // Send 1 packet. | 707 // Send 1 packet. |
| 707 QuicPacketNumber packet_number = 1; | 708 QuicPacketNumber packet_number = 1; |
| 708 SendDataPacket(packet_number); | 709 SendDataPacket(packet_number); |
| 709 | 710 |
| 711 QuicPathId path_id = kInvalidPathId; |
| 710 // The first tail loss probe retransmits 1 packet. | 712 // The first tail loss probe retransmits 1 packet. |
| 711 manager_.OnRetransmissionTimeout(); | 713 manager_.OnRetransmissionTimeout(); |
| 712 EXPECT_EQ(QuicTime::Delta::Zero(), | 714 EXPECT_EQ( |
| 713 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 715 QuicTime::Delta::Zero(), |
| 716 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 714 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 717 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 715 manager_.MaybeRetransmitTailLossProbe(); | 718 manager_.MaybeRetransmitTailLossProbe(); |
| 716 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 719 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 717 RetransmitNextPacket(2); | 720 RetransmitNextPacket(2); |
| 718 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 721 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 719 | 722 |
| 720 // The second tail loss probe retransmits 1 packet. | 723 // The second tail loss probe retransmits 1 packet. |
| 721 manager_.OnRetransmissionTimeout(); | 724 manager_.OnRetransmissionTimeout(); |
| 722 EXPECT_EQ(QuicTime::Delta::Zero(), | 725 EXPECT_EQ( |
| 723 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 726 QuicTime::Delta::Zero(), |
| 727 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 724 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 728 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 725 manager_.MaybeRetransmitTailLossProbe(); | 729 manager_.MaybeRetransmitTailLossProbe(); |
| 726 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 730 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 727 RetransmitNextPacket(3); | 731 RetransmitNextPacket(3); |
| 728 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 732 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 729 .WillOnce(Return(QuicTime::Delta::Infinite())); | 733 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 730 EXPECT_EQ(QuicTime::Delta::Infinite(), | 734 EXPECT_EQ( |
| 731 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 735 QuicTime::Delta::Infinite(), |
| 736 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 732 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 737 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 733 | 738 |
| 734 // Ack the third and ensure the first two are still pending. | 739 // Ack the third and ensure the first two are still pending. |
| 735 ExpectAck(3); | 740 ExpectAck(3); |
| 736 | 741 |
| 737 QuicAckFrame ack_frame = InitAckFrame(3); | 742 QuicAckFrame ack_frame = InitAckFrame(3); |
| 738 NackPackets(1, 3, &ack_frame); | 743 NackPackets(1, 3, &ack_frame); |
| 739 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 744 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 740 | 745 |
| 741 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 746 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 763 const size_t kNumSentPackets = 100; | 768 const size_t kNumSentPackets = 100; |
| 764 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 769 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 765 SendDataPacket(i); | 770 SendDataPacket(i); |
| 766 } | 771 } |
| 767 QuicTime rto_packet_time = clock_.Now(); | 772 QuicTime rto_packet_time = clock_.Now(); |
| 768 // Advance the time. | 773 // Advance the time. |
| 769 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); | 774 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); |
| 770 | 775 |
| 771 // The first tail loss probe retransmits 1 packet. | 776 // The first tail loss probe retransmits 1 packet. |
| 772 manager_.OnRetransmissionTimeout(); | 777 manager_.OnRetransmissionTimeout(); |
| 773 EXPECT_EQ(QuicTime::Delta::Zero(), | 778 QuicPathId path_id = kInvalidPathId; |
| 774 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 779 EXPECT_EQ( |
| 780 QuicTime::Delta::Zero(), |
| 781 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 775 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 782 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 776 manager_.MaybeRetransmitTailLossProbe(); | 783 manager_.MaybeRetransmitTailLossProbe(); |
| 777 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 784 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 778 RetransmitNextPacket(101); | 785 RetransmitNextPacket(101); |
| 779 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 786 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 780 .WillOnce(Return(QuicTime::Delta::Infinite())); | 787 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 781 EXPECT_EQ(QuicTime::Delta::Infinite(), | 788 EXPECT_EQ( |
| 782 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 789 QuicTime::Delta::Infinite(), |
| 790 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 783 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 791 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 784 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); | 792 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); |
| 785 | 793 |
| 786 // The second tail loss probe retransmits 1 packet. | 794 // The second tail loss probe retransmits 1 packet. |
| 787 manager_.OnRetransmissionTimeout(); | 795 manager_.OnRetransmissionTimeout(); |
| 788 EXPECT_EQ(QuicTime::Delta::Zero(), | 796 EXPECT_EQ( |
| 789 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 797 QuicTime::Delta::Zero(), |
| 798 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 790 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 799 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 791 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); | 800 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
| 792 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 801 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 793 RetransmitNextPacket(102); | 802 RetransmitNextPacket(102); |
| 794 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 803 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 795 .WillOnce(Return(QuicTime::Delta::Infinite())); | 804 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 796 EXPECT_EQ(QuicTime::Delta::Infinite(), | 805 EXPECT_EQ( |
| 797 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 806 QuicTime::Delta::Infinite(), |
| 807 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 798 | 808 |
| 799 // Ensure the RTO is set based on the correct packet. | 809 // Ensure the RTO is set based on the correct packet. |
| 800 rto_packet_time = clock_.Now(); | 810 rto_packet_time = clock_.Now(); |
| 801 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 811 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 802 .WillOnce(Return(QuicTime::Delta::FromSeconds(1))); | 812 .WillOnce(Return(QuicTime::Delta::FromSeconds(1))); |
| 803 EXPECT_EQ(rto_packet_time.Add(QuicTime::Delta::FromSeconds(1)), | 813 EXPECT_EQ(rto_packet_time.Add(QuicTime::Delta::FromSeconds(1)), |
| 804 manager_.GetRetransmissionTime()); | 814 manager_.GetRetransmissionTime()); |
| 805 | 815 |
| 806 // Advance the time enough to ensure all packets are RTO'd. | 816 // Advance the time enough to ensure all packets are RTO'd. |
| 807 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 817 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 833 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { | 843 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { |
| 834 SendCryptoPacket(i); | 844 SendCryptoPacket(i); |
| 835 } | 845 } |
| 836 const size_t kNumSentDataPackets = 3; | 846 const size_t kNumSentDataPackets = 3; |
| 837 for (size_t i = 1; i <= kNumSentDataPackets; ++i) { | 847 for (size_t i = 1; i <= kNumSentDataPackets; ++i) { |
| 838 SendDataPacket(kNumSentCryptoPackets + i); | 848 SendDataPacket(kNumSentCryptoPackets + i); |
| 839 } | 849 } |
| 840 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 850 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 841 | 851 |
| 842 // The first retransmits 2 packets. | 852 // The first retransmits 2 packets. |
| 853 QuicPathId path_id = kInvalidPathId; |
| 843 manager_.OnRetransmissionTimeout(); | 854 manager_.OnRetransmissionTimeout(); |
| 844 EXPECT_EQ(QuicTime::Delta::Zero(), | 855 EXPECT_EQ( |
| 845 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 856 QuicTime::Delta::Zero(), |
| 857 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 846 RetransmitNextPacket(6); | 858 RetransmitNextPacket(6); |
| 847 RetransmitNextPacket(7); | 859 RetransmitNextPacket(7); |
| 848 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 860 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 849 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 861 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 850 | 862 |
| 851 // The second retransmits 2 packets. | 863 // The second retransmits 2 packets. |
| 852 manager_.OnRetransmissionTimeout(); | 864 manager_.OnRetransmissionTimeout(); |
| 853 EXPECT_EQ(QuicTime::Delta::Zero(), | 865 EXPECT_EQ( |
| 854 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 866 QuicTime::Delta::Zero(), |
| 867 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 855 RetransmitNextPacket(8); | 868 RetransmitNextPacket(8); |
| 856 RetransmitNextPacket(9); | 869 RetransmitNextPacket(9); |
| 857 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 870 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 858 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 871 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 859 | 872 |
| 860 // Now ack the two crypto packets and the speculatively encrypted request, | 873 // Now ack the two crypto packets and the speculatively encrypted request, |
| 861 // and ensure the first four crypto packets get abandoned, but not lost. | 874 // and ensure the first four crypto packets get abandoned, but not lost. |
| 862 QuicPacketNumber acked[] = {3, 4, 5, 8, 9}; | 875 QuicPacketNumber acked[] = {3, 4, 5, 8, 9}; |
| 863 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); | 876 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
| 864 QuicAckFrame ack_frame = InitAckFrame(9); | 877 QuicAckFrame ack_frame = InitAckFrame(9); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 899 EXPECT_EQ(7u, manager_.NextPendingRetransmission().packet_number); | 912 EXPECT_EQ(7u, manager_.NextPendingRetransmission().packet_number); |
| 900 RetransmitNextPacket(9); | 913 RetransmitNextPacket(9); |
| 901 | 914 |
| 902 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 915 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 903 // Send 3 more data packets and ensure the least unacked is raised. | 916 // Send 3 more data packets and ensure the least unacked is raised. |
| 904 RetransmitNextPacket(10); | 917 RetransmitNextPacket(10); |
| 905 RetransmitNextPacket(11); | 918 RetransmitNextPacket(11); |
| 906 RetransmitNextPacket(12); | 919 RetransmitNextPacket(12); |
| 907 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 920 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 908 | 921 |
| 909 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 922 EXPECT_EQ(1u, manager_.GetLeastUnacked(kDefaultPathId)); |
| 910 // Least unacked isn't raised until an ack is received, so ack the | 923 // Least unacked isn't raised until an ack is received, so ack the |
| 911 // crypto packets. | 924 // crypto packets. |
| 912 QuicPacketNumber acked[] = {8, 9}; | 925 QuicPacketNumber acked[] = {8, 9}; |
| 913 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); | 926 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
| 914 QuicAckFrame ack_frame = InitAckFrame(9); | 927 QuicAckFrame ack_frame = InitAckFrame(9); |
| 915 for (QuicPacketNumber i = 1; i < 8; ++i) { | 928 for (QuicPacketNumber i = 1; i < 8; ++i) { |
| 916 NackPackets(i, i + 1, &ack_frame); | 929 NackPackets(i, i + 1, &ack_frame); |
| 917 } | 930 } |
| 918 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 931 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 919 EXPECT_EQ(10u, manager_.GetLeastUnacked()); | 932 EXPECT_EQ(10u, manager_.GetLeastUnacked(kDefaultPathId)); |
| 920 } | 933 } |
| 921 | 934 |
| 922 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) { | 935 TEST_P(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) { |
| 923 // Send 1 crypto packet. | 936 // Send 1 crypto packet. |
| 924 SendCryptoPacket(1); | 937 SendCryptoPacket(1); |
| 925 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 938 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 926 | 939 |
| 927 // Retransmit the crypto packet as 2. | 940 // Retransmit the crypto packet as 2. |
| 928 manager_.OnRetransmissionTimeout(); | 941 manager_.OnRetransmissionTimeout(); |
| 929 RetransmitNextPacket(2); | 942 RetransmitNextPacket(2); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 QuicAckFrame ack_frame = InitAckFrame(3); | 1025 QuicAckFrame ack_frame = InitAckFrame(3); |
| 1013 NackPackets(1, 3, &ack_frame); | 1026 NackPackets(1, 3, &ack_frame); |
| 1014 ExpectUpdatedRtt(3); | 1027 ExpectUpdatedRtt(3); |
| 1015 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 1028 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 1016 VerifyUnackedPackets(nullptr, 0); | 1029 VerifyUnackedPackets(nullptr, 0); |
| 1017 VerifyRetransmittablePackets(nullptr, 0); | 1030 VerifyRetransmittablePackets(nullptr, 0); |
| 1018 } | 1031 } |
| 1019 | 1032 |
| 1020 TEST_P(QuicSentPacketManagerTest, RetransmissionTimeout) { | 1033 TEST_P(QuicSentPacketManagerTest, RetransmissionTimeout) { |
| 1021 StrictMock<MockDebugDelegate> debug_delegate; | 1034 StrictMock<MockDebugDelegate> debug_delegate; |
| 1022 manager_.set_debug_delegate(&debug_delegate); | 1035 manager_.SetDebugDelegate(&debug_delegate); |
| 1023 | 1036 |
| 1024 // Send 100 packets. | 1037 // Send 100 packets. |
| 1025 const size_t kNumSentPackets = 100; | 1038 const size_t kNumSentPackets = 100; |
| 1026 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 1039 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 1027 SendDataPacket(i); | 1040 SendDataPacket(i); |
| 1028 } | 1041 } |
| 1029 | 1042 |
| 1030 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); | 1043 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); |
| 1031 manager_.OnRetransmissionTimeout(); | 1044 manager_.OnRetransmissionTimeout(); |
| 1032 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1045 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1223 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); | 1236 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); |
| 1224 QuicTime::Delta srtt = | 1237 QuicTime::Delta srtt = |
| 1225 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); | 1238 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
| 1226 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); | 1239 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
| 1227 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1240 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1228 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1241 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1229 | 1242 |
| 1230 // Retransmit the packet by invoking the retransmission timeout. | 1243 // Retransmit the packet by invoking the retransmission timeout. |
| 1231 clock_.AdvanceTime(expected_tlp_delay); | 1244 clock_.AdvanceTime(expected_tlp_delay); |
| 1232 manager_.OnRetransmissionTimeout(); | 1245 manager_.OnRetransmissionTimeout(); |
| 1233 EXPECT_EQ(QuicTime::Delta::Zero(), | 1246 QuicPathId path_id = kInvalidPathId; |
| 1234 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1247 EXPECT_EQ( |
| 1248 QuicTime::Delta::Zero(), |
| 1249 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 1235 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1250 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1236 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); | 1251 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
| 1237 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1252 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 1238 RetransmitNextPacket(3); | 1253 RetransmitNextPacket(3); |
| 1239 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1254 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1240 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1255 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1241 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1256 EXPECT_EQ( |
| 1242 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1257 QuicTime::Delta::Infinite(), |
| 1258 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 1243 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1259 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1244 | 1260 |
| 1245 expected_time = clock_.Now().Add(expected_tlp_delay); | 1261 expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1246 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1262 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1247 } | 1263 } |
| 1248 | 1264 |
| 1249 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { | 1265 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { |
| 1250 const_cast<RttStats*>(manager_.GetRttStats()) | 1266 const_cast<RttStats*>(manager_.GetRttStats()) |
| 1251 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), | 1267 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), |
| 1252 QuicTime::Delta::Zero(), QuicTime::Zero()); | 1268 QuicTime::Delta::Zero(), QuicTime::Zero()); |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1626 .WillRepeatedly(Return(QuicBandwidth::Zero())); | 1642 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1627 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 1643 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 1628 .WillOnce(Return(10 * kDefaultTCPMSS)); | 1644 .WillOnce(Return(10 * kDefaultTCPMSS)); |
| 1629 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); | 1645 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1630 manager_.SetFromConfig(client_config); | 1646 manager_.SetFromConfig(client_config); |
| 1631 | 1647 |
| 1632 EXPECT_EQ(kMinSocketReceiveBuffer, | 1648 EXPECT_EQ(kMinSocketReceiveBuffer, |
| 1633 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1649 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1634 | 1650 |
| 1635 // Ensure the smaller send window only allows 16 packets to be sent. | 1651 // Ensure the smaller send window only allows 16 packets to be sent. |
| 1652 QuicPathId path_id = kInvalidPathId; |
| 1636 for (QuicPacketNumber i = 1; i <= 16; ++i) { | 1653 for (QuicPacketNumber i = 1; i <= 16; ++i) { |
| 1637 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1654 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1638 .WillOnce(Return(QuicTime::Delta::Zero())); | 1655 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1639 EXPECT_EQ(QuicTime::Delta::Zero(), | 1656 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1640 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1657 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, |
| 1658 &path_id)); |
| 1641 EXPECT_CALL(*send_algorithm_, | 1659 EXPECT_CALL(*send_algorithm_, |
| 1642 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1660 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1643 HAS_RETRANSMITTABLE_DATA)) | 1661 HAS_RETRANSMITTABLE_DATA)) |
| 1644 .WillOnce(Return(true)); | 1662 .WillOnce(Return(true)); |
| 1645 SerializedPacket packet(CreatePacket(i, true)); | 1663 SerializedPacket packet(CreatePacket(i, true)); |
| 1646 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), | 1664 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 1647 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 1665 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 1648 } | 1666 } |
| 1649 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1667 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1650 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1668 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1651 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1669 EXPECT_EQ( |
| 1652 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1670 QuicTime::Delta::Infinite(), |
| 1671 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 1653 } | 1672 } |
| 1654 | 1673 |
| 1655 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) { | 1674 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) { |
| 1656 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1675 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1657 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1676 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1658 | 1677 |
| 1659 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. | 1678 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. |
| 1679 QuicPathId path_id = kInvalidPathId; |
| 1660 for (QuicPacketNumber i = 1; i <= 244; ++i) { | 1680 for (QuicPacketNumber i = 1; i <= 244; ++i) { |
| 1661 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1681 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1662 .WillOnce(Return(QuicTime::Delta::Zero())); | 1682 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1663 EXPECT_EQ(QuicTime::Delta::Zero(), | 1683 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1664 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1684 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, |
| 1685 &path_id)); |
| 1665 EXPECT_CALL(*send_algorithm_, | 1686 EXPECT_CALL(*send_algorithm_, |
| 1666 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1687 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1667 HAS_RETRANSMITTABLE_DATA)) | 1688 HAS_RETRANSMITTABLE_DATA)) |
| 1668 .WillOnce(Return(true)); | 1689 .WillOnce(Return(true)); |
| 1669 SerializedPacket packet(CreatePacket(i, true)); | 1690 SerializedPacket packet(CreatePacket(i, true)); |
| 1670 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), | 1691 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 1671 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 1692 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 1672 } | 1693 } |
| 1673 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1694 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1674 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1695 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1675 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1696 EXPECT_EQ( |
| 1676 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1697 QuicTime::Delta::Infinite(), |
| 1698 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA, &path_id)); |
| 1677 } | 1699 } |
| 1678 | 1700 |
| 1679 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { | 1701 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { |
| 1680 uint32_t initial_rtt_us = 325000; | 1702 uint32_t initial_rtt_us = 325000; |
| 1681 EXPECT_NE(initial_rtt_us, | 1703 EXPECT_NE(initial_rtt_us, |
| 1682 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); | 1704 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1683 | 1705 |
| 1684 QuicConfig config; | 1706 QuicConfig config; |
| 1685 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); | 1707 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); |
| 1686 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1708 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1704 static_cast<uint64_t>(manager_.GetRttStats()->initial_rtt_us())); | 1726 static_cast<uint64_t>(manager_.GetRttStats()->initial_rtt_us())); |
| 1705 } | 1727 } |
| 1706 | 1728 |
| 1707 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) { | 1729 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) { |
| 1708 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); | 1730 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1709 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); | 1731 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); |
| 1710 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); | 1732 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); |
| 1711 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1733 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1712 | 1734 |
| 1713 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); | 1735 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); |
| 1714 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1736 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); |
| 1715 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); | 1737 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); |
| 1716 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1738 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); |
| 1717 | 1739 |
| 1718 EXPECT_CALL(*send_algorithm_, OnConnectionMigration()); | 1740 EXPECT_CALL(*send_algorithm_, OnConnectionMigration()); |
| 1719 manager_.OnConnectionMigration(UNSPECIFIED_CHANGE); | 1741 manager_.OnConnectionMigration(kDefaultPathId, UNSPECIFIED_CHANGE); |
| 1720 | 1742 |
| 1721 EXPECT_EQ(default_init_rtt, rtt_stats->initial_rtt_us()); | 1743 EXPECT_EQ(default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1722 EXPECT_EQ(0u, manager_.consecutive_rto_count()); | 1744 EXPECT_EQ(0u, manager_.GetConsecutiveRtoCount()); |
| 1723 EXPECT_EQ(0u, manager_.consecutive_tlp_count()); | 1745 EXPECT_EQ(0u, manager_.GetConsecutiveTlpCount()); |
| 1724 } | 1746 } |
| 1725 | 1747 |
| 1726 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) { | 1748 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) { |
| 1727 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); | 1749 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1728 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); | 1750 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); |
| 1729 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); | 1751 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); |
| 1730 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1752 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1731 | 1753 |
| 1732 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); | 1754 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); |
| 1733 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1755 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); |
| 1734 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); | 1756 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); |
| 1735 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1757 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); |
| 1736 | 1758 |
| 1737 manager_.OnConnectionMigration(IPV4_SUBNET_CHANGE); | 1759 manager_.OnConnectionMigration(kDefaultPathId, IPV4_SUBNET_CHANGE); |
| 1738 | 1760 |
| 1739 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1761 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1740 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1762 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); |
| 1741 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1763 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); |
| 1742 } | 1764 } |
| 1743 | 1765 |
| 1744 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationPortChange) { | 1766 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationPortChange) { |
| 1745 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); | 1767 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1746 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); | 1768 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); |
| 1747 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); | 1769 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); |
| 1748 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1770 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1749 | 1771 |
| 1750 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); | 1772 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); |
| 1751 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1773 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); |
| 1752 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); | 1774 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); |
| 1753 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1775 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); |
| 1754 | 1776 |
| 1755 manager_.OnConnectionMigration(PORT_CHANGE); | 1777 manager_.OnConnectionMigration(kDefaultPathId, PORT_CHANGE); |
| 1756 | 1778 |
| 1757 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1779 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1758 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1780 EXPECT_EQ(1u, manager_.GetConsecutiveRtoCount()); |
| 1759 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1781 EXPECT_EQ(2u, manager_.GetConsecutiveTlpCount()); |
| 1760 } | 1782 } |
| 1761 | 1783 |
| 1762 } // namespace | 1784 } // namespace |
| 1763 } // namespace test | 1785 } // namespace test |
| 1764 } // namespace net | 1786 } // namespace net |
| OLD | NEW |