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 |