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/test_tools/quic_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 | 184 |
185 manager_.OnSerializedPacket(serialized_packet); | 185 manager_.OnSerializedPacket(serialized_packet); |
186 | 186 |
187 QuicPacketSequenceNumber unacked[] = { 1 }; | 187 QuicPacketSequenceNumber unacked[] = { 1 }; |
188 VerifyUnackedPackets(unacked, arraysize(unacked)); | 188 VerifyUnackedPackets(unacked, arraysize(unacked)); |
189 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 189 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
190 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 190 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
191 } | 191 } |
192 | 192 |
193 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 193 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
194 SerializedPacket serialized_packet(CreateDataPacket(1)); | 194 SendDataPacket(1); |
195 | |
196 manager_.OnSerializedPacket(serialized_packet); | |
197 RetransmitPacket(1, 2); | 195 RetransmitPacket(1, 2); |
198 | 196 |
199 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); | 197 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); |
200 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 198 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
201 VerifyUnackedPackets(unacked, arraysize(unacked)); | 199 VerifyUnackedPackets(unacked, arraysize(unacked)); |
202 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 200 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
203 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 201 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
204 } | 202 } |
205 | 203 |
206 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 204 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
207 SerializedPacket serialized_packet(CreateDataPacket(1)); | 205 SendDataPacket(1); |
208 | 206 RetransmitAndSendPacket(1, 2); |
209 manager_.OnSerializedPacket(serialized_packet); | |
210 RetransmitPacket(1, 2); | |
211 | 207 |
212 // Ack 2 but not 1. | 208 // Ack 2 but not 1. |
213 ReceivedPacketInfo received_info; | 209 ReceivedPacketInfo received_info; |
214 received_info.largest_observed = 2; | 210 received_info.largest_observed = 2; |
215 received_info.missing_packets.insert(1); | 211 received_info.missing_packets.insert(1); |
| 212 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 213 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); |
216 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 214 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
217 | 215 |
218 // No unacked packets remain. | 216 // Packet 1 is unacked, pending, but not retransmittable. |
219 VerifyUnackedPackets(NULL, 0); | 217 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 218 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 219 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
220 VerifyRetransmittablePackets(NULL, 0); | 220 VerifyRetransmittablePackets(NULL, 0); |
221 } | 221 } |
222 | 222 |
223 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 223 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
224 SerializedPacket serialized_packet(CreateDataPacket(1)); | 224 SendDataPacket(1); |
225 | |
226 manager_.OnSerializedPacket(serialized_packet); | |
227 QuicSentPacketManagerPeer::MarkForRetransmission( | 225 QuicSentPacketManagerPeer::MarkForRetransmission( |
228 &manager_, 1, NACK_RETRANSMISSION); | 226 &manager_, 1, NACK_RETRANSMISSION); |
229 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 227 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
230 | 228 |
231 // Ack 1. | 229 // Ack 1. |
232 ReceivedPacketInfo received_info; | 230 ReceivedPacketInfo received_info; |
233 received_info.largest_observed = 1; | 231 received_info.largest_observed = 1; |
| 232 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 233 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); |
234 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 234 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
235 | 235 |
236 // There should no longer be a pending retransmission. | 236 // There should no longer be a pending retransmission. |
237 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 237 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
238 | 238 |
239 // No unacked packets remain. | 239 // No unacked packets remain. |
240 VerifyUnackedPackets(NULL, 0); | 240 VerifyUnackedPackets(NULL, 0); |
241 VerifyRetransmittablePackets(NULL, 0); | 241 VerifyRetransmittablePackets(NULL, 0); |
242 } | 242 } |
243 | 243 |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); | 382 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); |
383 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); | 383 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); |
384 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); | 384 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); |
385 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 385 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
386 | 386 |
387 VerifyUnackedPackets(NULL, 0); | 387 VerifyUnackedPackets(NULL, 0); |
388 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 388 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
389 } | 389 } |
390 | 390 |
391 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { | 391 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
392 SerializedPacket serialized_packet(CreateDataPacket(1)); | 392 SendDataPacket(1); |
| 393 RetransmitAndSendPacket(1, 2); |
| 394 RetransmitAndSendPacket(2, 3); |
| 395 RetransmitAndSendPacket(3, 4); |
| 396 RetransmitAndSendPacket(4, 5); |
393 | 397 |
394 manager_.OnSerializedPacket(serialized_packet); | 398 // Truncated ack with 4 NACKs, so the first packet is lost. |
395 RetransmitPacket(1, 2); | |
396 RetransmitPacket(2, 3); | |
397 RetransmitPacket(3, 4); | |
398 | |
399 // Truncated ack with 2 NACKs | |
400 ReceivedPacketInfo received_info; | 399 ReceivedPacketInfo received_info; |
401 received_info.largest_observed = 2; | 400 received_info.largest_observed = 4; |
402 received_info.missing_packets.insert(1); | 401 received_info.missing_packets.insert(1); |
403 received_info.missing_packets.insert(2); | 402 received_info.missing_packets.insert(2); |
| 403 received_info.missing_packets.insert(3); |
| 404 received_info.missing_packets.insert(4); |
404 received_info.is_truncated = true; | 405 received_info.is_truncated = true; |
| 406 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 407 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
| 408 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
405 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 409 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
406 | 410 |
407 // High water mark will be raised. | 411 // High water mark will be raised. |
408 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 412 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
409 VerifyUnackedPackets(unacked, arraysize(unacked)); | 413 VerifyUnackedPackets(unacked, arraysize(unacked)); |
410 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 414 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
411 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 415 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
412 } | 416 } |
413 | 417 |
414 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 418 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
415 SerializedPacket serialized_packet(CreateDataPacket(1)); | 419 SendDataPacket(1); |
416 | 420 RetransmitAndSendPacket(1, 2); |
417 manager_.OnSerializedPacket(serialized_packet); | 421 RetransmitAndSendPacket(2, 3); |
418 RetransmitPacket(1, 2); | 422 RetransmitAndSendPacket(3, 4); |
419 RetransmitPacket(2, 3); | |
420 RetransmitPacket(3, 4); | |
421 manager_.OnSerializedPacket(CreateDataPacket(5)); | 423 manager_.OnSerializedPacket(CreateDataPacket(5)); |
422 manager_.OnSerializedPacket(CreateDataPacket(6)); | 424 manager_.OnSerializedPacket(CreateDataPacket(6)); |
423 manager_.OnSerializedPacket(CreateDataPacket(7)); | 425 manager_.OnSerializedPacket(CreateDataPacket(7)); |
424 manager_.OnSerializedPacket(CreateDataPacket(8)); | 426 manager_.OnSerializedPacket(CreateDataPacket(8)); |
425 manager_.OnSerializedPacket(CreateDataPacket(9)); | 427 manager_.OnSerializedPacket(CreateDataPacket(9)); |
426 | 428 |
427 // Ack previous transmission | 429 // Ack previous transmission |
428 { | 430 { |
429 ReceivedPacketInfo received_info; | 431 ReceivedPacketInfo received_info; |
430 received_info.largest_observed = 2; | 432 received_info.largest_observed = 2; |
431 received_info.missing_packets.insert(1); | 433 received_info.missing_packets.insert(1); |
| 434 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 435 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
432 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 436 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
433 EXPECT_TRUE(manager_.IsUnacked(4)); | 437 EXPECT_TRUE(manager_.IsUnacked(4)); |
434 } | 438 } |
435 | 439 |
436 // Truncated ack with 4 NACKs | 440 // Truncated ack with 4 NACKs |
437 { | 441 { |
438 ReceivedPacketInfo received_info; | 442 ReceivedPacketInfo received_info; |
439 received_info.largest_observed = 6; | 443 received_info.largest_observed = 6; |
440 received_info.missing_packets.insert(3); | 444 received_info.missing_packets.insert(3); |
441 received_info.missing_packets.insert(4); | 445 received_info.missing_packets.insert(4); |
442 received_info.missing_packets.insert(5); | 446 received_info.missing_packets.insert(5); |
443 received_info.missing_packets.insert(6); | 447 received_info.missing_packets.insert(6); |
444 received_info.is_truncated = true; | 448 received_info.is_truncated = true; |
| 449 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 450 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); |
| 451 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(4, _)); |
445 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 452 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
446 } | 453 } |
447 | 454 |
448 // High water mark will be raised. | 455 // High water mark will be raised. |
449 QuicPacketSequenceNumber unacked[] = { 5, 6, 7, 8, 9 }; | 456 QuicPacketSequenceNumber unacked[] = { 5, 6, 7, 8, 9 }; |
450 VerifyUnackedPackets(unacked, arraysize(unacked)); | 457 VerifyUnackedPackets(unacked, arraysize(unacked)); |
451 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 458 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
452 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 459 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
453 } | 460 } |
454 | 461 |
455 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { | |
456 manager_.OnSerializedPacket(CreateDataPacket(1)); | |
457 manager_.OnSerializedPacket(CreateDataPacket(2)); | |
458 manager_.OnSerializedPacket(CreateDataPacket(3)); | |
459 | |
460 { | |
461 // Ack packets 1 and 3. | |
462 ReceivedPacketInfo received_info; | |
463 received_info.largest_observed = 3; | |
464 received_info.missing_packets.insert(2); | |
465 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
466 | |
467 QuicPacketSequenceNumber unacked[] = { 2 }; | |
468 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
469 QuicPacketSequenceNumber retransmittable[] = { 2 }; | |
470 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
471 } | |
472 | |
473 manager_.OnSerializedPacket(CreateDataPacket(4)); | |
474 manager_.OnSerializedPacket(CreateDataPacket(5)); | |
475 | |
476 { | |
477 // Ack packets 5. | |
478 ReceivedPacketInfo received_info; | |
479 received_info.largest_observed = 5; | |
480 received_info.missing_packets.insert(2); | |
481 received_info.missing_packets.insert(4); | |
482 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
483 | |
484 QuicPacketSequenceNumber unacked[] = { 2, 4 }; | |
485 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
486 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; | |
487 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
488 } | |
489 | |
490 manager_.OnSerializedPacket(CreateDataPacket(6)); | |
491 manager_.OnSerializedPacket(CreateDataPacket(7)); | |
492 | |
493 { | |
494 // Ack packets 7. | |
495 ReceivedPacketInfo received_info; | |
496 received_info.largest_observed = 7; | |
497 received_info.missing_packets.insert(2); | |
498 received_info.missing_packets.insert(4); | |
499 received_info.missing_packets.insert(6); | |
500 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
501 | |
502 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; | |
503 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
504 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; | |
505 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
506 } | |
507 | |
508 RetransmitPacket(2, 8); | |
509 manager_.OnSerializedPacket(CreateDataPacket(9)); | |
510 manager_.OnSerializedPacket(CreateDataPacket(10)); | |
511 | |
512 { | |
513 // Ack packet 10. | |
514 ReceivedPacketInfo received_info; | |
515 received_info.largest_observed = 10; | |
516 received_info.missing_packets.insert(2); | |
517 received_info.missing_packets.insert(4); | |
518 received_info.missing_packets.insert(6); | |
519 received_info.missing_packets.insert(8); | |
520 received_info.missing_packets.insert(9); | |
521 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
522 | |
523 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; | |
524 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
525 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; | |
526 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
527 } | |
528 | |
529 | |
530 RetransmitPacket(4, 11); | |
531 manager_.OnSerializedPacket(CreateDataPacket(12)); | |
532 manager_.OnSerializedPacket(CreateDataPacket(13)); | |
533 | |
534 { | |
535 // Ack packet 13. | |
536 ReceivedPacketInfo received_info; | |
537 received_info.largest_observed = 13; | |
538 received_info.missing_packets.insert(2); | |
539 received_info.missing_packets.insert(4); | |
540 received_info.missing_packets.insert(6); | |
541 received_info.missing_packets.insert(8); | |
542 received_info.missing_packets.insert(9); | |
543 received_info.missing_packets.insert(11); | |
544 received_info.missing_packets.insert(12); | |
545 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
546 | |
547 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; | |
548 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
549 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; | |
550 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
551 } | |
552 | |
553 RetransmitPacket(6, 14); | |
554 manager_.OnSerializedPacket(CreateDataPacket(15)); | |
555 manager_.OnSerializedPacket(CreateDataPacket(16)); | |
556 | |
557 { | |
558 // Ack packet 16. | |
559 ReceivedPacketInfo received_info; | |
560 received_info.largest_observed = 13; | |
561 received_info.missing_packets.insert(2); | |
562 received_info.missing_packets.insert(4); | |
563 received_info.missing_packets.insert(6); | |
564 received_info.missing_packets.insert(8); | |
565 received_info.missing_packets.insert(9); | |
566 received_info.missing_packets.insert(11); | |
567 received_info.missing_packets.insert(12); | |
568 received_info.is_truncated = true; | |
569 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
570 | |
571 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. | |
572 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; | |
573 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
574 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; | |
575 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
576 } | |
577 } | |
578 | |
579 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 462 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
580 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); | 463 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); |
581 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 464 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
582 } | 465 } |
583 | 466 |
584 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { | 467 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { |
585 SerializedPacket serialized_packet(CreateDataPacket(1)); | 468 SerializedPacket serialized_packet(CreateDataPacket(1)); |
586 | 469 |
587 manager_.OnSerializedPacket(serialized_packet); | 470 manager_.OnSerializedPacket(serialized_packet); |
588 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 471 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1282 delay = delay.Add(delay); | 1165 delay = delay.Add(delay); |
1283 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1166 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
1284 manager_.OnRetransmissionTimeout(); | 1167 manager_.OnRetransmissionTimeout(); |
1285 RetransmitNextPacket(i + 2); | 1168 RetransmitNextPacket(i + 2); |
1286 } | 1169 } |
1287 } | 1170 } |
1288 | 1171 |
1289 } // namespace | 1172 } // namespace |
1290 } // namespace test | 1173 } // namespace test |
1291 } // namespace net | 1174 } // namespace net |
OLD | NEW |