OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_unacked_packet_map.h" | 5 #include "net/quic/quic_unacked_packet_map.h" |
6 | 6 |
7 #include "net/quic/test_tools/quic_test_utils.h" | 7 #include "net/quic/test_tools/quic_test_utils.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 using std::min; | 10 using std::min; |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 VerifyInFlightPackets(pending5, arraysize(pending5)); | 256 VerifyInFlightPackets(pending5, arraysize(pending5)); |
257 | 257 |
258 // Now test ClearAllPreviousTransmissions, leaving one packet. | 258 // Now test ClearAllPreviousTransmissions, leaving one packet. |
259 unacked_packets_.ClearAllPreviousRetransmissions(); | 259 unacked_packets_.ClearAllPreviousRetransmissions(); |
260 QuicPacketSequenceNumber unacked5[] = { 7 }; | 260 QuicPacketSequenceNumber unacked5[] = { 7 }; |
261 VerifyUnackedPackets(unacked5, arraysize(unacked5)); | 261 VerifyUnackedPackets(unacked5, arraysize(unacked5)); |
262 QuicPacketSequenceNumber retransmittable5[] = { 7 }; | 262 QuicPacketSequenceNumber retransmittable5[] = { 7 }; |
263 VerifyRetransmittablePackets(retransmittable5, arraysize(retransmittable5)); | 263 VerifyRetransmittablePackets(retransmittable5, arraysize(retransmittable5)); |
264 } | 264 } |
265 | 265 |
| 266 TEST_F(QuicUnackedPacketMapTest, RetransmitFourTimes) { |
| 267 // Simulate a retransmittable packet being sent and retransmitted twice. |
| 268 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); |
| 269 unacked_packets_.SetSent(1, now_, kDefaultLength, true); |
| 270 unacked_packets_.AddPacket(CreateRetransmittablePacket(2)); |
| 271 unacked_packets_.SetSent(2, now_, kDefaultLength, true); |
| 272 |
| 273 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 274 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 275 VerifyInFlightPackets(unacked, arraysize(unacked)); |
| 276 QuicPacketSequenceNumber retransmittable[] = { 1, 2 }; |
| 277 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 278 |
| 279 // Early retransmit 1 as 3. |
| 280 unacked_packets_.IncreaseLargestObserved(2); |
| 281 unacked_packets_.RemoveFromInFlight(2); |
| 282 unacked_packets_.RemoveRetransmittability(2); |
| 283 unacked_packets_.RemoveFromInFlight(1); |
| 284 unacked_packets_.OnRetransmittedPacket(1, 3, LOSS_RETRANSMISSION); |
| 285 unacked_packets_.SetSent(3, now_, kDefaultLength, true); |
| 286 |
| 287 QuicPacketSequenceNumber unacked2[] = { 1, 3 }; |
| 288 VerifyUnackedPackets(unacked2, arraysize(unacked2)); |
| 289 QuicPacketSequenceNumber pending2[] = { 3 }; |
| 290 VerifyInFlightPackets(pending2, arraysize(pending2)); |
| 291 QuicPacketSequenceNumber retransmittable2[] = { 3 }; |
| 292 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2)); |
| 293 |
| 294 // TLP 3 (formerly 1) as 4, and don't remove 1 from unacked. |
| 295 unacked_packets_.OnRetransmittedPacket(3, 4, TLP_RETRANSMISSION); |
| 296 unacked_packets_.SetSent(4, now_, kDefaultLength, true); |
| 297 unacked_packets_.AddPacket(CreateRetransmittablePacket(5)); |
| 298 unacked_packets_.SetSent(5, now_, kDefaultLength, true); |
| 299 |
| 300 QuicPacketSequenceNumber unacked3[] = { 1, 3, 4, 5 }; |
| 301 VerifyUnackedPackets(unacked3, arraysize(unacked3)); |
| 302 QuicPacketSequenceNumber pending3[] = { 3, 4, 5 }; |
| 303 VerifyInFlightPackets(pending3, arraysize(pending3)); |
| 304 QuicPacketSequenceNumber retransmittable3[] = { 4, 5 }; |
| 305 VerifyRetransmittablePackets(retransmittable3, arraysize(retransmittable3)); |
| 306 |
| 307 // Early retransmit 4 as 6 and ensure in flight packet 3 is removed. |
| 308 unacked_packets_.IncreaseLargestObserved(5); |
| 309 unacked_packets_.RemoveFromInFlight(5); |
| 310 unacked_packets_.RemoveRetransmittability(5); |
| 311 unacked_packets_.RemoveFromInFlight(3); |
| 312 unacked_packets_.RemoveFromInFlight(4); |
| 313 unacked_packets_.OnRetransmittedPacket(4, 6, LOSS_RETRANSMISSION); |
| 314 unacked_packets_.SetSent(6, now_, kDefaultLength, true); |
| 315 |
| 316 QuicPacketSequenceNumber unacked4[] = { 4, 6 }; |
| 317 VerifyUnackedPackets(unacked4, arraysize(unacked4)); |
| 318 QuicPacketSequenceNumber pending4[] = { 6 }; |
| 319 VerifyInFlightPackets(pending4, arraysize(pending4)); |
| 320 QuicPacketSequenceNumber retransmittable4[] = { 6 }; |
| 321 VerifyRetransmittablePackets(retransmittable4, arraysize(retransmittable4)); |
| 322 } |
| 323 |
266 TEST_F(QuicUnackedPacketMapTest, RestoreInflight) { | 324 TEST_F(QuicUnackedPacketMapTest, RestoreInflight) { |
267 // Simulate a retransmittable packet being sent, retransmitted, and the first | 325 // Simulate a retransmittable packet being sent, retransmitted, and the first |
268 // transmission being acked. | 326 // transmission being acked. |
269 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); | 327 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); |
270 unacked_packets_.SetSent(1, now_, kDefaultLength, true); | 328 unacked_packets_.SetSent(1, now_, kDefaultLength, true); |
271 unacked_packets_.OnRetransmittedPacket(1, 2, RTO_RETRANSMISSION); | 329 unacked_packets_.OnRetransmittedPacket(1, 2, RTO_RETRANSMISSION); |
272 unacked_packets_.RemoveFromInFlight(1); | 330 unacked_packets_.RemoveFromInFlight(1); |
273 unacked_packets_.SetSent(2, now_, kDefaultLength, true); | 331 unacked_packets_.SetSent(2, now_, kDefaultLength, true); |
274 | 332 |
275 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 333 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
(...skipping 27 matching lines...) Expand all Loading... |
303 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); | 361 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); |
304 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); | 362 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); |
305 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); | 363 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); |
306 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); | 364 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); |
307 } | 365 } |
308 | 366 |
309 | 367 |
310 } // namespace | 368 } // namespace |
311 } // namespace test | 369 } // namespace test |
312 } // namespace net | 370 } // namespace net |
OLD | NEW |