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

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

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

Powered by Google App Engine
This is Rietveld 408576698