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 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 VerifyUnackedPackets(unacked, arraysize(unacked)); | 600 VerifyUnackedPackets(unacked, arraysize(unacked)); |
601 QuicPacketSequenceNumber retransmittable[] = { 5 }; | 601 QuicPacketSequenceNumber retransmittable[] = { 5 }; |
602 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 602 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
603 } | 603 } |
604 | 604 |
605 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 605 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
606 SendDataPacket(1); | 606 SendDataPacket(1); |
607 RetransmitAndSendPacket(1, 2); | 607 RetransmitAndSendPacket(1, 2); |
608 RetransmitAndSendPacket(2, 3); | 608 RetransmitAndSendPacket(2, 3); |
609 RetransmitAndSendPacket(3, 4); | 609 RetransmitAndSendPacket(3, 4); |
610 manager_.OnSerializedPacket(CreateDataPacket(5)); | 610 SendDataPacket(5); |
611 manager_.OnSerializedPacket(CreateDataPacket(6)); | 611 SendDataPacket(6); |
612 manager_.OnSerializedPacket(CreateDataPacket(7)); | 612 SendDataPacket(7); |
613 manager_.OnSerializedPacket(CreateDataPacket(8)); | 613 SendDataPacket(8); |
614 manager_.OnSerializedPacket(CreateDataPacket(9)); | 614 SendDataPacket(9); |
615 | 615 |
616 // Ack previous transmission | 616 // Ack previous transmission |
617 { | 617 { |
618 QuicAckFrame ack_frame; | 618 QuicAckFrame ack_frame; |
619 ack_frame.largest_observed = 2; | 619 ack_frame.largest_observed = 2; |
620 ack_frame.missing_packets.insert(1); | 620 ack_frame.missing_packets.insert(1); |
621 ExpectAck(2); | 621 ExpectAck(2); |
622 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 622 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
623 EXPECT_TRUE(manager_.IsUnacked(4)); | 623 EXPECT_TRUE(manager_.IsUnacked(4)); |
624 } | 624 } |
625 | 625 |
626 // Truncated ack with 4 NACKs | 626 // Truncated ack with 4 NACKs |
627 { | 627 { |
628 QuicAckFrame ack_frame; | 628 QuicAckFrame ack_frame; |
629 ack_frame.largest_observed = 6; | 629 ack_frame.largest_observed = 6; |
630 ack_frame.missing_packets.insert(3); | 630 ack_frame.missing_packets.insert(3); |
631 ack_frame.missing_packets.insert(4); | 631 ack_frame.missing_packets.insert(4); |
632 ack_frame.missing_packets.insert(5); | 632 ack_frame.missing_packets.insert(5); |
633 ack_frame.missing_packets.insert(6); | 633 ack_frame.missing_packets.insert(6); |
634 ack_frame.is_truncated = true; | 634 ack_frame.is_truncated = true; |
635 ExpectAckAndLoss(false, 1, 3); | 635 ExpectAckAndLoss(true, 1, 3); |
636 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 636 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
637 } | 637 } |
638 | 638 |
639 // High water mark will be raised. | 639 // High water mark will be raised. |
640 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; | 640 QuicPacketSequenceNumber unacked[] = { 4, 5, 6, 7, 8, 9 }; |
641 VerifyUnackedPackets(unacked, arraysize(unacked)); | 641 VerifyUnackedPackets(unacked, arraysize(unacked)); |
642 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 642 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
643 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 643 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
644 } | 644 } |
645 | 645 |
(...skipping 11 matching lines...) Expand all Loading... |
657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { | 657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { |
658 SerializedPacket serialized_packet(CreateFecPacket(1)); | 658 SerializedPacket serialized_packet(CreateFecPacket(1)); |
659 | 659 |
660 manager_.OnSerializedPacket(serialized_packet); | 660 manager_.OnSerializedPacket(serialized_packet); |
661 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 661 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
662 } | 662 } |
663 | 663 |
664 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { | 664 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { |
665 VerifyUnackedPackets(NULL, 0); | 665 VerifyUnackedPackets(NULL, 0); |
666 | 666 |
667 SerializedPacket serialized_packet(CreateFecPacket(1)); | 667 SendFecPacket(1); |
668 manager_.OnSerializedPacket(serialized_packet); | |
669 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 668 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
670 | 669 |
671 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 670 SendFecPacket(2); |
672 manager_.OnSerializedPacket(serialized_packet2); | |
673 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 671 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
674 | 672 |
675 SerializedPacket serialized_packet3(CreateFecPacket(3)); | 673 SendFecPacket(3); |
676 manager_.OnSerializedPacket(serialized_packet3); | |
677 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 674 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
678 | 675 |
679 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; | 676 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
680 VerifyUnackedPackets(unacked, arraysize(unacked)); | 677 VerifyUnackedPackets(unacked, arraysize(unacked)); |
681 VerifyRetransmittablePackets(NULL, 0); | 678 VerifyRetransmittablePackets(NULL, 0); |
682 | 679 |
683 // Ack 2, which has never been sent, so there's no rtt update. | 680 // Ack 2, so there's an rtt update. |
| 681 ExpectAck(2); |
684 QuicAckFrame ack_frame; | 682 QuicAckFrame ack_frame; |
685 ack_frame.largest_observed = 2; | 683 ack_frame.largest_observed = 2; |
| 684 ack_frame.missing_packets.insert(1); |
686 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 685 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
687 | 686 |
688 EXPECT_EQ(3u, manager_.GetLeastUnacked()); | 687 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
689 } | 688 } |
690 | 689 |
691 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 690 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
692 VerifyUnackedPackets(NULL, 0); | 691 VerifyUnackedPackets(NULL, 0); |
693 | 692 |
694 SerializedPacket serialized_packet(CreateFecPacket(1)); | 693 SerializedPacket serialized_packet(CreateFecPacket(1)); |
695 manager_.OnSerializedPacket(serialized_packet); | 694 manager_.OnSerializedPacket(serialized_packet); |
696 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)) | 695 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)) |
697 .Times(1).WillOnce(Return(true)); | 696 .Times(1).WillOnce(Return(true)); |
698 manager_.OnPacketSent(1, QuicTime::Zero(), kDefaultLength, NOT_RETRANSMISSION, | 697 manager_.OnPacketSent(1, QuicTime::Zero(), kDefaultLength, NOT_RETRANSMISSION, |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
968 | 967 |
969 // The first retransmission timeout retransmits 2 crypto packets. | 968 // The first retransmission timeout retransmits 2 crypto packets. |
970 manager_.OnRetransmissionTimeout(); | 969 manager_.OnRetransmissionTimeout(); |
971 RetransmitNextPacket(6); | 970 RetransmitNextPacket(6); |
972 RetransmitNextPacket(7); | 971 RetransmitNextPacket(7); |
973 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 972 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
974 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 973 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
975 | 974 |
976 // Now act like a version negotiation packet arrived, which would cause all | 975 // Now act like a version negotiation packet arrived, which would cause all |
977 // unacked packets to be retransmitted. | 976 // unacked packets to be retransmitted. |
978 manager_.RetransmitUnackedPackets(ALL_PACKETS); | 977 manager_.RetransmitUnackedPackets(ALL_UNACKED_RETRANSMISSION); |
979 | 978 |
980 // Ensure the first two pending packets are the crypto retransmits. | 979 // Ensure the first two pending packets are the crypto retransmits. |
981 ASSERT_TRUE(manager_.HasPendingRetransmissions()); | 980 ASSERT_TRUE(manager_.HasPendingRetransmissions()); |
982 EXPECT_EQ(6u, manager_.NextPendingRetransmission().sequence_number); | 981 EXPECT_EQ(6u, manager_.NextPendingRetransmission().sequence_number); |
983 RetransmitNextPacket(8); | 982 RetransmitNextPacket(8); |
984 EXPECT_EQ(7u, manager_.NextPendingRetransmission().sequence_number); | 983 EXPECT_EQ(7u, manager_.NextPendingRetransmission().sequence_number); |
985 RetransmitNextPacket(9); | 984 RetransmitNextPacket(9); |
986 | 985 |
987 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 986 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 987 // Send 3 more data packets and ensure the least unacked is raised. |
| 988 RetransmitNextPacket(10); |
| 989 RetransmitNextPacket(11); |
| 990 RetransmitNextPacket(12); |
| 991 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 992 |
| 993 EXPECT_EQ(8u, manager_.GetLeastUnacked()); |
988 } | 994 } |
989 | 995 |
990 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) { | 996 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeSpuriousRetransmission) { |
991 // Send 1 crypto packet. | 997 // Send 1 crypto packet. |
992 SendCryptoPacket(1); | 998 SendCryptoPacket(1); |
993 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 999 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
994 | 1000 |
995 // Retransmit the crypto packet as 2. | 1001 // Retransmit the crypto packet as 2. |
996 manager_.OnRetransmissionTimeout(); | 1002 manager_.OnRetransmissionTimeout(); |
997 RetransmitNextPacket(2); | 1003 RetransmitNextPacket(2); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1036 // Send 1 crypto packet. | 1042 // Send 1 crypto packet. |
1037 SendCryptoPacket(1); | 1043 SendCryptoPacket(1); |
1038 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1044 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
1039 | 1045 |
1040 // Retransmit the crypto packet as 2. | 1046 // Retransmit the crypto packet as 2. |
1041 manager_.OnRetransmissionTimeout(); | 1047 manager_.OnRetransmissionTimeout(); |
1042 RetransmitNextPacket(2); | 1048 RetransmitNextPacket(2); |
1043 | 1049 |
1044 // Now retransmit all the unacked packets, which occurs when there is a | 1050 // Now retransmit all the unacked packets, which occurs when there is a |
1045 // version negotiation. | 1051 // version negotiation. |
1046 manager_.RetransmitUnackedPackets(ALL_PACKETS); | 1052 manager_.RetransmitUnackedPackets(ALL_UNACKED_RETRANSMISSION); |
1047 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 1053 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
1048 VerifyUnackedPackets(unacked, arraysize(unacked)); | 1054 VerifyUnackedPackets(unacked, arraysize(unacked)); |
1049 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1055 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
1050 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1056 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
1051 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1057 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
1052 } | 1058 } |
1053 | 1059 |
1054 TEST_F(QuicSentPacketManagerTest, | 1060 TEST_F(QuicSentPacketManagerTest, |
1055 CryptoHandshakeRetransmissionThenNeuterAndAck) { | 1061 CryptoHandshakeRetransmissionThenNeuterAndAck) { |
1056 // Send 1 crypto packet. | 1062 // Send 1 crypto packet. |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1442 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
1437 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)); | 1443 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)); |
1438 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 1444 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
1439 .WillOnce(Return(100 * kDefaultTCPMSS)); | 1445 .WillOnce(Return(100 * kDefaultTCPMSS)); |
1440 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1446 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
1441 manager_.SetFromConfig(config); | 1447 manager_.SetFromConfig(config); |
1442 | 1448 |
1443 EXPECT_TRUE(manager_.using_pacing()); | 1449 EXPECT_TRUE(manager_.using_pacing()); |
1444 } | 1450 } |
1445 | 1451 |
| 1452 TEST_F(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { |
| 1453 uint32 initial_rtt_us = 325000; |
| 1454 EXPECT_NE(initial_rtt_us, |
| 1455 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); |
| 1456 |
| 1457 QuicConfig config; |
| 1458 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); |
| 1459 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1460 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)); |
| 1461 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 1462 .WillOnce(Return(100 * kDefaultTCPMSS)); |
| 1463 manager_.SetFromConfig(config); |
| 1464 |
| 1465 EXPECT_EQ(initial_rtt_us, |
| 1466 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); |
| 1467 } |
| 1468 |
1446 } // namespace | 1469 } // namespace |
1447 } // namespace test | 1470 } // namespace test |
1448 } // namespace net | 1471 } // namespace net |
OLD | NEW |