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; |
| 11 using std::vector; |
11 | 12 |
12 namespace net { | 13 namespace net { |
13 namespace test { | 14 namespace test { |
14 namespace { | 15 namespace { |
15 | 16 |
16 // Default packet length. | 17 // Default packet length. |
17 const uint32 kDefaultAckLength = 50; | 18 const uint32 kDefaultAckLength = 50; |
18 const uint32 kDefaultLength = 1000; | 19 const uint32 kDefaultLength = 1000; |
19 | 20 |
20 class QuicUnackedPacketMapTest : public ::testing::Test { | 21 class QuicUnackedPacketMapTest : public ::testing::Test { |
21 protected: | 22 protected: |
22 QuicUnackedPacketMapTest() | 23 QuicUnackedPacketMapTest() |
23 : now_(QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(1000))) { | 24 : now_(QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(1000))) { |
24 } | 25 } |
25 | 26 |
| 27 ~QuicUnackedPacketMapTest() override { |
| 28 STLDeleteElements(&packets_); |
| 29 } |
| 30 |
26 SerializedPacket CreateRetransmittablePacket( | 31 SerializedPacket CreateRetransmittablePacket( |
27 QuicPacketSequenceNumber sequence_number) { | 32 QuicPacketSequenceNumber sequence_number) { |
| 33 packets_.push_back(QuicPacket::NewDataPacket( |
| 34 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, |
| 35 PACKET_1BYTE_SEQUENCE_NUMBER)); |
28 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, | 36 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, |
29 nullptr, 0, new RetransmittableFrames()); | 37 packets_.back(), 0, new RetransmittableFrames()); |
30 } | 38 } |
31 | 39 |
32 SerializedPacket CreateNonRetransmittablePacket( | 40 SerializedPacket CreateNonRetransmittablePacket( |
33 QuicPacketSequenceNumber sequence_number) { | 41 QuicPacketSequenceNumber sequence_number) { |
| 42 packets_.push_back(QuicPacket::NewDataPacket( |
| 43 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, |
| 44 PACKET_1BYTE_SEQUENCE_NUMBER)); |
34 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, | 45 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, |
35 nullptr, 0, nullptr); | 46 packets_.back(), 0, nullptr); |
36 } | 47 } |
37 | 48 |
38 void VerifyInFlightPackets(QuicPacketSequenceNumber* packets, | 49 void VerifyInFlightPackets(QuicPacketSequenceNumber* packets, |
39 size_t num_packets) { | 50 size_t num_packets) { |
40 unacked_packets_.RemoveObsoletePackets(); | 51 unacked_packets_.RemoveObsoletePackets(); |
41 if (num_packets == 0) { | 52 if (num_packets == 0) { |
42 EXPECT_FALSE(unacked_packets_.HasInFlightPackets()); | 53 EXPECT_FALSE(unacked_packets_.HasInFlightPackets()); |
43 EXPECT_FALSE(unacked_packets_.HasMultipleInFlightPackets()); | 54 EXPECT_FALSE(unacked_packets_.HasMultipleInFlightPackets()); |
44 return; | 55 return; |
45 } | 56 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 if (it->retransmittable_frames != nullptr) { | 98 if (it->retransmittable_frames != nullptr) { |
88 ++num_retransmittable_packets; | 99 ++num_retransmittable_packets; |
89 } | 100 } |
90 } | 101 } |
91 EXPECT_EQ(num_packets, num_retransmittable_packets); | 102 EXPECT_EQ(num_packets, num_retransmittable_packets); |
92 for (size_t i = 0; i < num_packets; ++i) { | 103 for (size_t i = 0; i < num_packets; ++i) { |
93 EXPECT_TRUE(unacked_packets_.HasRetransmittableFrames(packets[i])) | 104 EXPECT_TRUE(unacked_packets_.HasRetransmittableFrames(packets[i])) |
94 << " packets[" << i << "]:" << packets[i]; | 105 << " packets[" << i << "]:" << packets[i]; |
95 } | 106 } |
96 } | 107 } |
97 | 108 vector<QuicPacket*> packets_; |
98 QuicUnackedPacketMap unacked_packets_; | 109 QuicUnackedPacketMap unacked_packets_; |
99 QuicTime now_; | 110 QuicTime now_; |
100 }; | 111 }; |
101 | 112 |
102 TEST_F(QuicUnackedPacketMapTest, RttOnly) { | 113 TEST_F(QuicUnackedPacketMapTest, RttOnly) { |
103 // Acks are only tracked for RTT measurement purposes. | 114 // Acks are only tracked for RTT measurement purposes. |
104 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(1), 0, | 115 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(1), 0, |
105 NOT_RETRANSMISSION, now_, kDefaultAckLength, | 116 NOT_RETRANSMISSION, now_, kDefaultAckLength, |
106 false); | 117 false); |
107 | 118 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 VerifyInFlightPackets(unacked, arraysize(unacked)); | 189 VerifyInFlightPackets(unacked, arraysize(unacked)); |
179 VerifyRetransmittablePackets(nullptr, 0); | 190 VerifyRetransmittablePackets(nullptr, 0); |
180 | 191 |
181 unacked_packets_.IncreaseLargestObserved(2); | 192 unacked_packets_.IncreaseLargestObserved(2); |
182 VerifyUnackedPackets(unacked, arraysize(unacked)); | 193 VerifyUnackedPackets(unacked, arraysize(unacked)); |
183 VerifyInFlightPackets(unacked, arraysize(unacked)); | 194 VerifyInFlightPackets(unacked, arraysize(unacked)); |
184 VerifyRetransmittablePackets(nullptr, 0); | 195 VerifyRetransmittablePackets(nullptr, 0); |
185 | 196 |
186 unacked_packets_.RemoveFromInFlight(2); | 197 unacked_packets_.RemoveFromInFlight(2); |
187 QuicPacketSequenceNumber unacked2[] = { 1 }; | 198 QuicPacketSequenceNumber unacked2[] = { 1 }; |
188 VerifyUnackedPackets(unacked, arraysize(unacked2)); | 199 VerifyUnackedPackets(unacked2, arraysize(unacked2)); |
189 VerifyInFlightPackets(unacked, arraysize(unacked2)); | 200 VerifyInFlightPackets(unacked2, arraysize(unacked2)); |
190 VerifyRetransmittablePackets(nullptr, 0); | 201 VerifyRetransmittablePackets(nullptr, 0); |
191 | 202 |
192 unacked_packets_.RemoveFromInFlight(1); | 203 unacked_packets_.RemoveFromInFlight(1); |
193 VerifyUnackedPackets(nullptr, 0); | 204 VerifyUnackedPackets(nullptr, 0); |
194 VerifyInFlightPackets(nullptr, 0); | 205 VerifyInFlightPackets(nullptr, 0); |
195 VerifyRetransmittablePackets(nullptr, 0); | 206 VerifyRetransmittablePackets(nullptr, 0); |
196 } | 207 } |
197 | 208 |
198 TEST_F(QuicUnackedPacketMapTest, RetransmitThreeTimes) { | 209 TEST_F(QuicUnackedPacketMapTest, RetransmitThreeTimes) { |
199 // Simulate a retransmittable packet being sent and retransmitted twice. | 210 // Simulate a retransmittable packet being sent and retransmitted twice. |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); | 396 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); |
386 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); | 397 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); |
387 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); | 398 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); |
388 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); | 399 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); |
389 } | 400 } |
390 | 401 |
391 | 402 |
392 } // namespace | 403 } // namespace |
393 } // namespace test | 404 } // namespace test |
394 } // namespace net | 405 } // namespace net |
OLD | NEW |