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 |