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_config_peer.h" | 8 #include "net/quic/test_tools/quic_config_peer.h" |
9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
10 #include "net/quic/test_tools/quic_test_utils.h" | 10 #include "net/quic/test_tools/quic_test_utils.h" |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 } | 184 } |
185 | 185 |
186 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { | 186 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { |
187 EXPECT_CALL(*send_algorithm_, | 187 EXPECT_CALL(*send_algorithm_, |
188 OnPacketSent(_, BytesInFlight(), sequence_number, | 188 OnPacketSent(_, BytesInFlight(), sequence_number, |
189 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 189 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
190 .Times(1).WillOnce(Return(true)); | 190 .Times(1).WillOnce(Return(true)); |
191 SerializedPacket packet(CreateDataPacket(sequence_number)); | 191 SerializedPacket packet(CreateDataPacket(sequence_number)); |
192 packet.retransmittable_frames->AddStreamFrame( | 192 packet.retransmittable_frames->AddStreamFrame( |
193 new QuicStreamFrame(1, false, 0, IOVector())); | 193 new QuicStreamFrame(1, false, 0, IOVector())); |
| 194 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE); |
194 manager_.OnSerializedPacket(packet); | 195 manager_.OnSerializedPacket(packet); |
195 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), | 196 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), |
196 packet.packet->length(), NOT_RETRANSMISSION, | 197 packet.packet->length(), NOT_RETRANSMISSION, |
197 HAS_RETRANSMITTABLE_DATA); | 198 HAS_RETRANSMITTABLE_DATA); |
198 } | 199 } |
199 | 200 |
200 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { | 201 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { |
201 EXPECT_CALL(*send_algorithm_, | 202 EXPECT_CALL(*send_algorithm_, |
202 OnPacketSent(_, BytesInFlight(), sequence_number, | 203 OnPacketSent(_, BytesInFlight(), sequence_number, |
203 kDefaultLength, NO_RETRANSMITTABLE_DATA)) | 204 kDefaultLength, NO_RETRANSMITTABLE_DATA)) |
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 // Now retransmit all the unacked packets, which occurs when there is a | 975 // Now retransmit all the unacked packets, which occurs when there is a |
975 // version negotiation. | 976 // version negotiation. |
976 manager_.RetransmitUnackedPackets(ALL_PACKETS); | 977 manager_.RetransmitUnackedPackets(ALL_PACKETS); |
977 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 978 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
978 VerifyUnackedPackets(unacked, arraysize(unacked)); | 979 VerifyUnackedPackets(unacked, arraysize(unacked)); |
979 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 980 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
980 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 981 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
981 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 982 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
982 } | 983 } |
983 | 984 |
| 985 TEST_F(QuicSentPacketManagerTest, |
| 986 CryptoHandshakeRetransmissionThenNeuterAndAck) { |
| 987 // Send 1 crypto packet. |
| 988 SendCryptoPacket(1); |
| 989 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 990 |
| 991 // Retransmit the crypto packet as 2. |
| 992 manager_.OnRetransmissionTimeout(); |
| 993 RetransmitNextPacket(2); |
| 994 |
| 995 // Retransmit the crypto packet as 3. |
| 996 manager_.OnRetransmissionTimeout(); |
| 997 RetransmitNextPacket(3); |
| 998 |
| 999 // Now neuter all unacked unencrypted packets, which occurs when the |
| 1000 // connection goes forward secure. |
| 1001 manager_.NeuterUnencryptedPackets(); |
| 1002 QuicPacketSequenceNumber unacked[] = { 1, 2, 3}; |
| 1003 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 1004 VerifyRetransmittablePackets(NULL, 0); |
| 1005 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1006 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1007 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 1008 |
| 1009 // Ensure both packets get discarded when packet 2 is acked. |
| 1010 ReceivedPacketInfo received_info; |
| 1011 received_info.largest_observed = 3; |
| 1012 received_info.missing_packets.insert(1); |
| 1013 received_info.missing_packets.insert(2); |
| 1014 ExpectUpdatedRtt(3); |
| 1015 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 1016 VerifyUnackedPackets(NULL, 0); |
| 1017 VerifyRetransmittablePackets(NULL, 0); |
| 1018 } |
| 1019 |
984 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { | 1020 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { |
985 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 1021 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
986 // Serialize two data packets and send the latter. | 1022 // Serialize two data packets and send the latter. |
987 SerializedPacket packet(CreateDataPacket(1)); | 1023 SerializedPacket packet(CreateDataPacket(1)); |
988 manager_.OnSerializedPacket(packet); | 1024 manager_.OnSerializedPacket(packet); |
989 SendDataPacket(2); | 1025 SendDataPacket(2); |
990 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1026 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
991 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1027 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
992 | 1028 |
993 // Retransmit 1 unacked packets, but not the first serialized packet. | 1029 // Retransmit 1 unacked packets, but not the first serialized packet. |
994 manager_.OnRetransmissionTimeout(); | 1030 manager_.OnRetransmissionTimeout(); |
995 RetransmitNextPacket(3); | 1031 RetransmitNextPacket(3); |
996 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1032 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
997 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1033 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
998 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1034 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
999 } | 1035 } |
1000 | 1036 |
| 1037 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { |
| 1038 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); |
| 1039 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
| 1040 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); |
| 1041 EXPECT_EQ(min_rtt, |
| 1042 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
| 1043 EXPECT_EQ(min_rtt, |
| 1044 QuicSentPacketManagerPeer::GetRttStats( |
| 1045 &manager_)->recent_min_rtt()); |
| 1046 |
| 1047 // Send two packets with no prior bytes in flight. |
| 1048 SendDataPacket(1); |
| 1049 SendDataPacket(2); |
| 1050 |
| 1051 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100)); |
| 1052 // Ack two packets with 100ms RTT observations. |
| 1053 ReceivedPacketInfo received_info; |
| 1054 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 1055 received_info.largest_observed = 1; |
| 1056 ExpectAck(1); |
| 1057 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 1058 |
| 1059 // First ack does not change recent min rtt. |
| 1060 EXPECT_EQ(min_rtt, |
| 1061 QuicSentPacketManagerPeer::GetRttStats( |
| 1062 &manager_)->recent_min_rtt()); |
| 1063 |
| 1064 received_info.largest_observed = 2; |
| 1065 ExpectAck(2); |
| 1066 manager_.OnIncomingAck(received_info, clock_.Now()); |
| 1067 |
| 1068 EXPECT_EQ(min_rtt, |
| 1069 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
| 1070 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), |
| 1071 QuicSentPacketManagerPeer::GetRttStats( |
| 1072 &manager_)->recent_min_rtt()); |
| 1073 } |
| 1074 |
1001 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { | 1075 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
1002 // Send 100 packets and then ensure all are abandoned when the RTO fires. | 1076 // Send 100 packets and then ensure all are abandoned when the RTO fires. |
1003 const size_t kNumSentPackets = 100; | 1077 const size_t kNumSentPackets = 100; |
1004 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 1078 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
1005 SendDataPacket(i); | 1079 SendDataPacket(i); |
1006 } | 1080 } |
1007 | 1081 |
1008 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1082 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
1009 manager_.OnRetransmissionTimeout(); | 1083 manager_.OnRetransmissionTimeout(); |
1010 } | 1084 } |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1193 | 1267 |
1194 EXPECT_EQ(kTime, | 1268 EXPECT_EQ(kTime, |
1195 QuicSentPacketManagerPeer::GetLossAlgorithm( | 1269 QuicSentPacketManagerPeer::GetLossAlgorithm( |
1196 &manager_)->GetLossDetectionType()); | 1270 &manager_)->GetLossDetectionType()); |
1197 } | 1271 } |
1198 | 1272 |
1199 | 1273 |
1200 } // namespace | 1274 } // namespace |
1201 } // namespace test | 1275 } // namespace test |
1202 } // namespace net | 1276 } // namespace net |
OLD | NEW |