| 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 return; | 46 return; |
| 47 } | 47 } |
| 48 | 48 |
| 49 EXPECT_TRUE(manager_.HasUnackedPackets()); | 49 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 50 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); | 50 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); |
| 51 for (size_t i = 0; i < num_packets; ++i) { | 51 for (size_t i = 0; i < num_packets; ++i) { |
| 52 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; | 52 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 | 55 |
| 56 void VerifyPendingPackets(QuicPacketSequenceNumber* packets, | |
| 57 size_t num_packets) { | |
| 58 const SequenceNumberSet& pending_packets = | |
| 59 QuicSentPacketManagerPeer::GetPendingPackets(&manager_); | |
| 60 if (num_packets == 0) { | |
| 61 EXPECT_TRUE(pending_packets.empty()); | |
| 62 return; | |
| 63 } | |
| 64 | |
| 65 EXPECT_EQ(num_packets, pending_packets.size()); | |
| 66 for (size_t i = 0; i < num_packets; ++i) { | |
| 67 EXPECT_TRUE(ContainsKey(pending_packets, packets[i])) << packets[i]; | |
| 68 } | |
| 69 } | |
| 70 | |
| 71 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, | 56 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, |
| 72 size_t num_packets) { | 57 size_t num_packets) { |
| 73 SequenceNumberSet unacked = manager_.GetUnackedPackets(); | 58 SequenceNumberSet unacked = manager_.GetUnackedPackets(); |
| 74 for (size_t i = 0; i < num_packets; ++i) { | 59 for (size_t i = 0; i < num_packets; ++i) { |
| 75 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; | 60 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; |
| 76 } | 61 } |
| 77 size_t num_retransmittable = 0; | 62 size_t num_retransmittable = 0; |
| 78 for (SequenceNumberSet::const_iterator it = unacked.begin(); | 63 for (SequenceNumberSet::const_iterator it = unacked.begin(); |
| 79 it != unacked.end(); ++it) { | 64 it != unacked.end(); ++it) { |
| 80 if (manager_.HasRetransmittableFrames(*it)) { | 65 if (manager_.HasRetransmittableFrames(*it)) { |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 | 245 |
| 261 // Ack 1 but not 2. | 246 // Ack 1 but not 2. |
| 262 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); | 247 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); |
| 263 ReceivedPacketInfo received_info; | 248 ReceivedPacketInfo received_info; |
| 264 received_info.largest_observed = 1; | 249 received_info.largest_observed = 1; |
| 265 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 250 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); |
| 266 | 251 |
| 267 // 2 remains unacked, but no packets have retransmittable data. | 252 // 2 remains unacked, but no packets have retransmittable data. |
| 268 QuicPacketSequenceNumber unacked[] = { 2 }; | 253 QuicPacketSequenceNumber unacked[] = { 2 }; |
| 269 VerifyUnackedPackets(unacked, arraysize(unacked)); | 254 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 270 VerifyPendingPackets(NULL, 0); | 255 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 271 VerifyRetransmittablePackets(NULL, 0); | 256 VerifyRetransmittablePackets(NULL, 0); |
| 272 | 257 |
| 273 // Verify that the retransmission alarm would not fire, | 258 // Verify that the retransmission alarm would not fire, |
| 274 // since there is no retransmittable data outstanding. | 259 // since there is no retransmittable data outstanding. |
| 275 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 260 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 276 } | 261 } |
| 277 | 262 |
| 278 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { | 263 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { |
| 279 SendDataPacket(1); | 264 SendDataPacket(1); |
| 280 RetransmitPacket(1, 2); | 265 RetransmitPacket(1, 2); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 303 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 288 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); |
| 304 | 289 |
| 305 received_info.largest_observed = 5; | 290 received_info.largest_observed = 5; |
| 306 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _, _)); | 291 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _, _)); |
| 307 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); | 292 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); |
| 308 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); | 293 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); |
| 309 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 294 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); |
| 310 | 295 |
| 311 // No packets remain unacked. | 296 // No packets remain unacked. |
| 312 VerifyUnackedPackets(NULL, 0); | 297 VerifyUnackedPackets(NULL, 0); |
| 313 VerifyPendingPackets(NULL, 0); | 298 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 314 VerifyRetransmittablePackets(NULL, 0); | 299 VerifyRetransmittablePackets(NULL, 0); |
| 315 | 300 |
| 316 // Verify that the retransmission alarm would not fire, | 301 // Verify that the retransmission alarm would not fire, |
| 317 // since there is no retransmittable data outstanding. | 302 // since there is no retransmittable data outstanding. |
| 318 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 303 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 319 } | 304 } |
| 320 | 305 |
| 321 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { | 306 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { |
| 322 SendDataPacket(1); | 307 SendDataPacket(1); |
| 323 RetransmitAndSendPacket(1, 2); | 308 RetransmitAndSendPacket(1, 2); |
| 324 | 309 |
| 325 // Fire the RTO, which will mark 2 for retransmission (but will not send it). | 310 // Fire the RTO, which will mark 2 for retransmission (but will not send it). |
| 326 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 311 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 327 manager_.OnRetransmissionTimeout(); | 312 manager_.OnRetransmissionTimeout(); |
| 328 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 313 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 329 | 314 |
| 330 // Ack 1 but not 2, before 2 is able to be sent. | 315 // Ack 1 but not 2, before 2 is able to be sent. |
| 331 // Since 1 has been retransmitted, it has already been lost, and so the | 316 // Since 1 has been retransmitted, it has already been lost, and so the |
| 332 // send algorithm is not informed that it has been ACK'd. | 317 // send algorithm is not informed that it has been ACK'd. |
| 333 ReceivedPacketInfo received_info; | 318 ReceivedPacketInfo received_info; |
| 334 received_info.largest_observed = 1; | 319 received_info.largest_observed = 1; |
| 335 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); | 320 EXPECT_TRUE(manager_.OnIncomingAck(received_info, QuicTime::Zero())); |
| 336 | 321 |
| 337 // Since 2 was marked for retransmit, when 1 is acked, 2 is discarded. | 322 // Since 2 was marked for retransmit, when 1 is acked, 2 is discarded. |
| 338 VerifyUnackedPackets(NULL, 0); | 323 VerifyUnackedPackets(NULL, 0); |
| 339 VerifyPendingPackets(NULL, 0); | 324 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 340 VerifyRetransmittablePackets(NULL, 0); | 325 VerifyRetransmittablePackets(NULL, 0); |
| 341 | 326 |
| 342 // Verify that the retransmission alarm would not fire, | 327 // Verify that the retransmission alarm would not fire, |
| 343 // since there is no retransmittable data outstanding. | 328 // since there is no retransmittable data outstanding. |
| 344 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 329 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 345 } | 330 } |
| 346 | 331 |
| 347 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { | 332 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
| 348 SendDataPacket(1); | 333 SendDataPacket(1); |
| 349 RetransmitPacket(1, 2); | 334 RetransmitPacket(1, 2); |
| 350 RetransmitPacket(2, 3); | 335 RetransmitPacket(2, 3); |
| 351 | 336 |
| 352 // Ack 1 but not 2 or 3. | 337 // Ack 1 but not 2 or 3. |
| 353 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); | 338 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _, _)); |
| 354 ReceivedPacketInfo received_info; | 339 ReceivedPacketInfo received_info; |
| 355 received_info.largest_observed = 1; | 340 received_info.largest_observed = 1; |
| 356 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 341 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 357 | 342 |
| 358 // 3 remains unacked, but no packets have retransmittable data. | 343 // 3 remains unacked, but no packets have retransmittable data. |
| 359 QuicPacketSequenceNumber unacked[] = { 3 }; | 344 QuicPacketSequenceNumber unacked[] = { 3 }; |
| 360 VerifyUnackedPackets(unacked, arraysize(unacked)); | 345 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 361 VerifyPendingPackets(NULL, 0); | 346 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 362 VerifyRetransmittablePackets(NULL, 0); | 347 VerifyRetransmittablePackets(NULL, 0); |
| 363 | 348 |
| 364 // Verify that the retransmission alarm would not fire to abandon packet 3. | 349 // Verify that the retransmission alarm would not fire to abandon packet 3. |
| 365 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 350 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 366 } | 351 } |
| 367 | 352 |
| 368 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { | 353 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
| 369 SerializedPacket serialized_packet(CreateDataPacket(1)); | 354 SerializedPacket serialized_packet(CreateDataPacket(1)); |
| 370 | 355 |
| 371 manager_.OnSerializedPacket(serialized_packet); | 356 manager_.OnSerializedPacket(serialized_packet); |
| (...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1027 received_info.largest_observed = 9; | 1012 received_info.largest_observed = 9; |
| 1028 received_info.missing_packets.insert(1); | 1013 received_info.missing_packets.insert(1); |
| 1029 received_info.missing_packets.insert(2); | 1014 received_info.missing_packets.insert(2); |
| 1030 received_info.missing_packets.insert(6); | 1015 received_info.missing_packets.insert(6); |
| 1031 received_info.missing_packets.insert(7); | 1016 received_info.missing_packets.insert(7); |
| 1032 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 1017 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 1033 | 1018 |
| 1034 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1019 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1035 } | 1020 } |
| 1036 | 1021 |
| 1022 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { |
| 1023 // Send 2 crypto packets and serialize 1 data packet. |
| 1024 const size_t kNumSentCryptoPackets = 2; |
| 1025 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { |
| 1026 SendCryptoPacket(i); |
| 1027 } |
| 1028 SerializedPacket packet(CreateDataPacket(3)); |
| 1029 manager_.OnSerializedPacket(packet); |
| 1030 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1031 |
| 1032 // Retransmit 2 crypto packets, but not the serialized packet. |
| 1033 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(2); |
| 1034 manager_.OnRetransmissionTimeout(); |
| 1035 RetransmitNextPacket(6); |
| 1036 RetransmitNextPacket(7); |
| 1037 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1038 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1039 } |
| 1040 |
| 1041 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { |
| 1042 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 1043 // Serialize two data packets and send the latter. |
| 1044 SerializedPacket packet(CreateDataPacket(1)); |
| 1045 manager_.OnSerializedPacket(packet); |
| 1046 SendDataPacket(2); |
| 1047 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1048 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 1049 |
| 1050 // Retransmit 1 unacked packets, but not the first serialized packet. |
| 1051 manager_.OnRetransmissionTimeout(); |
| 1052 RetransmitNextPacket(3); |
| 1053 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1054 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1055 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 1056 } |
| 1057 |
| 1037 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { | 1058 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
| 1038 // Send 100 packets and then ensure all are abandoned when the RTO fires. | 1059 // Send 100 packets and then ensure all are abandoned when the RTO fires. |
| 1039 const size_t kNumSentPackets = 100; | 1060 const size_t kNumSentPackets = 100; |
| 1040 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 1061 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 1041 SendDataPacket(i); | 1062 SendDataPacket(i); |
| 1042 } | 1063 } |
| 1043 | 1064 |
| 1044 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1065 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1045 manager_.OnRetransmissionTimeout(); | 1066 manager_.OnRetransmissionTimeout(); |
| 1046 } | 1067 } |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1165 delay = delay.Add(delay); | 1186 delay = delay.Add(delay); |
| 1166 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1187 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1167 manager_.OnRetransmissionTimeout(); | 1188 manager_.OnRetransmissionTimeout(); |
| 1168 RetransmitNextPacket(i + 2); | 1189 RetransmitNextPacket(i + 2); |
| 1169 } | 1190 } |
| 1170 } | 1191 } |
| 1171 | 1192 |
| 1172 } // namespace | 1193 } // namespace |
| 1173 } // namespace test | 1194 } // namespace test |
| 1174 } // namespace net | 1195 } // namespace net |
| OLD | NEW |