| 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 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 861 | 861 |
| 862 // The second tail loss probe retransmits 1 packet. | 862 // The second tail loss probe retransmits 1 packet. |
| 863 manager_.OnRetransmissionTimeout(); | 863 manager_.OnRetransmissionTimeout(); |
| 864 RetransmitNextPacket(102); | 864 RetransmitNextPacket(102); |
| 865 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 865 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 866 | 866 |
| 867 // Advance the time enough to ensure all packets are RTO'd. | 867 // Advance the time enough to ensure all packets are RTO'd. |
| 868 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); | 868 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1000)); |
| 869 | 869 |
| 870 // The final RTO abandons all of them. | 870 // The final RTO abandons all of them. |
| 871 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 871 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 872 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(100))); | |
| 873 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
| 874 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)) | |
| 875 .Times(kNumSentPackets + 2); | |
| 876 manager_.OnRetransmissionTimeout(); | 872 manager_.OnRetransmissionTimeout(); |
| 877 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 873 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 878 } | 874 } |
| 879 | 875 |
| 880 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { | 876 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeout) { |
| 881 // Send 2 crypto packets and 3 data packets. | 877 // Send 2 crypto packets and 3 data packets. |
| 882 const size_t kNumSentCryptoPackets = 2; | 878 const size_t kNumSentCryptoPackets = 2; |
| 883 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { | 879 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { |
| 884 SendCryptoPacket(i); | 880 SendCryptoPacket(i); |
| 885 } | 881 } |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 915 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 920 } | 916 } |
| 921 | 917 |
| 922 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { | 918 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
| 923 // Send 100 packets and then ensure all are abandoned when the RTO fires. | 919 // Send 100 packets and then ensure all are abandoned when the RTO fires. |
| 924 const size_t kNumSentPackets = 100; | 920 const size_t kNumSentPackets = 100; |
| 925 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 921 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 926 SendDataPacket(i); | 922 SendDataPacket(i); |
| 927 } | 923 } |
| 928 | 924 |
| 929 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); | 925 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 930 | |
| 931 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | |
| 932 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); | |
| 933 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
| 934 manager_.OnRetransmissionTimeout(); | 926 manager_.OnRetransmissionTimeout(); |
| 935 } | 927 } |
| 936 | 928 |
| 937 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { | 929 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { |
| 938 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 930 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 939 } | 931 } |
| 940 | 932 |
| 941 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 933 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
| 942 SendCryptoPacket(1); | 934 SendCryptoPacket(1); |
| 943 | 935 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1006 SendDataPacket(1); | 998 SendDataPacket(1); |
| 1007 SendDataPacket(2); | 999 SendDataPacket(2); |
| 1008 | 1000 |
| 1009 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); | 1001 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); |
| 1010 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1002 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 1011 .WillRepeatedly(Return(expected_rto_delay)); | 1003 .WillRepeatedly(Return(expected_rto_delay)); |
| 1012 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); | 1004 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); |
| 1013 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1005 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1014 | 1006 |
| 1015 // Retransmit the packet by invoking the retransmission timeout. | 1007 // Retransmit the packet by invoking the retransmission timeout. |
| 1016 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); | 1008 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1017 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
| 1018 clock_.AdvanceTime(expected_rto_delay); | 1009 clock_.AdvanceTime(expected_rto_delay); |
| 1019 manager_.OnRetransmissionTimeout(); | 1010 manager_.OnRetransmissionTimeout(); |
| 1020 RetransmitNextPacket(3); | 1011 RetransmitNextPacket(3); |
| 1021 RetransmitNextPacket(4); | 1012 RetransmitNextPacket(4); |
| 1022 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1013 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1023 | 1014 |
| 1024 // The delay should double the second time. | 1015 // The delay should double the second time. |
| 1025 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay); | 1016 expected_time = clock_.Now().Add(expected_rto_delay).Add(expected_rto_delay); |
| 1026 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1017 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1027 } | 1018 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1046 SendDataPacket(1); | 1037 SendDataPacket(1); |
| 1047 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); | 1038 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
| 1048 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1039 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 1049 .WillRepeatedly(Return(delay)); | 1040 .WillRepeatedly(Return(delay)); |
| 1050 | 1041 |
| 1051 // Delay should back off exponentially. | 1042 // Delay should back off exponentially. |
| 1052 for (int i = 0; i < 5; ++i) { | 1043 for (int i = 0; i < 5; ++i) { |
| 1053 EXPECT_EQ(delay, | 1044 EXPECT_EQ(delay, |
| 1054 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); | 1045 QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); |
| 1055 delay = delay.Add(delay); | 1046 delay = delay.Add(delay); |
| 1056 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); | 1047 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1057 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
| 1058 manager_.OnRetransmissionTimeout(); | 1048 manager_.OnRetransmissionTimeout(); |
| 1059 RetransmitNextPacket(i + 2); | 1049 RetransmitNextPacket(i + 2); |
| 1060 } | 1050 } |
| 1061 } | 1051 } |
| 1062 | 1052 |
| 1063 } // namespace | 1053 } // namespace |
| 1064 } // namespace test | 1054 } // namespace test |
| 1065 } // namespace net | 1055 } // namespace net |
| OLD | NEW |