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

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

Issue 605733006: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert Patch Set 3 Created 6 years, 2 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
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_server_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/quic_flags.h" 8 #include "net/quic/quic_flags.h"
9 #include "net/quic/test_tools/quic_config_peer.h" 9 #include "net/quic/test_tools/quic_config_peer.h"
10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 EXPECT_CALL(*send_algorithm_, 141 EXPECT_CALL(*send_algorithm_,
142 OnCongestionEvent(rtt_updated, _, 142 OnCongestionEvent(rtt_updated, _,
143 Pointwise(KeyEq(), ack_vector), 143 Pointwise(KeyEq(), ack_vector),
144 Pointwise(KeyEq(), lost_vector))); 144 Pointwise(KeyEq(), lost_vector)));
145 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) 145 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
146 .WillRepeatedly(Return(100 * kDefaultTCPMSS)); 146 .WillRepeatedly(Return(100 * kDefaultTCPMSS));
147 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)). 147 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)).
148 Times(AnyNumber()); 148 Times(AnyNumber());
149 } 149 }
150 150
151 // Retransmits a packet as though it was a TLP retransmission, because TLP 151 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number,
152 // leaves the |old_sequence_number| pending. 152 QuicPacketSequenceNumber new_sequence_number) {
153 // TODO(ianswett): Test with transmission types besides TLP.
154 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number,
155 QuicPacketSequenceNumber new_sequence_number) {
156 QuicSentPacketManagerPeer::MarkForRetransmission( 153 QuicSentPacketManagerPeer::MarkForRetransmission(
157 &manager_, old_sequence_number, TLP_RETRANSMISSION); 154 &manager_, old_sequence_number, TLP_RETRANSMISSION);
158 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 155 EXPECT_TRUE(manager_.HasPendingRetransmissions());
159 QuicSentPacketManager::PendingRetransmission next_retransmission = 156 QuicSentPacketManager::PendingRetransmission next_retransmission =
160 manager_.NextPendingRetransmission(); 157 manager_.NextPendingRetransmission();
161 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); 158 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number);
162 EXPECT_EQ(TLP_RETRANSMISSION, 159 EXPECT_EQ(TLP_RETRANSMISSION,
163 next_retransmission.transmission_type); 160 next_retransmission.transmission_type);
164 manager_.OnRetransmittedPacket(old_sequence_number,
165 new_sequence_number);
166 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(
167 &manager_, new_sequence_number));
168 }
169
170 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number,
171 QuicPacketSequenceNumber new_sequence_number) {
172 RetransmitPacket(old_sequence_number, new_sequence_number);
173 161
174 EXPECT_CALL(*send_algorithm_, 162 EXPECT_CALL(*send_algorithm_,
175 OnPacketSent(_, BytesInFlight(), new_sequence_number, 163 OnPacketSent(_, BytesInFlight(), new_sequence_number,
176 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 164 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
177 .WillOnce(Return(true)); 165 .WillOnce(Return(true));
178 manager_.OnPacketSent(new_sequence_number, 166 SerializedPacket packet(CreatePacket(new_sequence_number, false));
167 manager_.OnPacketSent(&packet,
168 old_sequence_number,
179 clock_.Now(), 169 clock_.Now(),
180 kDefaultLength, 170 kDefaultLength,
181 LOSS_RETRANSMISSION, 171 LOSS_RETRANSMISSION,
182 HAS_RETRANSMITTABLE_DATA); 172 HAS_RETRANSMITTABLE_DATA);
173 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(
174 &manager_, new_sequence_number));
183 } 175 }
184 176
185 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { 177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) {
186 return CreatePacket(sequence_number, true); 178 return CreatePacket(sequence_number, true);
187 } 179 }
188 180
189 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, 181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number,
190 bool retransmittable) { 182 bool retransmittable) {
191 packets_.push_back(QuicPacket::NewDataPacket( 183 packets_.push_back(QuicPacket::NewDataPacket(
192 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, 184 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false,
(...skipping 10 matching lines...) Expand all
203 PACKET_6BYTE_SEQUENCE_NUMBER)); 195 PACKET_6BYTE_SEQUENCE_NUMBER));
204 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 196 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER,
205 packets_.back(), 0u, NULL); 197 packets_.back(), 0u, NULL);
206 } 198 }
207 199
208 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { 200 void SendDataPacket(QuicPacketSequenceNumber sequence_number) {
209 EXPECT_CALL(*send_algorithm_, 201 EXPECT_CALL(*send_algorithm_,
210 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) 202 OnPacketSent(_, BytesInFlight(), sequence_number, _, _))
211 .Times(1).WillOnce(Return(true)); 203 .Times(1).WillOnce(Return(true));
212 SerializedPacket packet(CreateDataPacket(sequence_number)); 204 SerializedPacket packet(CreateDataPacket(sequence_number));
213 manager_.OnSerializedPacket(packet); 205 manager_.OnPacketSent(&packet, 0, clock_.Now(),
214 manager_.OnPacketSent(sequence_number, clock_.Now(),
215 packet.packet->length(), NOT_RETRANSMISSION, 206 packet.packet->length(), NOT_RETRANSMISSION,
216 HAS_RETRANSMITTABLE_DATA); 207 HAS_RETRANSMITTABLE_DATA);
217 } 208 }
218 209
219 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { 210 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) {
220 EXPECT_CALL(*send_algorithm_, 211 EXPECT_CALL(*send_algorithm_,
221 OnPacketSent(_, BytesInFlight(), sequence_number, 212 OnPacketSent(_, BytesInFlight(), sequence_number,
222 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 213 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
223 .Times(1).WillOnce(Return(true)); 214 .Times(1).WillOnce(Return(true));
224 SerializedPacket packet(CreateDataPacket(sequence_number)); 215 SerializedPacket packet(CreateDataPacket(sequence_number));
225 packet.retransmittable_frames->AddStreamFrame( 216 packet.retransmittable_frames->AddStreamFrame(
226 new QuicStreamFrame(1, false, 0, IOVector())); 217 new QuicStreamFrame(1, false, 0, IOVector()));
227 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE); 218 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE);
228 manager_.OnSerializedPacket(packet); 219 manager_.OnPacketSent(&packet, 0, clock_.Now(),
229 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
230 packet.packet->length(), NOT_RETRANSMISSION, 220 packet.packet->length(), NOT_RETRANSMISSION,
231 HAS_RETRANSMITTABLE_DATA); 221 HAS_RETRANSMITTABLE_DATA);
232 } 222 }
233 223
234 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { 224 void SendFecPacket(QuicPacketSequenceNumber sequence_number) {
235 EXPECT_CALL(*send_algorithm_, 225 EXPECT_CALL(*send_algorithm_,
236 OnPacketSent(_, BytesInFlight(), sequence_number, 226 OnPacketSent(_, BytesInFlight(), sequence_number,
237 kDefaultLength, NO_RETRANSMITTABLE_DATA)) 227 kDefaultLength, NO_RETRANSMITTABLE_DATA))
238 .Times(1).WillOnce(Return(true)); 228 .Times(1).WillOnce(Return(true));
239 SerializedPacket packet(CreateFecPacket(sequence_number)); 229 SerializedPacket packet(CreateFecPacket(sequence_number));
240 manager_.OnSerializedPacket(packet); 230 manager_.OnPacketSent(&packet, 0, clock_.Now(),
241 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
242 packet.packet->length(), NOT_RETRANSMISSION, 231 packet.packet->length(), NOT_RETRANSMISSION,
243 NO_RETRANSMITTABLE_DATA); 232 NO_RETRANSMITTABLE_DATA);
244 } 233 }
245 234
246 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { 235 void SendAckPacket(QuicPacketSequenceNumber sequence_number) {
247 EXPECT_CALL(*send_algorithm_, 236 EXPECT_CALL(*send_algorithm_,
248 OnPacketSent(_, BytesInFlight(), sequence_number, 237 OnPacketSent(_, BytesInFlight(), sequence_number,
249 kDefaultLength, NO_RETRANSMITTABLE_DATA)) 238 kDefaultLength, NO_RETRANSMITTABLE_DATA))
250 .Times(1).WillOnce(Return(false)); 239 .Times(1).WillOnce(Return(false));
251 SerializedPacket packet(CreatePacket(sequence_number, false)); 240 SerializedPacket packet(CreatePacket(sequence_number, false));
252 manager_.OnSerializedPacket(packet); 241 manager_.OnPacketSent(&packet, 0, clock_.Now(),
253 manager_.OnPacketSent(sequence_number, clock_.Now(),
254 packet.packet->length(), NOT_RETRANSMISSION, 242 packet.packet->length(), NOT_RETRANSMISSION,
255 NO_RETRANSMITTABLE_DATA); 243 NO_RETRANSMITTABLE_DATA);
256 } 244 }
257 245
258 // Based on QuicConnection's WritePendingRetransmissions. 246 // Based on QuicConnection's WritePendingRetransmissions.
259 void RetransmitNextPacket( 247 void RetransmitNextPacket(
260 QuicPacketSequenceNumber retransmission_sequence_number) { 248 QuicPacketSequenceNumber retransmission_sequence_number) {
261 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 249 EXPECT_TRUE(manager_.HasPendingRetransmissions());
262 EXPECT_CALL(*send_algorithm_, 250 EXPECT_CALL(*send_algorithm_,
263 OnPacketSent(_, _, retransmission_sequence_number, 251 OnPacketSent(_, _, retransmission_sequence_number,
264 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 252 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
265 .Times(1).WillOnce(Return(true)); 253 .Times(1).WillOnce(Return(true));
266 const QuicSentPacketManager::PendingRetransmission pending = 254 const QuicSentPacketManager::PendingRetransmission pending =
267 manager_.NextPendingRetransmission(); 255 manager_.NextPendingRetransmission();
268 manager_.OnRetransmittedPacket(pending.sequence_number, 256 SerializedPacket packet(
269 retransmission_sequence_number); 257 CreatePacket(retransmission_sequence_number, false));
270 manager_.OnPacketSent(retransmission_sequence_number, clock_.Now(), 258 manager_.OnPacketSent(&packet, pending.sequence_number, clock_.Now(),
271 kDefaultLength, pending.transmission_type, 259 kDefaultLength, pending.transmission_type,
272 HAS_RETRANSMITTABLE_DATA); 260 HAS_RETRANSMITTABLE_DATA);
273 } 261 }
274 262
275 QuicSentPacketManager manager_; 263 QuicSentPacketManager manager_;
276 vector<QuicPacket*> packets_; 264 vector<QuicPacket*> packets_;
277 MockClock clock_; 265 MockClock clock_;
278 QuicConnectionStats stats_; 266 QuicConnectionStats stats_;
279 MockSendAlgorithm* send_algorithm_; 267 MockSendAlgorithm* send_algorithm_;
280 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; 268 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_;
281 }; 269 };
282 270
283 TEST_F(QuicSentPacketManagerTest, IsUnacked) { 271 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
284 VerifyUnackedPackets(NULL, 0); 272 VerifyUnackedPackets(NULL, 0);
285 273 SendDataPacket(1);
286 SerializedPacket serialized_packet(CreateDataPacket(1));
287
288 manager_.OnSerializedPacket(serialized_packet);
289 274
290 QuicPacketSequenceNumber unacked[] = { 1 }; 275 QuicPacketSequenceNumber unacked[] = { 1 };
291 VerifyUnackedPackets(unacked, arraysize(unacked)); 276 VerifyUnackedPackets(unacked, arraysize(unacked));
292 QuicPacketSequenceNumber retransmittable[] = { 1 }; 277 QuicPacketSequenceNumber retransmittable[] = { 1 };
293 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 278 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
294 } 279 }
295 280
296 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { 281 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) {
297 SendDataPacket(1); 282 SendDataPacket(1);
298 RetransmitPacket(1, 2); 283 RetransmitAndSendPacket(1, 2);
299 284
300 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); 285 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2));
301 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 286 QuicPacketSequenceNumber unacked[] = { 1, 2 };
302 VerifyUnackedPackets(unacked, arraysize(unacked)); 287 VerifyUnackedPackets(unacked, arraysize(unacked));
303 QuicPacketSequenceNumber retransmittable[] = { 2 }; 288 QuicPacketSequenceNumber retransmittable[] = { 2 };
304 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 289 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
305 } 290 }
306 291
307 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { 292 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
308 SendDataPacket(1); 293 SendDataPacket(1);
(...skipping 29 matching lines...) Expand all
338 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 323 EXPECT_FALSE(manager_.HasPendingRetransmissions());
339 324
340 // No unacked packets remain. 325 // No unacked packets remain.
341 VerifyUnackedPackets(NULL, 0); 326 VerifyUnackedPackets(NULL, 0);
342 VerifyRetransmittablePackets(NULL, 0); 327 VerifyRetransmittablePackets(NULL, 0);
343 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); 328 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted);
344 } 329 }
345 330
346 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { 331 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) {
347 SendDataPacket(1); 332 SendDataPacket(1);
348 RetransmitPacket(1, 2);
349 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
350 clock_.AdvanceTime(rtt);
351
352 // Ack 1 but not 2.
353 ExpectAck(1);
354 QuicAckFrame ack_frame;
355 ack_frame.largest_observed = 1;
356 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
357
358 // 2 should be unacked, since it may provide an RTT measurement.
359 QuicPacketSequenceNumber unacked[] = { 2 };
360 VerifyUnackedPackets(unacked, arraysize(unacked));
361 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
362 VerifyRetransmittablePackets(NULL, 0);
363
364 // Verify that the retransmission alarm would not fire,
365 // since there is no retransmittable data outstanding.
366 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime());
367 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
368 }
369
370 TEST_F(QuicSentPacketManagerTest, RetransmitAndSendThenAckPrevious) {
371 SendDataPacket(1);
372 RetransmitAndSendPacket(1, 2); 333 RetransmitAndSendPacket(1, 2);
373 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 334 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
374 clock_.AdvanceTime(rtt); 335 clock_.AdvanceTime(rtt);
375 336
376 // Ack 1 but not 2. 337 // Ack 1 but not 2.
377 ExpectAck(1); 338 ExpectAck(1);
378 QuicAckFrame ack_frame; 339 QuicAckFrame ack_frame;
379 ack_frame.largest_observed = 1; 340 ack_frame.largest_observed = 1;
380 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 341 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
381 342
382 // 2 remains unacked, but no packets have retransmittable data. 343 // 2 remains unacked, but no packets have retransmittable data.
383 QuicPacketSequenceNumber unacked[] = { 2 }; 344 QuicPacketSequenceNumber unacked[] = { 2 };
384 VerifyUnackedPackets(unacked, arraysize(unacked)); 345 VerifyUnackedPackets(unacked, arraysize(unacked));
385 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 346 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
386 VerifyRetransmittablePackets(NULL, 0); 347 VerifyRetransmittablePackets(NULL, 0);
387 348
388 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); 349 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted);
389 } 350 }
390 351
391 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { 352 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) {
392 SendDataPacket(1); 353 SendDataPacket(1);
393 RetransmitPacket(1, 2); 354 RetransmitAndSendPacket(1, 2);
394 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _))
395 .WillOnce(Return(true));
396 manager_.OnPacketSent(2, clock_.ApproximateNow(), kDefaultLength,
397 LOSS_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
398 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); 355 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15);
399 clock_.AdvanceTime(rtt); 356 clock_.AdvanceTime(rtt);
400 357
401 // First, ACK packet 1 which makes packet 2 non-retransmittable. 358 // First, ACK packet 1 which makes packet 2 non-retransmittable.
402 ExpectAck(1); 359 ExpectAck(1);
403 QuicAckFrame ack_frame; 360 QuicAckFrame ack_frame;
404 ack_frame.largest_observed = 1; 361 ack_frame.largest_observed = 1;
405 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 362 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
406 363
407 SendDataPacket(3); 364 SendDataPacket(3);
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 VerifyUnackedPackets(unacked, arraysize(unacked)); 598 VerifyUnackedPackets(unacked, arraysize(unacked));
642 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; 599 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 };
643 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 600 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
644 } 601 }
645 602
646 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) { 603 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) {
647 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 604 EXPECT_EQ(1u, manager_.GetLeastUnacked());
648 } 605 }
649 606
650 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { 607 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) {
651 SerializedPacket serialized_packet(CreateDataPacket(1)); 608 SendDataPacket(1);
652
653 manager_.OnSerializedPacket(serialized_packet);
654 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 609 EXPECT_EQ(1u, manager_.GetLeastUnacked());
655 } 610 }
656 611
657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { 612 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) {
658 SerializedPacket serialized_packet(CreateFecPacket(1)); 613 SendFecPacket(1);
659
660 manager_.OnSerializedPacket(serialized_packet);
661 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 614 EXPECT_EQ(1u, manager_.GetLeastUnacked());
662 } 615 }
663 616
664 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { 617 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) {
665 VerifyUnackedPackets(NULL, 0); 618 VerifyUnackedPackets(NULL, 0);
666 619
667 SendFecPacket(1); 620 SendFecPacket(1);
668 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 621 EXPECT_EQ(1u, manager_.GetLeastUnacked());
669 622
670 SendFecPacket(2); 623 SendFecPacket(2);
(...skipping 12 matching lines...) Expand all
683 ack_frame.largest_observed = 2; 636 ack_frame.largest_observed = 2;
684 ack_frame.missing_packets.insert(1); 637 ack_frame.missing_packets.insert(1);
685 manager_.OnIncomingAck(ack_frame, clock_.Now()); 638 manager_.OnIncomingAck(ack_frame, clock_.Now());
686 639
687 EXPECT_EQ(1u, manager_.GetLeastUnacked()); 640 EXPECT_EQ(1u, manager_.GetLeastUnacked());
688 } 641 }
689 642
690 TEST_F(QuicSentPacketManagerTest, GetSentTime) { 643 TEST_F(QuicSentPacketManagerTest, GetSentTime) {
691 VerifyUnackedPackets(NULL, 0); 644 VerifyUnackedPackets(NULL, 0);
692 645
693 SerializedPacket serialized_packet(CreateFecPacket(1)); 646 QuicTime sent_time = clock_.Now();
694 manager_.OnSerializedPacket(serialized_packet); 647 SendFecPacket(1);
695 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)) 648 QuicTime sent_time2 = clock_.Now();
696 .Times(1).WillOnce(Return(true)); 649 SendFecPacket(2);
697 manager_.OnPacketSent(1, QuicTime::Zero(), kDefaultLength, NOT_RETRANSMISSION,
698 NO_RETRANSMITTABLE_DATA);
699
700 SerializedPacket serialized_packet2(CreateFecPacket(2));
701 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1));
702 manager_.OnSerializedPacket(serialized_packet2);
703 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _))
704 .Times(1).WillOnce(Return(true));
705 manager_.OnPacketSent(2, sent_time, kDefaultLength, NOT_RETRANSMISSION,
706 NO_RETRANSMITTABLE_DATA);
707
708 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 650 QuicPacketSequenceNumber unacked[] = { 1, 2 };
709 VerifyUnackedPackets(unacked, arraysize(unacked)); 651 VerifyUnackedPackets(unacked, arraysize(unacked));
710 VerifyRetransmittablePackets(NULL, 0); 652 VerifyRetransmittablePackets(NULL, 0);
711 653
712 EXPECT_TRUE(manager_.HasUnackedPackets()); 654 EXPECT_TRUE(manager_.HasUnackedPackets());
713 EXPECT_EQ(QuicTime::Zero(), 655 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1));
714 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); 656 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
715 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
716 } 657 }
717 658
718 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { 659 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) {
719 SendDataPacket(1); 660 SendDataPacket(1);
720 SendAckPacket(2); 661 SendAckPacket(2);
721 662
722 // Now ack the ack and expect an RTT update. 663 // Now ack the ack and expect an RTT update.
723 QuicAckFrame ack_frame; 664 QuicAckFrame ack_frame;
724 ack_frame.largest_observed = 2; 665 ack_frame.largest_observed = 2;
725 ack_frame.delta_time_largest_observed = 666 ack_frame.delta_time_largest_observed =
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 ack_frame.largest_observed = 2; 954 ack_frame.largest_observed = 2;
1014 ack_frame.missing_packets.insert(1); 955 ack_frame.missing_packets.insert(1);
1015 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 956 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
1016 957
1017 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 958 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1018 QuicPacketSequenceNumber unacked[] = { 3 }; 959 QuicPacketSequenceNumber unacked[] = { 3 };
1019 VerifyUnackedPackets(unacked, arraysize(unacked)); 960 VerifyUnackedPackets(unacked, arraysize(unacked));
1020 } 961 }
1021 962
1022 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { 963 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) {
1023 // Send 2 crypto packets and serialize 1 data packet. 964 // Send 2 crypto packets and 1 data packet.
1024 const size_t kNumSentCryptoPackets = 2; 965 const size_t kNumSentCryptoPackets = 2;
1025 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { 966 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) {
1026 SendCryptoPacket(i); 967 SendCryptoPacket(i);
1027 } 968 }
1028 SerializedPacket packet(CreateDataPacket(3)); 969 SendDataPacket(3);
1029 manager_.OnSerializedPacket(packet);
1030 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 970 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1031 971
1032 // Retransmit 2 crypto packets, but not the serialized packet. 972 // Retransmit 2 crypto packets, but not the serialized packet.
1033 manager_.OnRetransmissionTimeout(); 973 manager_.OnRetransmissionTimeout();
1034 RetransmitNextPacket(4); 974 RetransmitNextPacket(4);
1035 RetransmitNextPacket(5); 975 RetransmitNextPacket(5);
1036 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 976 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1037 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 977 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1038 } 978 }
1039 979
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 QuicAckFrame ack_frame; 1025 QuicAckFrame ack_frame;
1086 ack_frame.largest_observed = 3; 1026 ack_frame.largest_observed = 3;
1087 ack_frame.missing_packets.insert(1); 1027 ack_frame.missing_packets.insert(1);
1088 ack_frame.missing_packets.insert(2); 1028 ack_frame.missing_packets.insert(2);
1089 ExpectUpdatedRtt(3); 1029 ExpectUpdatedRtt(3);
1090 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); 1030 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow());
1091 VerifyUnackedPackets(NULL, 0); 1031 VerifyUnackedPackets(NULL, 0);
1092 VerifyRetransmittablePackets(NULL, 0); 1032 VerifyRetransmittablePackets(NULL, 0);
1093 } 1033 }
1094 1034
1095 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
1096 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
1097 // Serialize two data packets and send the latter.
1098 SerializedPacket packet(CreateDataPacket(1));
1099 manager_.OnSerializedPacket(packet);
1100 SendDataPacket(2);
1101 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1102 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1103
1104 // Retransmit 1 unacked packets, but not the first serialized packet.
1105 manager_.OnRetransmissionTimeout();
1106 EXPECT_EQ(QuicTime::Delta::Zero(),
1107 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1108 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1109 manager_.MaybeRetransmitTailLossProbe();
1110 EXPECT_TRUE(manager_.HasPendingRetransmissions());
1111 RetransmitNextPacket(3);
1112 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return(
1113 QuicTime::Delta::Infinite()));
1114 EXPECT_EQ(QuicTime::Delta::Infinite(),
1115 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA));
1116 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1117 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1118 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1119 }
1120
1121 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { 1035 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) {
1122 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); 1036 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50);
1123 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( 1037 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt(
1124 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); 1038 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
1125 EXPECT_EQ(min_rtt, 1039 EXPECT_EQ(min_rtt,
1126 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); 1040 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt());
1127 EXPECT_EQ(min_rtt, 1041 EXPECT_EQ(min_rtt,
1128 QuicSentPacketManagerPeer::GetRttStats( 1042 QuicSentPacketManagerPeer::GetRttStats(
1129 &manager_)->recent_min_rtt()); 1043 &manager_)->recent_min_rtt());
1130 1044
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 .WillRepeatedly(Return(timeout)); 1279 .WillRepeatedly(Return(timeout));
1366 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); 1280 EXPECT_EQ(timeout, manager_.GetRetransmissionTime());
1367 1281
1368 // Fire the retransmission timeout and ensure the loss detection algorithm 1282 // Fire the retransmission timeout and ensure the loss detection algorithm
1369 // is invoked. 1283 // is invoked.
1370 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) 1284 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _))
1371 .WillOnce(Return(SequenceNumberSet())); 1285 .WillOnce(Return(SequenceNumberSet()));
1372 manager_.OnRetransmissionTimeout(); 1286 manager_.OnRetransmissionTimeout();
1373 } 1287 }
1374 1288
1375 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetection) {
1376 EXPECT_EQ(kNack,
1377 QuicSentPacketManagerPeer::GetLossAlgorithm(
1378 &manager_)->GetLossDetectionType());
1379
1380 QuicConfig config;
1381 QuicConfigPeer::SetReceivedLossDetection(&config, kTIME);
1382 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
1383 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_));
1384 EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
1385 .WillOnce(Return(100 * kDefaultTCPMSS));
1386 manager_.SetFromConfig(config);
1387
1388 EXPECT_EQ(kTime,
1389 QuicSentPacketManagerPeer::GetLossAlgorithm(
1390 &manager_)->GetLossDetectionType());
1391 }
1392
1393 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { 1289 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) {
1394 EXPECT_EQ(kNack, 1290 EXPECT_EQ(kNack,
1395 QuicSentPacketManagerPeer::GetLossAlgorithm( 1291 QuicSentPacketManagerPeer::GetLossAlgorithm(
1396 &manager_)->GetLossDetectionType()); 1292 &manager_)->GetLossDetectionType());
1397 1293
1398 QuicConfig config; 1294 QuicConfig config;
1399 QuicTagVector options; 1295 QuicTagVector options;
1400 options.push_back(kTIME); 1296 options.push_back(kTIME);
1401 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); 1297 QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
1402 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); 1298 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1462 .WillOnce(Return(100 * kDefaultTCPMSS)); 1358 .WillOnce(Return(100 * kDefaultTCPMSS));
1463 manager_.SetFromConfig(config); 1359 manager_.SetFromConfig(config);
1464 1360
1465 EXPECT_EQ(initial_rtt_us, 1361 EXPECT_EQ(initial_rtt_us,
1466 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); 1362 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds());
1467 } 1363 }
1468 1364
1469 } // namespace 1365 } // namespace
1470 } // namespace test 1366 } // namespace test
1471 } // namespace net 1367 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_server_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698