OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
6 | 6 |
7 #include "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 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 &manager_, new_sequence_number)); | 174 &manager_, new_sequence_number)); |
175 } | 175 } |
176 | 176 |
177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { | 177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { |
178 return CreatePacket(sequence_number, true); | 178 return CreatePacket(sequence_number, true); |
179 } | 179 } |
180 | 180 |
181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, | 181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, |
182 bool retransmittable) { | 182 bool retransmittable) { |
183 packets_.push_back(QuicPacket::NewDataPacket( | 183 packets_.push_back(QuicPacket::NewDataPacket( |
184 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, | 184 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, |
185 PACKET_6BYTE_SEQUENCE_NUMBER)); | 185 PACKET_6BYTE_SEQUENCE_NUMBER)); |
186 return SerializedPacket( | 186 return SerializedPacket( |
187 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 187 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, packets_.back(), 0u, |
188 packets_.back(), 0u, | 188 retransmittable ? new RetransmittableFrames() : nullptr); |
189 retransmittable ? new RetransmittableFrames() : NULL); | |
190 } | 189 } |
191 | 190 |
192 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { | 191 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { |
193 packets_.push_back(QuicPacket::NewFecPacket( | 192 packets_.push_back(QuicPacket::NewFecPacket( |
194 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, | 193 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, |
195 PACKET_6BYTE_SEQUENCE_NUMBER)); | 194 PACKET_6BYTE_SEQUENCE_NUMBER)); |
196 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 195 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
197 packets_.back(), 0u, NULL); | 196 packets_.back(), 0u, nullptr); |
198 } | 197 } |
199 | 198 |
200 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { | 199 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
201 EXPECT_CALL(*send_algorithm_, | 200 EXPECT_CALL(*send_algorithm_, |
202 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) | 201 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) |
203 .Times(1).WillOnce(Return(true)); | 202 .Times(1).WillOnce(Return(true)); |
204 SerializedPacket packet(CreateDataPacket(sequence_number)); | 203 SerializedPacket packet(CreateDataPacket(sequence_number)); |
205 manager_.OnPacketSent(&packet, 0, clock_.Now(), | 204 manager_.OnPacketSent(&packet, 0, clock_.Now(), |
206 packet.packet->length(), NOT_RETRANSMISSION, | 205 packet.packet->length(), NOT_RETRANSMISSION, |
207 HAS_RETRANSMITTABLE_DATA); | 206 HAS_RETRANSMITTABLE_DATA); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 | 261 |
263 QuicSentPacketManager manager_; | 262 QuicSentPacketManager manager_; |
264 vector<QuicPacket*> packets_; | 263 vector<QuicPacket*> packets_; |
265 MockClock clock_; | 264 MockClock clock_; |
266 QuicConnectionStats stats_; | 265 QuicConnectionStats stats_; |
267 MockSendAlgorithm* send_algorithm_; | 266 MockSendAlgorithm* send_algorithm_; |
268 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; | 267 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; |
269 }; | 268 }; |
270 | 269 |
271 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 270 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
272 VerifyUnackedPackets(NULL, 0); | 271 VerifyUnackedPackets(nullptr, 0); |
273 SendDataPacket(1); | 272 SendDataPacket(1); |
274 | 273 |
275 QuicPacketSequenceNumber unacked[] = { 1 }; | 274 QuicPacketSequenceNumber unacked[] = { 1 }; |
276 VerifyUnackedPackets(unacked, arraysize(unacked)); | 275 VerifyUnackedPackets(unacked, arraysize(unacked)); |
277 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 276 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
278 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 277 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
279 } | 278 } |
280 | 279 |
281 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 280 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
282 SendDataPacket(1); | 281 SendDataPacket(1); |
(...skipping 14 matching lines...) Expand all Loading... |
297 QuicAckFrame ack_frame; | 296 QuicAckFrame ack_frame; |
298 ack_frame.largest_observed = 2; | 297 ack_frame.largest_observed = 2; |
299 ack_frame.missing_packets.insert(1); | 298 ack_frame.missing_packets.insert(1); |
300 ExpectAck(2); | 299 ExpectAck(2); |
301 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 300 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
302 | 301 |
303 // Packet 1 is unacked, pending, but not retransmittable. | 302 // Packet 1 is unacked, pending, but not retransmittable. |
304 QuicPacketSequenceNumber unacked[] = { 1 }; | 303 QuicPacketSequenceNumber unacked[] = { 1 }; |
305 VerifyUnackedPackets(unacked, arraysize(unacked)); | 304 VerifyUnackedPackets(unacked, arraysize(unacked)); |
306 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 305 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
307 VerifyRetransmittablePackets(NULL, 0); | 306 VerifyRetransmittablePackets(nullptr, 0); |
308 } | 307 } |
309 | 308 |
310 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 309 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
311 SendDataPacket(1); | 310 SendDataPacket(1); |
312 QuicSentPacketManagerPeer::MarkForRetransmission( | 311 QuicSentPacketManagerPeer::MarkForRetransmission( |
313 &manager_, 1, TLP_RETRANSMISSION); | 312 &manager_, 1, TLP_RETRANSMISSION); |
314 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 313 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
315 | 314 |
316 // Ack 1. | 315 // Ack 1. |
317 QuicAckFrame ack_frame; | 316 QuicAckFrame ack_frame; |
318 ack_frame.largest_observed = 1; | 317 ack_frame.largest_observed = 1; |
319 ExpectAck(1); | 318 ExpectAck(1); |
320 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 319 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
321 | 320 |
322 // There should no longer be a pending retransmission. | 321 // There should no longer be a pending retransmission. |
323 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 322 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
324 | 323 |
325 // No unacked packets remain. | 324 // No unacked packets remain. |
326 VerifyUnackedPackets(NULL, 0); | 325 VerifyUnackedPackets(nullptr, 0); |
327 VerifyRetransmittablePackets(NULL, 0); | 326 VerifyRetransmittablePackets(nullptr, 0); |
328 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 327 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
329 } | 328 } |
330 | 329 |
331 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 330 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
332 SendDataPacket(1); | 331 SendDataPacket(1); |
333 RetransmitAndSendPacket(1, 2); | 332 RetransmitAndSendPacket(1, 2); |
334 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 333 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
335 clock_.AdvanceTime(rtt); | 334 clock_.AdvanceTime(rtt); |
336 | 335 |
337 // Ack 1 but not 2. | 336 // Ack 1 but not 2. |
338 ExpectAck(1); | 337 ExpectAck(1); |
339 QuicAckFrame ack_frame; | 338 QuicAckFrame ack_frame; |
340 ack_frame.largest_observed = 1; | 339 ack_frame.largest_observed = 1; |
341 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 340 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
342 | 341 |
343 // 2 remains unacked, but no packets have retransmittable data. | 342 // 2 remains unacked, but no packets have retransmittable data. |
344 QuicPacketSequenceNumber unacked[] = { 2 }; | 343 QuicPacketSequenceNumber unacked[] = { 2 }; |
345 VerifyUnackedPackets(unacked, arraysize(unacked)); | 344 VerifyUnackedPackets(unacked, arraysize(unacked)); |
346 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 345 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
347 VerifyRetransmittablePackets(NULL, 0); | 346 VerifyRetransmittablePackets(nullptr, 0); |
348 | 347 |
349 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); | 348 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); |
350 } | 349 } |
351 | 350 |
352 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { | 351 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { |
353 SendDataPacket(1); | 352 SendDataPacket(1); |
354 RetransmitAndSendPacket(1, 2); | 353 RetransmitAndSendPacket(1, 2); |
355 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 354 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
356 clock_.AdvanceTime(rtt); | 355 clock_.AdvanceTime(rtt); |
357 | 356 |
(...skipping 16 matching lines...) Expand all Loading... |
374 | 373 |
375 ack_frame.largest_observed = 4; | 374 ack_frame.largest_observed = 4; |
376 ExpectAck(4); | 375 ExpectAck(4); |
377 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 376 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
378 | 377 |
379 ack_frame.largest_observed = 5; | 378 ack_frame.largest_observed = 5; |
380 ExpectAckAndLoss(true, 5, 2); | 379 ExpectAckAndLoss(true, 5, 2); |
381 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 380 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
382 | 381 |
383 // No packets remain unacked. | 382 // No packets remain unacked. |
384 VerifyUnackedPackets(NULL, 0); | 383 VerifyUnackedPackets(nullptr, 0); |
385 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 384 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
386 VerifyRetransmittablePackets(NULL, 0); | 385 VerifyRetransmittablePackets(nullptr, 0); |
387 | 386 |
388 // Verify that the retransmission alarm would not fire, | 387 // Verify that the retransmission alarm would not fire, |
389 // since there is no retransmittable data outstanding. | 388 // since there is no retransmittable data outstanding. |
390 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 389 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
391 } | 390 } |
392 | 391 |
393 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { | 392 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { |
394 SendDataPacket(1); | 393 SendDataPacket(1); |
395 RetransmitAndSendPacket(1, 2); | 394 RetransmitAndSendPacket(1, 2); |
396 | 395 |
(...skipping 11 matching lines...) Expand all Loading... |
408 QuicAckFrame ack_frame; | 407 QuicAckFrame ack_frame; |
409 ack_frame.largest_observed = 1; | 408 ack_frame.largest_observed = 1; |
410 ExpectUpdatedRtt(1); | 409 ExpectUpdatedRtt(1); |
411 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); | 410 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); |
412 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 411 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
413 | 412 |
414 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT. | 413 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT. |
415 QuicPacketSequenceNumber unacked[] = { 2 }; | 414 QuicPacketSequenceNumber unacked[] = { 2 }; |
416 VerifyUnackedPackets(unacked, arraysize(unacked)); | 415 VerifyUnackedPackets(unacked, arraysize(unacked)); |
417 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 416 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
418 VerifyRetransmittablePackets(NULL, 0); | 417 VerifyRetransmittablePackets(nullptr, 0); |
419 | 418 |
420 // Verify that the retransmission alarm would not fire, | 419 // Verify that the retransmission alarm would not fire, |
421 // since there is no retransmittable data outstanding. | 420 // since there is no retransmittable data outstanding. |
422 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 421 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
423 } | 422 } |
424 | 423 |
425 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { | 424 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
426 StrictMock<MockDebugDelegate> debug_delegate; | 425 StrictMock<MockDebugDelegate> debug_delegate; |
427 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition( | 426 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition( |
428 TLP_RETRANSMISSION, kDefaultLength)).Times(2); | 427 TLP_RETRANSMISSION, kDefaultLength)).Times(2); |
429 manager_.set_debug_delegate(&debug_delegate); | 428 manager_.set_debug_delegate(&debug_delegate); |
430 | 429 |
431 SendDataPacket(1); | 430 SendDataPacket(1); |
432 RetransmitAndSendPacket(1, 2); | 431 RetransmitAndSendPacket(1, 2); |
433 RetransmitAndSendPacket(2, 3); | 432 RetransmitAndSendPacket(2, 3); |
434 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 433 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
435 clock_.AdvanceTime(rtt); | 434 clock_.AdvanceTime(rtt); |
436 | 435 |
437 // Ack 1 but not 2 or 3. | 436 // Ack 1 but not 2 or 3. |
438 ExpectAck(1); | 437 ExpectAck(1); |
439 QuicAckFrame ack_frame; | 438 QuicAckFrame ack_frame; |
440 ack_frame.largest_observed = 1; | 439 ack_frame.largest_observed = 1; |
441 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 440 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
442 | 441 |
443 // 2 and 3 remain unacked, but no packets have retransmittable data. | 442 // 2 and 3 remain unacked, but no packets have retransmittable data. |
444 QuicPacketSequenceNumber unacked[] = { 2, 3 }; | 443 QuicPacketSequenceNumber unacked[] = { 2, 3 }; |
445 VerifyUnackedPackets(unacked, arraysize(unacked)); | 444 VerifyUnackedPackets(unacked, arraysize(unacked)); |
446 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 445 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
447 VerifyRetransmittablePackets(NULL, 0); | 446 VerifyRetransmittablePackets(nullptr, 0); |
448 | 447 |
449 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked. | 448 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked. |
450 SendDataPacket(4); | 449 SendDataPacket(4); |
451 ack_frame.largest_observed = 4; | 450 ack_frame.largest_observed = 4; |
452 ack_frame.missing_packets.insert(2); | 451 ack_frame.missing_packets.insert(2); |
453 QuicPacketSequenceNumber acked[] = { 3, 4 }; | 452 QuicPacketSequenceNumber acked[] = { 3, 4 }; |
454 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); | 453 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
455 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 454 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
456 | 455 |
457 QuicPacketSequenceNumber unacked2[] = { 2 }; | 456 QuicPacketSequenceNumber unacked2[] = { 2 }; |
458 VerifyUnackedPackets(unacked2, arraysize(unacked2)); | 457 VerifyUnackedPackets(unacked2, arraysize(unacked2)); |
459 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 458 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
460 | 459 |
461 SendDataPacket(5); | 460 SendDataPacket(5); |
462 ack_frame.largest_observed = 5; | 461 ack_frame.largest_observed = 5; |
463 ExpectAckAndLoss(true, 5, 2); | 462 ExpectAckAndLoss(true, 5, 2); |
464 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 463 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
465 | 464 |
466 VerifyUnackedPackets(NULL, 0); | 465 VerifyUnackedPackets(nullptr, 0); |
467 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 466 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
468 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); | 467 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); |
469 } | 468 } |
470 | 469 |
471 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) { | 470 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) { |
472 SendDataPacket(1); | 471 SendDataPacket(1); |
473 SendDataPacket(2); | 472 SendDataPacket(2); |
474 SendFecPacket(3); | 473 SendFecPacket(3); |
475 SendDataPacket(4); | 474 SendDataPacket(4); |
476 | 475 |
477 // Ack 2 and 3, and mark 1 as revived. | 476 // Ack 2 and 3, and mark 1 as revived. |
478 QuicAckFrame ack_frame; | 477 QuicAckFrame ack_frame; |
479 ack_frame.largest_observed = 3; | 478 ack_frame.largest_observed = 3; |
480 ack_frame.missing_packets.insert(1); | 479 ack_frame.missing_packets.insert(1); |
481 ack_frame.revived_packets.insert(1); | 480 ack_frame.revived_packets.insert(1); |
482 QuicPacketSequenceNumber acked[] = { 2, 3 }; | 481 QuicPacketSequenceNumber acked[] = { 2, 3 }; |
483 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); | 482 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
484 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 483 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
485 | 484 |
486 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 485 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
487 QuicPacketSequenceNumber unacked[] = { 1, 4 }; | 486 QuicPacketSequenceNumber unacked[] = { 1, 4 }; |
488 VerifyUnackedPackets(unacked, arraysize(unacked)); | 487 VerifyUnackedPackets(unacked, arraysize(unacked)); |
489 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 488 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
490 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 489 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
491 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 490 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
492 | 491 |
493 // Ack the 4th packet and expect the 1st to be considered lost. | 492 // Ack the 4th packet and expect the 1st to be considered lost. |
494 ack_frame.largest_observed = 4; | 493 ack_frame.largest_observed = 4; |
495 ExpectAckAndLoss(true, 4, 1); | 494 ExpectAckAndLoss(true, 4, 1); |
496 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 495 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
497 | 496 |
498 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 497 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
499 VerifyRetransmittablePackets(NULL, 0); | 498 VerifyRetransmittablePackets(nullptr, 0); |
500 } | 499 } |
501 | 500 |
502 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) { | 501 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) { |
503 SendDataPacket(1); | 502 SendDataPacket(1); |
504 SendDataPacket(2); | 503 SendDataPacket(2); |
505 SendDataPacket(3); | 504 SendDataPacket(3); |
506 SendDataPacket(4); | 505 SendDataPacket(4); |
507 SendFecPacket(5); | 506 SendFecPacket(5); |
508 | 507 |
509 // Ack 2, 3, and 4, and expect the 1st to be considered lost. | 508 // Ack 2, 3, and 4, and expect the 1st to be considered lost. |
(...skipping 12 matching lines...) Expand all Loading... |
522 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 521 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
523 | 522 |
524 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be | 523 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be |
525 // removed from pending retransmissions map. | 524 // removed from pending retransmissions map. |
526 ack_frame.largest_observed = 5; | 525 ack_frame.largest_observed = 5; |
527 ack_frame.revived_packets.insert(1); | 526 ack_frame.revived_packets.insert(1); |
528 ExpectAck(5); | 527 ExpectAck(5); |
529 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 528 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
530 | 529 |
531 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 530 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
532 VerifyRetransmittablePackets(NULL, 0); | 531 VerifyRetransmittablePackets(nullptr, 0); |
533 } | 532 } |
534 | 533 |
535 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { | 534 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
536 SendDataPacket(1); | 535 SendDataPacket(1); |
537 RetransmitAndSendPacket(1, 2); | 536 RetransmitAndSendPacket(1, 2); |
538 RetransmitAndSendPacket(2, 3); | 537 RetransmitAndSendPacket(2, 3); |
539 RetransmitAndSendPacket(3, 4); | 538 RetransmitAndSendPacket(3, 4); |
540 RetransmitAndSendPacket(4, 5); | 539 RetransmitAndSendPacket(4, 5); |
541 | 540 |
542 // Truncated ack with 4 NACKs, so the first packet is lost. | 541 // Truncated ack with 4 NACKs, so the first packet is lost. |
543 QuicAckFrame ack_frame; | 542 QuicAckFrame ack_frame; |
544 ack_frame.largest_observed = 4; | 543 ack_frame.largest_observed = 4; |
545 ack_frame.missing_packets.insert(1); | 544 ack_frame.missing_packets.insert(1); |
546 ack_frame.missing_packets.insert(2); | 545 ack_frame.missing_packets.insert(2); |
547 ack_frame.missing_packets.insert(3); | 546 ack_frame.missing_packets.insert(3); |
548 ack_frame.missing_packets.insert(4); | 547 ack_frame.missing_packets.insert(4); |
549 ack_frame.is_truncated = true; | 548 ack_frame.is_truncated = true; |
550 | 549 |
551 QuicPacketSequenceNumber lost[] = { 1 }; | 550 QuicPacketSequenceNumber lost[] = { 1 }; |
552 ExpectAcksAndLosses(true, NULL, 0, lost, arraysize(lost)); | 551 ExpectAcksAndLosses(true, nullptr, 0, lost, arraysize(lost)); |
553 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 552 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
554 | 553 |
555 // High water mark will be raised. | 554 // High water mark will be raised. |
556 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 }; | 555 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 }; |
557 VerifyUnackedPackets(unacked, arraysize(unacked)); | 556 VerifyUnackedPackets(unacked, arraysize(unacked)); |
558 QuicPacketSequenceNumber retransmittable[] = { 5 }; | 557 QuicPacketSequenceNumber retransmittable[] = { 5 }; |
559 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 558 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
560 } | 559 } |
561 | 560 |
562 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 561 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
608 SendDataPacket(1); | 607 SendDataPacket(1); |
609 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 608 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
610 } | 609 } |
611 | 610 |
612 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { | 611 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { |
613 SendFecPacket(1); | 612 SendFecPacket(1); |
614 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 613 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
615 } | 614 } |
616 | 615 |
617 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { | 616 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { |
618 VerifyUnackedPackets(NULL, 0); | 617 VerifyUnackedPackets(nullptr, 0); |
619 | 618 |
620 SendFecPacket(1); | 619 SendFecPacket(1); |
621 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 620 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
622 | 621 |
623 SendFecPacket(2); | 622 SendFecPacket(2); |
624 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 623 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
625 | 624 |
626 SendFecPacket(3); | 625 SendFecPacket(3); |
627 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 626 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
628 | 627 |
629 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; | 628 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
630 VerifyUnackedPackets(unacked, arraysize(unacked)); | 629 VerifyUnackedPackets(unacked, arraysize(unacked)); |
631 VerifyRetransmittablePackets(NULL, 0); | 630 VerifyRetransmittablePackets(nullptr, 0); |
632 | 631 |
633 // Ack 2, so there's an rtt update. | 632 // Ack 2, so there's an rtt update. |
634 ExpectAck(2); | 633 ExpectAck(2); |
635 QuicAckFrame ack_frame; | 634 QuicAckFrame ack_frame; |
636 ack_frame.largest_observed = 2; | 635 ack_frame.largest_observed = 2; |
637 ack_frame.missing_packets.insert(1); | 636 ack_frame.missing_packets.insert(1); |
638 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 637 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
639 | 638 |
640 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 639 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
641 } | 640 } |
642 | 641 |
643 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 642 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
644 VerifyUnackedPackets(NULL, 0); | 643 VerifyUnackedPackets(nullptr, 0); |
645 | 644 |
646 QuicTime sent_time = clock_.Now(); | 645 QuicTime sent_time = clock_.Now(); |
647 SendFecPacket(1); | 646 SendFecPacket(1); |
648 QuicTime sent_time2 = clock_.Now(); | 647 QuicTime sent_time2 = clock_.Now(); |
649 SendFecPacket(2); | 648 SendFecPacket(2); |
650 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 649 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
651 VerifyUnackedPackets(unacked, arraysize(unacked)); | 650 VerifyUnackedPackets(unacked, arraysize(unacked)); |
652 VerifyRetransmittablePackets(NULL, 0); | 651 VerifyRetransmittablePackets(nullptr, 0); |
653 | 652 |
654 EXPECT_TRUE(manager_.HasUnackedPackets()); | 653 EXPECT_TRUE(manager_.HasUnackedPackets()); |
655 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); | 654 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); |
656 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); | 655 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); |
657 } | 656 } |
658 | 657 |
659 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { | 658 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { |
660 SendDataPacket(1); | 659 SendDataPacket(1); |
661 SendAckPacket(2); | 660 SendAckPacket(2); |
662 | 661 |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 ack_frame.largest_observed = 3; | 782 ack_frame.largest_observed = 3; |
784 ack_frame.missing_packets.insert(1); | 783 ack_frame.missing_packets.insert(1); |
785 ack_frame.missing_packets.insert(2); | 784 ack_frame.missing_packets.insert(2); |
786 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 785 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
787 | 786 |
788 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 787 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
789 | 788 |
790 // Acking two more packets will lose both of them due to nacks. | 789 // Acking two more packets will lose both of them due to nacks. |
791 ack_frame.largest_observed = 5; | 790 ack_frame.largest_observed = 5; |
792 QuicPacketSequenceNumber lost[] = { 1, 2 }; | 791 QuicPacketSequenceNumber lost[] = { 1, 2 }; |
793 ExpectAcksAndLosses(false, NULL, 0, lost, arraysize(lost)); | 792 ExpectAcksAndLosses(false, nullptr, 0, lost, arraysize(lost)); |
794 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 793 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
795 | 794 |
796 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 795 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
797 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 796 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
798 EXPECT_EQ(2u, stats_.tlp_count); | 797 EXPECT_EQ(2u, stats_.tlp_count); |
799 EXPECT_EQ(0u, stats_.rto_count); | 798 EXPECT_EQ(0u, stats_.rto_count); |
800 } | 799 } |
801 | 800 |
802 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { | 801 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { |
803 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 802 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 EXPECT_EQ(QuicTime::Delta::Zero(), | 874 EXPECT_EQ(QuicTime::Delta::Zero(), |
876 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 875 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
877 RetransmitNextPacket(8); | 876 RetransmitNextPacket(8); |
878 RetransmitNextPacket(9); | 877 RetransmitNextPacket(9); |
879 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 878 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
880 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 879 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
881 | 880 |
882 // Now ack the two crypto packets and the speculatively encrypted request, | 881 // Now ack the two crypto packets and the speculatively encrypted request, |
883 // and ensure the first four crypto packets get abandoned, but not lost. | 882 // and ensure the first four crypto packets get abandoned, but not lost. |
884 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 }; | 883 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 }; |
885 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); | 884 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
886 QuicAckFrame ack_frame; | 885 QuicAckFrame ack_frame; |
887 ack_frame.largest_observed = 9; | 886 ack_frame.largest_observed = 9; |
888 ack_frame.missing_packets.insert(1); | 887 ack_frame.missing_packets.insert(1); |
889 ack_frame.missing_packets.insert(2); | 888 ack_frame.missing_packets.insert(2); |
890 ack_frame.missing_packets.insert(6); | 889 ack_frame.missing_packets.insert(6); |
891 ack_frame.missing_packets.insert(7); | 890 ack_frame.missing_packets.insert(7); |
892 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 891 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
893 | 892 |
894 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 893 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
895 } | 894 } |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1009 | 1008 |
1010 // Retransmit the crypto packet as 3. | 1009 // Retransmit the crypto packet as 3. |
1011 manager_.OnRetransmissionTimeout(); | 1010 manager_.OnRetransmissionTimeout(); |
1012 RetransmitNextPacket(3); | 1011 RetransmitNextPacket(3); |
1013 | 1012 |
1014 // Now neuter all unacked unencrypted packets, which occurs when the | 1013 // Now neuter all unacked unencrypted packets, which occurs when the |
1015 // connection goes forward secure. | 1014 // connection goes forward secure. |
1016 manager_.NeuterUnencryptedPackets(); | 1015 manager_.NeuterUnencryptedPackets(); |
1017 QuicPacketSequenceNumber unacked[] = { 1, 2, 3}; | 1016 QuicPacketSequenceNumber unacked[] = { 1, 2, 3}; |
1018 VerifyUnackedPackets(unacked, arraysize(unacked)); | 1017 VerifyUnackedPackets(unacked, arraysize(unacked)); |
1019 VerifyRetransmittablePackets(NULL, 0); | 1018 VerifyRetransmittablePackets(nullptr, 0); |
1020 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1019 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
1021 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1020 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
1022 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1021 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
1023 | 1022 |
1024 // Ensure both packets get discarded when packet 2 is acked. | 1023 // Ensure both packets get discarded when packet 2 is acked. |
1025 QuicAckFrame ack_frame; | 1024 QuicAckFrame ack_frame; |
1026 ack_frame.largest_observed = 3; | 1025 ack_frame.largest_observed = 3; |
1027 ack_frame.missing_packets.insert(1); | 1026 ack_frame.missing_packets.insert(1); |
1028 ack_frame.missing_packets.insert(2); | 1027 ack_frame.missing_packets.insert(2); |
1029 ExpectUpdatedRtt(3); | 1028 ExpectUpdatedRtt(3); |
1030 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 1029 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
1031 VerifyUnackedPackets(NULL, 0); | 1030 VerifyUnackedPackets(nullptr, 0); |
1032 VerifyRetransmittablePackets(NULL, 0); | 1031 VerifyRetransmittablePackets(nullptr, 0); |
1033 } | 1032 } |
1034 | 1033 |
1035 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { | 1034 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { |
1036 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); | 1035 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); |
1037 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1036 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
1038 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); | 1037 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); |
1039 EXPECT_EQ(min_rtt, | 1038 EXPECT_EQ(min_rtt, |
1040 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); | 1039 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
1041 EXPECT_EQ(min_rtt, | 1040 EXPECT_EQ(min_rtt, |
1042 QuicSentPacketManagerPeer::GetRttStats( | 1041 QuicSentPacketManagerPeer::GetRttStats( |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 .WillOnce(Return(100 * kDefaultTCPMSS)); | 1381 .WillOnce(Return(100 * kDefaultTCPMSS)); |
1383 manager_.SetFromConfig(config); | 1382 manager_.SetFromConfig(config); |
1384 | 1383 |
1385 EXPECT_EQ(initial_rtt_us, | 1384 EXPECT_EQ(initial_rtt_us, |
1386 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); | 1385 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); |
1387 } | 1386 } |
1388 | 1387 |
1389 } // namespace | 1388 } // namespace |
1390 } // namespace test | 1389 } // namespace test |
1391 } // namespace net | 1390 } // namespace net |
OLD | NEW |