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