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_test_utils.h" | 8 #include "net/quic/test_tools/quic_test_utils.h" |
9 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 MOCK_METHOD2(OnPacketNacked, void(QuicPacketSequenceNumber sequence_number, | 24 MOCK_METHOD2(OnPacketNacked, void(QuicPacketSequenceNumber sequence_number, |
25 size_t nack_count)); | 25 size_t nack_count)); |
26 }; | 26 }; |
27 | 27 |
28 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { | 28 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { |
29 protected: | 29 protected: |
30 QuicSentPacketManagerTest() | 30 QuicSentPacketManagerTest() |
31 : manager_(true, &helper_) { | 31 : manager_(true, &helper_) { |
32 } | 32 } |
33 | 33 |
34 void SetUp() { | |
35 FLAGS_track_retransmission_history = GetParam(); | |
36 } | |
37 | |
38 ~QuicSentPacketManagerTest() { | 34 ~QuicSentPacketManagerTest() { |
39 STLDeleteElements(&packets_); | 35 STLDeleteElements(&packets_); |
40 } | 36 } |
41 | 37 |
42 | 38 |
43 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
44 size_t num_packets) { | 40 size_t num_packets) { |
45 if (num_packets == 0) { | 41 if (num_packets == 0) { |
46 EXPECT_FALSE(manager_.HasUnackedPackets()); | 42 EXPECT_FALSE(manager_.HasUnackedPackets()); |
47 EXPECT_EQ(0u, manager_.GetNumUnackedPackets()); | 43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets()); |
48 EXPECT_TRUE(manager_.GetUnackedPackets().empty()); | 44 EXPECT_TRUE(manager_.GetUnackedPackets().empty()); |
49 return; | 45 return; |
50 } | 46 } |
51 | 47 |
52 EXPECT_TRUE(manager_.HasUnackedPackets()); | 48 EXPECT_TRUE(manager_.HasUnackedPackets()); |
53 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); | 49 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); |
54 for (size_t i = 0; i < num_packets; ++i) { | 50 for (size_t i = 0; i < num_packets; ++i) { |
55 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; | 51 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; |
56 } | 52 } |
57 } | 53 } |
58 | 54 |
59 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, | 55 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, |
60 size_t num_packets) { | 56 size_t num_packets) { |
61 SequenceNumberSet unacked = manager_.GetUnackedPackets(); | 57 SequenceNumberSet unacked = manager_.GetUnackedPackets(); |
62 for (size_t i = 0; i < num_packets; ++i) { | 58 for (size_t i = 0; i < num_packets; ++i) { |
63 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; | 59 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; |
64 } | 60 } |
65 size_t num_retransmittable = 0; | 61 size_t num_retransmittable = 0; |
66 for (SequenceNumberSet::const_iterator it = unacked.begin(); | 62 for (SequenceNumberSet::const_iterator it = unacked.begin(); |
67 it != unacked.end(); ++it) { | 63 it != unacked.end(); ++it) { |
68 if (manager_.HasRetransmittableFrames(*it)) { | 64 if (manager_.HasRetransmittableFrames(*it)) { |
69 ++num_retransmittable; | 65 ++num_retransmittable; |
70 } | 66 } |
71 } | 67 } |
| 68 EXPECT_EQ(num_packets, manager_.GetNumRetransmittablePackets()); |
72 EXPECT_EQ(num_packets, num_retransmittable); | 69 EXPECT_EQ(num_packets, num_retransmittable); |
73 } | 70 } |
74 | 71 |
75 void VerifyAckedPackets(QuicPacketSequenceNumber* expected, | 72 void VerifyAckedPackets(QuicPacketSequenceNumber* expected, |
76 size_t num_expected, | 73 size_t num_expected, |
77 const SequenceNumberSet& actual) { | 74 const SequenceNumberSet& actual) { |
78 if (num_expected == 0) { | 75 if (num_expected == 0) { |
79 EXPECT_TRUE(actual.empty()); | 76 EXPECT_TRUE(actual.empty()); |
80 return; | 77 return; |
81 } | 78 } |
(...skipping 30 matching lines...) Expand all Loading... |
112 PACKET_6BYTE_SEQUENCE_NUMBER)); | 109 PACKET_6BYTE_SEQUENCE_NUMBER)); |
113 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 110 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
114 packets_.back(), 0u, NULL); | 111 packets_.back(), 0u, NULL); |
115 } | 112 } |
116 | 113 |
117 testing::StrictMock<MockHelper> helper_; | 114 testing::StrictMock<MockHelper> helper_; |
118 QuicSentPacketManager manager_; | 115 QuicSentPacketManager manager_; |
119 vector<QuicPacket*> packets_; | 116 vector<QuicPacket*> packets_; |
120 }; | 117 }; |
121 | 118 |
122 INSTANTIATE_TEST_CASE_P(TrackRetransmissionHistory, | 119 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
123 QuicSentPacketManagerTest, | |
124 ::testing::Values(false, true)); | |
125 | |
126 TEST_P(QuicSentPacketManagerTest, IsUnacked) { | |
127 VerifyUnackedPackets(NULL, 0); | 120 VerifyUnackedPackets(NULL, 0); |
128 | 121 |
129 SerializedPacket serialized_packet(CreatePacket(1)); | 122 SerializedPacket serialized_packet(CreatePacket(1)); |
130 | 123 |
131 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 124 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
132 | 125 |
133 QuicPacketSequenceNumber unacked[] = { 1 }; | 126 QuicPacketSequenceNumber unacked[] = { 1 }; |
134 VerifyUnackedPackets(unacked, arraysize(unacked)); | 127 VerifyUnackedPackets(unacked, arraysize(unacked)); |
135 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 128 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
136 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 129 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
137 } | 130 } |
138 | 131 |
139 TEST_P(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 132 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
140 if (!FLAGS_track_retransmission_history) { | |
141 // This tests restransmission tracking specifically. | |
142 return; | |
143 } | |
144 SerializedPacket serialized_packet(CreatePacket(1)); | 133 SerializedPacket serialized_packet(CreatePacket(1)); |
145 | 134 |
146 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 135 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
147 RetransmitPacket(1, 2); | 136 RetransmitPacket(1, 2); |
148 | 137 |
149 EXPECT_EQ(1u, manager_.GetRetransmissionCount(2)); | 138 EXPECT_TRUE(manager_.IsRetransmission(2)); |
150 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 139 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
151 VerifyUnackedPackets(unacked, arraysize(unacked)); | 140 VerifyUnackedPackets(unacked, arraysize(unacked)); |
152 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 141 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
153 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 142 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
154 | |
155 RetransmitPacket(2, 3); | |
156 EXPECT_EQ(2u, manager_.GetRetransmissionCount(3)); | |
157 QuicPacketSequenceNumber unacked2[] = { 1, 2, 3 }; | |
158 VerifyUnackedPackets(unacked2, arraysize(unacked2)); | |
159 QuicPacketSequenceNumber retransmittable2[] = { 3 }; | |
160 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2)); | |
161 } | 143 } |
162 | 144 |
163 TEST_P(QuicSentPacketManagerTest, RetransmitThenAck) { | 145 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
164 SerializedPacket serialized_packet(CreatePacket(1)); | 146 SerializedPacket serialized_packet(CreatePacket(1)); |
165 | 147 |
166 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 148 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
167 RetransmitPacket(1, 2); | 149 RetransmitPacket(1, 2); |
168 | 150 |
169 // Ack 2 but not 1. | 151 // Ack 2 but not 1. |
170 ReceivedPacketInfo received_info; | 152 ReceivedPacketInfo received_info; |
171 received_info.largest_observed = 2; | 153 received_info.largest_observed = 2; |
172 received_info.missing_packets.insert(1); | 154 received_info.missing_packets.insert(1); |
173 manager_.OnIncomingAck(received_info, false); | 155 manager_.OnIncomingAck(received_info, false); |
174 | 156 |
175 // No unacked packets remain. | 157 // No unacked packets remain. |
176 VerifyUnackedPackets(NULL, 0); | 158 VerifyUnackedPackets(NULL, 0); |
177 VerifyRetransmittablePackets(NULL, 0); | 159 VerifyRetransmittablePackets(NULL, 0); |
178 } | 160 } |
179 | 161 |
180 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 162 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
181 SerializedPacket serialized_packet(CreatePacket(1)); | 163 SerializedPacket serialized_packet(CreatePacket(1)); |
182 | 164 |
183 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 165 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
184 manager_.MarkForRetransmission(1, NACK_RETRANSMISSION); | 166 manager_.MarkForRetransmission(1, NACK_RETRANSMISSION); |
185 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 167 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
186 | 168 |
187 // Ack 1. | 169 // Ack 1. |
188 ReceivedPacketInfo received_info; | 170 ReceivedPacketInfo received_info; |
189 received_info.largest_observed = 1; | 171 received_info.largest_observed = 1; |
190 manager_.OnIncomingAck(received_info, false); | 172 manager_.OnIncomingAck(received_info, false); |
191 | 173 |
192 // There should no longer be a pending retransmission. | 174 // There should no longer be a pending retransmission. |
193 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 175 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
194 | 176 |
195 // No unacked packets remain. | 177 // No unacked packets remain. |
196 VerifyUnackedPackets(NULL, 0); | 178 VerifyUnackedPackets(NULL, 0); |
197 VerifyRetransmittablePackets(NULL, 0); | 179 VerifyRetransmittablePackets(NULL, 0); |
198 } | 180 } |
199 | 181 |
200 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 182 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
201 if (!FLAGS_track_retransmission_history) { | |
202 // This tests restransmission tracking specifically. | |
203 return; | |
204 } | |
205 SerializedPacket serialized_packet(CreatePacket(1)); | 183 SerializedPacket serialized_packet(CreatePacket(1)); |
206 | 184 |
207 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 185 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
208 RetransmitPacket(1, 2); | 186 RetransmitPacket(1, 2); |
209 | 187 |
210 // Ack 1 but not 2. | 188 // Ack 1 but not 2. |
211 ReceivedPacketInfo received_info; | 189 ReceivedPacketInfo received_info; |
212 received_info.largest_observed = 2; | 190 received_info.largest_observed = 2; |
213 received_info.missing_packets.insert(2); | 191 received_info.missing_packets.insert(2); |
214 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); | 192 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); |
215 manager_.OnIncomingAck(received_info, false); | 193 manager_.OnIncomingAck(received_info, false); |
216 | 194 |
217 // 2 remains unacked, but no packets have retransmittable data. | 195 // 2 remains unacked, but no packets have retransmittable data. |
218 QuicPacketSequenceNumber unacked[] = { 2 }; | 196 QuicPacketSequenceNumber unacked[] = { 2 }; |
219 VerifyUnackedPackets(unacked, arraysize(unacked)); | 197 VerifyUnackedPackets(unacked, arraysize(unacked)); |
220 VerifyRetransmittablePackets(NULL, 0); | 198 VerifyRetransmittablePackets(NULL, 0); |
221 } | 199 } |
222 | 200 |
223 TEST_P(QuicSentPacketManagerTest, TruncatedAck) { | 201 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
224 if (!FLAGS_track_retransmission_history) { | |
225 // This tests restransmission tracking specifically. | |
226 return; | |
227 } | |
228 SerializedPacket serialized_packet(CreatePacket(1)); | 202 SerializedPacket serialized_packet(CreatePacket(1)); |
229 | 203 |
230 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 204 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
231 RetransmitPacket(1, 2); | 205 RetransmitPacket(1, 2); |
232 RetransmitPacket(2, 3); | 206 RetransmitPacket(2, 3); |
233 RetransmitPacket(3, 4); | 207 RetransmitPacket(3, 4); |
234 | 208 |
235 // Truncated ack with 2 NACKs | 209 // Truncated ack with 2 NACKs |
236 ReceivedPacketInfo received_info; | 210 ReceivedPacketInfo received_info; |
237 received_info.largest_observed = 2; | 211 received_info.largest_observed = 2; |
238 received_info.missing_packets.insert(1); | 212 received_info.missing_packets.insert(1); |
239 received_info.missing_packets.insert(2); | 213 received_info.missing_packets.insert(2); |
240 manager_.OnIncomingAck(received_info, true); | 214 manager_.OnIncomingAck(received_info, true); |
241 | 215 |
242 // High water mark will be raised. | 216 // High water mark will be raised. |
243 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 217 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
244 VerifyUnackedPackets(unacked, arraysize(unacked)); | 218 VerifyUnackedPackets(unacked, arraysize(unacked)); |
245 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 219 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
246 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 220 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
247 } | 221 } |
248 | 222 |
249 TEST_P(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { | 223 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { |
250 if (!FLAGS_track_retransmission_history) { | |
251 // This tests restransmission tracking specifically. | |
252 return; | |
253 } | |
254 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); | 224 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); |
255 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); | 225 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); |
256 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); | 226 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); |
257 | 227 |
258 { | 228 { |
259 // Ack packets 1 and 3. | 229 // Ack packets 1 and 3. |
260 ReceivedPacketInfo received_info; | 230 ReceivedPacketInfo received_info; |
261 received_info.largest_observed = 3; | 231 received_info.largest_observed = 3; |
262 received_info.missing_packets.insert(2); | 232 received_info.missing_packets.insert(2); |
263 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); | 233 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 manager_.OnIncomingAck(received_info, true); | 355 manager_.OnIncomingAck(received_info, true); |
386 | 356 |
387 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. | 357 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. |
388 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; | 358 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; |
389 VerifyUnackedPackets(unacked, arraysize(unacked)); | 359 VerifyUnackedPackets(unacked, arraysize(unacked)); |
390 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; | 360 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; |
391 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 361 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
392 } | 362 } |
393 } | 363 } |
394 | 364 |
395 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 365 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
396 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); | 366 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); |
397 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 367 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
398 } | 368 } |
399 | 369 |
400 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { | 370 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { |
401 SerializedPacket serialized_packet(CreatePacket(1)); | 371 SerializedPacket serialized_packet(CreatePacket(1)); |
402 | 372 |
403 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 373 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
404 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 374 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
405 } | 375 } |
406 | 376 |
407 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { | 377 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { |
408 SerializedPacket serialized_packet(CreateFecPacket(1)); | 378 SerializedPacket serialized_packet(CreateFecPacket(1)); |
409 | 379 |
410 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 380 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
411 // FEC packets do not count as "unacked". | 381 // FEC packets do not count as "unacked". |
412 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | 382 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); |
413 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 383 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
414 } | 384 } |
415 | 385 |
416 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { | 386 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { |
417 SerializedPacket serialized_packet(CreatePacket(1)); | 387 SerializedPacket serialized_packet(CreatePacket(1)); |
418 | 388 |
419 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 389 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
420 manager_.DiscardUnackedPacket(1u); | 390 manager_.DiscardUnackedPacket(1u); |
421 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | 391 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); |
422 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 392 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
423 } | 393 } |
424 | 394 |
425 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { | 395 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { |
426 VerifyUnackedPackets(NULL, 0); | 396 VerifyUnackedPackets(NULL, 0); |
427 | 397 |
428 SerializedPacket serialized_packet(CreateFecPacket(1)); | 398 SerializedPacket serialized_packet(CreateFecPacket(1)); |
429 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 399 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
430 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 400 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); |
431 | 401 |
432 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 402 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
433 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); | 403 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); |
434 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 404 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); |
435 | 405 |
(...skipping 12 matching lines...) Expand all Loading... |
448 received_info.largest_observed = 2; | 418 received_info.largest_observed = 2; |
449 manager_.OnIncomingAck(received_info, false); | 419 manager_.OnIncomingAck(received_info, false); |
450 | 420 |
451 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); | 421 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); |
452 | 422 |
453 // Discard the 3rd packet and ensure there are no FEC packets. | 423 // Discard the 3rd packet and ensure there are no FEC packets. |
454 manager_.DiscardFecPacket(3); | 424 manager_.DiscardFecPacket(3); |
455 EXPECT_FALSE(manager_.HasUnackedFecPackets()); | 425 EXPECT_FALSE(manager_.HasUnackedFecPackets()); |
456 } | 426 } |
457 | 427 |
458 TEST_P(QuicSentPacketManagerTest, GetFecSentTime) { | 428 TEST_F(QuicSentPacketManagerTest, GetFecSentTime) { |
459 VerifyUnackedPackets(NULL, 0); | 429 VerifyUnackedPackets(NULL, 0); |
460 | 430 |
461 SerializedPacket serialized_packet(CreateFecPacket(1)); | 431 SerializedPacket serialized_packet(CreateFecPacket(1)); |
462 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 432 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
463 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 433 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
464 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); | 434 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); |
465 manager_.OnSerializedPacket(serialized_packet2, sent_time); | 435 manager_.OnSerializedPacket(serialized_packet2, sent_time); |
466 | 436 |
467 VerifyUnackedPackets(NULL, 0); | 437 VerifyUnackedPackets(NULL, 0); |
468 VerifyRetransmittablePackets(NULL, 0); | 438 VerifyRetransmittablePackets(NULL, 0); |
469 | 439 |
470 EXPECT_TRUE(manager_.HasUnackedFecPackets()); | 440 EXPECT_TRUE(manager_.HasUnackedFecPackets()); |
471 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); | 441 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); |
472 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); | 442 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); |
473 } | 443 } |
474 | 444 |
475 } // namespace | 445 } // namespace |
476 } // namespace test | 446 } // namespace test |
477 } // namespace net | 447 } // namespace net |
OLD | NEW |