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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 << " packets[" << i << "]:" << packets[i]; | 94 << " packets[" << i << "]:" << packets[i]; |
95 } | 95 } |
96 } | 96 } |
97 | 97 |
98 QuicUnackedPacketMap unacked_packets_; | 98 QuicUnackedPacketMap unacked_packets_; |
99 QuicTime now_; | 99 QuicTime now_; |
100 }; | 100 }; |
101 | 101 |
102 TEST_F(QuicUnackedPacketMapTest, RttOnly) { | 102 TEST_F(QuicUnackedPacketMapTest, RttOnly) { |
103 // Acks are only tracked for RTT measurement purposes. | 103 // Acks are only tracked for RTT measurement purposes. |
104 unacked_packets_.AddPacket(CreateNonRetransmittablePacket(1)); | 104 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(1), 0, |
105 unacked_packets_.SetSent(1, now_, kDefaultAckLength, false); | 105 NOT_RETRANSMISSION, now_, kDefaultAckLength, |
| 106 false); |
106 | 107 |
107 QuicPacketSequenceNumber unacked[] = { 1 }; | 108 QuicPacketSequenceNumber unacked[] = { 1 }; |
108 VerifyUnackedPackets(unacked, arraysize(unacked)); | 109 VerifyUnackedPackets(unacked, arraysize(unacked)); |
109 VerifyInFlightPackets(nullptr, 0); | 110 VerifyInFlightPackets(nullptr, 0); |
110 VerifyRetransmittablePackets(nullptr, 0); | 111 VerifyRetransmittablePackets(nullptr, 0); |
111 | 112 |
112 unacked_packets_.IncreaseLargestObserved(1); | 113 unacked_packets_.IncreaseLargestObserved(1); |
113 VerifyUnackedPackets(nullptr, 0); | 114 VerifyUnackedPackets(nullptr, 0); |
114 VerifyInFlightPackets(nullptr, 0); | 115 VerifyInFlightPackets(nullptr, 0); |
115 VerifyRetransmittablePackets(nullptr, 0); | 116 VerifyRetransmittablePackets(nullptr, 0); |
116 } | 117 } |
117 | 118 |
118 TEST_F(QuicUnackedPacketMapTest, DiscardOldRttOnly) { | 119 TEST_F(QuicUnackedPacketMapTest, DiscardOldRttOnly) { |
119 // Acks are only tracked for RTT measurement purposes, and are discarded | 120 // Acks are only tracked for RTT measurement purposes, and are discarded |
120 // when more than 200 accumulate. | 121 // when more than 200 accumulate. |
121 const size_t kNumUnackedPackets = 200; | 122 const size_t kNumUnackedPackets = 200; |
122 for (size_t i = 1; i < 400; ++i) { | 123 for (size_t i = 1; i < 400; ++i) { |
123 unacked_packets_.AddPacket(CreateNonRetransmittablePacket(i)); | 124 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(i), 0, |
124 unacked_packets_.SetSent(i, now_, kDefaultAckLength, false); | 125 NOT_RETRANSMISSION, now_, kDefaultAckLength, |
| 126 false); |
125 unacked_packets_.RemoveObsoletePackets(); | 127 unacked_packets_.RemoveObsoletePackets(); |
126 EXPECT_EQ(min(i, kNumUnackedPackets), | 128 EXPECT_EQ(min(i, kNumUnackedPackets), |
127 unacked_packets_.GetNumUnackedPacketsDebugOnly()); | 129 unacked_packets_.GetNumUnackedPacketsDebugOnly()); |
128 } | 130 } |
129 } | 131 } |
130 | 132 |
131 TEST_F(QuicUnackedPacketMapTest, RetransmittableInflightAndRtt) { | 133 TEST_F(QuicUnackedPacketMapTest, RetransmittableInflightAndRtt) { |
132 // Simulate a retransmittable packet being sent and acked. | 134 // Simulate a retransmittable packet being sent and acked. |
133 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); | 135 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, |
134 unacked_packets_.SetSent(1, now_, kDefaultLength, true); | 136 NOT_RETRANSMISSION, now_, kDefaultLength, |
| 137 true); |
135 | 138 |
136 QuicPacketSequenceNumber unacked[] = { 1 }; | 139 QuicPacketSequenceNumber unacked[] = { 1 }; |
137 VerifyUnackedPackets(unacked, arraysize(unacked)); | 140 VerifyUnackedPackets(unacked, arraysize(unacked)); |
138 VerifyInFlightPackets(unacked, arraysize(unacked)); | 141 VerifyInFlightPackets(unacked, arraysize(unacked)); |
139 VerifyRetransmittablePackets(unacked, arraysize(unacked)); | 142 VerifyRetransmittablePackets(unacked, arraysize(unacked)); |
140 | 143 |
141 unacked_packets_.RemoveRetransmittability(1); | 144 unacked_packets_.RemoveRetransmittability(1); |
142 VerifyUnackedPackets(unacked, arraysize(unacked)); | 145 VerifyUnackedPackets(unacked, arraysize(unacked)); |
143 VerifyInFlightPackets(unacked, arraysize(unacked)); | 146 VerifyInFlightPackets(unacked, arraysize(unacked)); |
144 VerifyRetransmittablePackets(nullptr, 0); | 147 VerifyRetransmittablePackets(nullptr, 0); |
145 | 148 |
146 unacked_packets_.IncreaseLargestObserved(1); | 149 unacked_packets_.IncreaseLargestObserved(1); |
147 VerifyUnackedPackets(unacked, arraysize(unacked)); | 150 VerifyUnackedPackets(unacked, arraysize(unacked)); |
148 VerifyInFlightPackets(unacked, arraysize(unacked)); | 151 VerifyInFlightPackets(unacked, arraysize(unacked)); |
149 VerifyRetransmittablePackets(nullptr, 0); | 152 VerifyRetransmittablePackets(nullptr, 0); |
150 | 153 |
151 unacked_packets_.RemoveFromInFlight(1); | 154 unacked_packets_.RemoveFromInFlight(1); |
152 VerifyUnackedPackets(nullptr, 0); | 155 VerifyUnackedPackets(nullptr, 0); |
153 VerifyInFlightPackets(nullptr, 0); | 156 VerifyInFlightPackets(nullptr, 0); |
154 VerifyRetransmittablePackets(nullptr, 0); | 157 VerifyRetransmittablePackets(nullptr, 0); |
155 } | 158 } |
156 | 159 |
157 TEST_F(QuicUnackedPacketMapTest, RetransmittedPacket) { | 160 TEST_F(QuicUnackedPacketMapTest, RetransmittedPacket) { |
158 // Simulate a retransmittable packet being sent, retransmitted, and the first | 161 // Simulate a retransmittable packet being sent, retransmitted, and the first |
159 // transmission being acked. | 162 // transmission being acked. |
160 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); | 163 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, |
161 unacked_packets_.SetSent(1, now_, kDefaultLength, true); | 164 NOT_RETRANSMISSION, now_, kDefaultLength, |
162 unacked_packets_.OnRetransmittedPacket(1, 2, LOSS_RETRANSMISSION); | 165 true); |
163 unacked_packets_.SetSent(2, now_, kDefaultLength, true); | 166 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(2), 1, |
| 167 LOSS_RETRANSMISSION, now_, kDefaultLength, |
| 168 true); |
164 | 169 |
165 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 170 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
166 VerifyUnackedPackets(unacked, arraysize(unacked)); | 171 VerifyUnackedPackets(unacked, arraysize(unacked)); |
167 VerifyInFlightPackets(unacked, arraysize(unacked)); | 172 VerifyInFlightPackets(unacked, arraysize(unacked)); |
168 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 173 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
169 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 174 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
170 | 175 |
171 unacked_packets_.RemoveRetransmittability(1); | 176 unacked_packets_.RemoveRetransmittability(1); |
172 VerifyUnackedPackets(unacked, arraysize(unacked)); | 177 VerifyUnackedPackets(unacked, arraysize(unacked)); |
173 VerifyInFlightPackets(unacked, arraysize(unacked)); | 178 VerifyInFlightPackets(unacked, arraysize(unacked)); |
(...skipping 11 matching lines...) Expand all Loading... |
185 VerifyRetransmittablePackets(nullptr, 0); | 190 VerifyRetransmittablePackets(nullptr, 0); |
186 | 191 |
187 unacked_packets_.RemoveFromInFlight(1); | 192 unacked_packets_.RemoveFromInFlight(1); |
188 VerifyUnackedPackets(nullptr, 0); | 193 VerifyUnackedPackets(nullptr, 0); |
189 VerifyInFlightPackets(nullptr, 0); | 194 VerifyInFlightPackets(nullptr, 0); |
190 VerifyRetransmittablePackets(nullptr, 0); | 195 VerifyRetransmittablePackets(nullptr, 0); |
191 } | 196 } |
192 | 197 |
193 TEST_F(QuicUnackedPacketMapTest, RetransmitThreeTimes) { | 198 TEST_F(QuicUnackedPacketMapTest, RetransmitThreeTimes) { |
194 // Simulate a retransmittable packet being sent and retransmitted twice. | 199 // Simulate a retransmittable packet being sent and retransmitted twice. |
195 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); | 200 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, |
196 unacked_packets_.SetSent(1, now_, kDefaultLength, true); | 201 NOT_RETRANSMISSION, now_, kDefaultLength, |
197 unacked_packets_.AddPacket(CreateRetransmittablePacket(2)); | 202 true); |
198 unacked_packets_.SetSent(2, now_, kDefaultLength, true); | 203 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(2), 0, |
| 204 NOT_RETRANSMISSION, now_, kDefaultLength, |
| 205 true); |
199 | 206 |
200 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 207 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
201 VerifyUnackedPackets(unacked, arraysize(unacked)); | 208 VerifyUnackedPackets(unacked, arraysize(unacked)); |
202 VerifyInFlightPackets(unacked, arraysize(unacked)); | 209 VerifyInFlightPackets(unacked, arraysize(unacked)); |
203 QuicPacketSequenceNumber retransmittable[] = { 1, 2 }; | 210 QuicPacketSequenceNumber retransmittable[] = { 1, 2 }; |
204 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 211 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
205 | 212 |
206 // Early retransmit 1 as 3 and send new data as 4. | 213 // Early retransmit 1 as 3 and send new data as 4. |
207 unacked_packets_.IncreaseLargestObserved(2); | 214 unacked_packets_.IncreaseLargestObserved(2); |
208 unacked_packets_.RemoveFromInFlight(2); | 215 unacked_packets_.RemoveFromInFlight(2); |
209 unacked_packets_.RemoveRetransmittability(2); | 216 unacked_packets_.RemoveRetransmittability(2); |
210 unacked_packets_.RemoveFromInFlight(1); | 217 unacked_packets_.RemoveFromInFlight(1); |
211 unacked_packets_.OnRetransmittedPacket(1, 3, LOSS_RETRANSMISSION); | 218 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(3), 1, |
212 unacked_packets_.SetSent(3, now_, kDefaultLength, true); | 219 LOSS_RETRANSMISSION, now_, kDefaultLength, |
213 unacked_packets_.AddPacket(CreateRetransmittablePacket(4)); | 220 true); |
214 unacked_packets_.SetSent(4, now_, kDefaultLength, true); | 221 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(4), 0, |
| 222 NOT_RETRANSMISSION, now_, kDefaultLength, |
| 223 true); |
215 | 224 |
216 QuicPacketSequenceNumber unacked2[] = { 1, 3, 4 }; | 225 QuicPacketSequenceNumber unacked2[] = { 1, 3, 4 }; |
217 VerifyUnackedPackets(unacked2, arraysize(unacked2)); | 226 VerifyUnackedPackets(unacked2, arraysize(unacked2)); |
218 QuicPacketSequenceNumber pending2[] = { 3, 4, }; | 227 QuicPacketSequenceNumber pending2[] = { 3, 4, }; |
219 VerifyInFlightPackets(pending2, arraysize(pending2)); | 228 VerifyInFlightPackets(pending2, arraysize(pending2)); |
220 QuicPacketSequenceNumber retransmittable2[] = { 3, 4 }; | 229 QuicPacketSequenceNumber retransmittable2[] = { 3, 4 }; |
221 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2)); | 230 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2)); |
222 | 231 |
223 // Early retransmit 3 (formerly 1) as 5, and remove 1 from unacked. | 232 // Early retransmit 3 (formerly 1) as 5, and remove 1 from unacked. |
224 unacked_packets_.IncreaseLargestObserved(4); | 233 unacked_packets_.IncreaseLargestObserved(4); |
225 unacked_packets_.RemoveFromInFlight(4); | 234 unacked_packets_.RemoveFromInFlight(4); |
226 unacked_packets_.RemoveRetransmittability(4); | 235 unacked_packets_.RemoveRetransmittability(4); |
227 unacked_packets_.OnRetransmittedPacket(3, 5, LOSS_RETRANSMISSION); | 236 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(5), 3, |
228 unacked_packets_.SetSent(5, now_, kDefaultLength, true); | 237 LOSS_RETRANSMISSION, now_, kDefaultLength, |
229 unacked_packets_.AddPacket(CreateRetransmittablePacket(6)); | 238 true); |
230 unacked_packets_.SetSent(6, now_, kDefaultLength, true); | 239 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(6), 0, |
| 240 NOT_RETRANSMISSION, now_, kDefaultLength, |
| 241 true); |
231 | 242 |
232 QuicPacketSequenceNumber unacked3[] = { 3, 5, 6 }; | 243 QuicPacketSequenceNumber unacked3[] = { 3, 5, 6 }; |
233 VerifyUnackedPackets(unacked3, arraysize(unacked3)); | 244 VerifyUnackedPackets(unacked3, arraysize(unacked3)); |
234 QuicPacketSequenceNumber pending3[] = { 3, 5, 6 }; | 245 QuicPacketSequenceNumber pending3[] = { 3, 5, 6 }; |
235 VerifyInFlightPackets(pending3, arraysize(pending3)); | 246 VerifyInFlightPackets(pending3, arraysize(pending3)); |
236 QuicPacketSequenceNumber retransmittable3[] = { 5, 6 }; | 247 QuicPacketSequenceNumber retransmittable3[] = { 5, 6 }; |
237 VerifyRetransmittablePackets(retransmittable3, arraysize(retransmittable3)); | 248 VerifyRetransmittablePackets(retransmittable3, arraysize(retransmittable3)); |
238 | 249 |
239 // Early retransmit 5 as 7 and ensure in flight packet 3 is not removed. | 250 // Early retransmit 5 as 7 and ensure in flight packet 3 is not removed. |
240 unacked_packets_.IncreaseLargestObserved(6); | 251 unacked_packets_.IncreaseLargestObserved(6); |
241 unacked_packets_.RemoveFromInFlight(6); | 252 unacked_packets_.RemoveFromInFlight(6); |
242 unacked_packets_.RemoveRetransmittability(6); | 253 unacked_packets_.RemoveRetransmittability(6); |
243 unacked_packets_.OnRetransmittedPacket(5, 7, LOSS_RETRANSMISSION); | 254 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(7), 5, |
244 unacked_packets_.SetSent(7, now_, kDefaultLength, true); | 255 LOSS_RETRANSMISSION, now_, kDefaultLength, |
| 256 true); |
245 | 257 |
246 QuicPacketSequenceNumber unacked4[] = { 3, 5, 7 }; | 258 QuicPacketSequenceNumber unacked4[] = { 3, 5, 7 }; |
247 VerifyUnackedPackets(unacked4, arraysize(unacked4)); | 259 VerifyUnackedPackets(unacked4, arraysize(unacked4)); |
248 QuicPacketSequenceNumber pending4[] = { 3, 5, 7 }; | 260 QuicPacketSequenceNumber pending4[] = { 3, 5, 7 }; |
249 VerifyInFlightPackets(pending4, arraysize(pending4)); | 261 VerifyInFlightPackets(pending4, arraysize(pending4)); |
250 QuicPacketSequenceNumber retransmittable4[] = { 7 }; | 262 QuicPacketSequenceNumber retransmittable4[] = { 7 }; |
251 VerifyRetransmittablePackets(retransmittable4, arraysize(retransmittable4)); | 263 VerifyRetransmittablePackets(retransmittable4, arraysize(retransmittable4)); |
252 | 264 |
253 // Remove the older two transmissions from in flight. | 265 // Remove the older two transmissions from in flight. |
254 unacked_packets_.RemoveFromInFlight(3); | 266 unacked_packets_.RemoveFromInFlight(3); |
255 unacked_packets_.RemoveFromInFlight(5); | 267 unacked_packets_.RemoveFromInFlight(5); |
256 QuicPacketSequenceNumber pending5[] = { 7 }; | 268 QuicPacketSequenceNumber pending5[] = { 7 }; |
257 VerifyInFlightPackets(pending5, arraysize(pending5)); | 269 VerifyInFlightPackets(pending5, arraysize(pending5)); |
258 | 270 |
259 // Now test ClearAllPreviousTransmissions, leaving one packet. | 271 // Now test ClearAllPreviousTransmissions, leaving one packet. |
260 unacked_packets_.ClearAllPreviousRetransmissions(); | 272 unacked_packets_.ClearAllPreviousRetransmissions(); |
261 QuicPacketSequenceNumber unacked5[] = { 7 }; | 273 QuicPacketSequenceNumber unacked5[] = { 7 }; |
262 VerifyUnackedPackets(unacked5, arraysize(unacked5)); | 274 VerifyUnackedPackets(unacked5, arraysize(unacked5)); |
263 QuicPacketSequenceNumber retransmittable5[] = { 7 }; | 275 QuicPacketSequenceNumber retransmittable5[] = { 7 }; |
264 VerifyRetransmittablePackets(retransmittable5, arraysize(retransmittable5)); | 276 VerifyRetransmittablePackets(retransmittable5, arraysize(retransmittable5)); |
265 } | 277 } |
266 | 278 |
267 TEST_F(QuicUnackedPacketMapTest, RetransmitFourTimes) { | 279 TEST_F(QuicUnackedPacketMapTest, RetransmitFourTimes) { |
268 // Simulate a retransmittable packet being sent and retransmitted twice. | 280 // Simulate a retransmittable packet being sent and retransmitted twice. |
269 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); | 281 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, |
270 unacked_packets_.SetSent(1, now_, kDefaultLength, true); | 282 NOT_RETRANSMISSION, now_, kDefaultLength, |
271 unacked_packets_.AddPacket(CreateRetransmittablePacket(2)); | 283 true); |
272 unacked_packets_.SetSent(2, now_, kDefaultLength, true); | 284 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(2), 0, |
| 285 NOT_RETRANSMISSION, now_, kDefaultLength, |
| 286 true); |
273 | 287 |
274 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 288 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
275 VerifyUnackedPackets(unacked, arraysize(unacked)); | 289 VerifyUnackedPackets(unacked, arraysize(unacked)); |
276 VerifyInFlightPackets(unacked, arraysize(unacked)); | 290 VerifyInFlightPackets(unacked, arraysize(unacked)); |
277 QuicPacketSequenceNumber retransmittable[] = { 1, 2 }; | 291 QuicPacketSequenceNumber retransmittable[] = { 1, 2 }; |
278 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 292 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
279 | 293 |
280 // Early retransmit 1 as 3. | 294 // Early retransmit 1 as 3. |
281 unacked_packets_.IncreaseLargestObserved(2); | 295 unacked_packets_.IncreaseLargestObserved(2); |
282 unacked_packets_.RemoveFromInFlight(2); | 296 unacked_packets_.RemoveFromInFlight(2); |
283 unacked_packets_.RemoveRetransmittability(2); | 297 unacked_packets_.RemoveRetransmittability(2); |
284 unacked_packets_.RemoveFromInFlight(1); | 298 unacked_packets_.RemoveFromInFlight(1); |
285 unacked_packets_.OnRetransmittedPacket(1, 3, LOSS_RETRANSMISSION); | 299 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(3), 1, |
286 unacked_packets_.SetSent(3, now_, kDefaultLength, true); | 300 LOSS_RETRANSMISSION, now_, kDefaultLength, |
| 301 true); |
287 | 302 |
288 QuicPacketSequenceNumber unacked2[] = { 1, 3 }; | 303 QuicPacketSequenceNumber unacked2[] = { 1, 3 }; |
289 VerifyUnackedPackets(unacked2, arraysize(unacked2)); | 304 VerifyUnackedPackets(unacked2, arraysize(unacked2)); |
290 QuicPacketSequenceNumber pending2[] = { 3 }; | 305 QuicPacketSequenceNumber pending2[] = { 3 }; |
291 VerifyInFlightPackets(pending2, arraysize(pending2)); | 306 VerifyInFlightPackets(pending2, arraysize(pending2)); |
292 QuicPacketSequenceNumber retransmittable2[] = { 3 }; | 307 QuicPacketSequenceNumber retransmittable2[] = { 3 }; |
293 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2)); | 308 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2)); |
294 | 309 |
295 // TLP 3 (formerly 1) as 4, and don't remove 1 from unacked. | 310 // TLP 3 (formerly 1) as 4, and don't remove 1 from unacked. |
296 unacked_packets_.OnRetransmittedPacket(3, 4, TLP_RETRANSMISSION); | 311 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(4), 3, |
297 unacked_packets_.SetSent(4, now_, kDefaultLength, true); | 312 TLP_RETRANSMISSION, now_, kDefaultLength, |
298 unacked_packets_.AddPacket(CreateRetransmittablePacket(5)); | 313 true); |
299 unacked_packets_.SetSent(5, now_, kDefaultLength, true); | 314 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(5), 0, |
| 315 NOT_RETRANSMISSION, now_, kDefaultLength, |
| 316 true); |
300 | 317 |
301 QuicPacketSequenceNumber unacked3[] = { 1, 3, 4, 5 }; | 318 QuicPacketSequenceNumber unacked3[] = { 1, 3, 4, 5 }; |
302 VerifyUnackedPackets(unacked3, arraysize(unacked3)); | 319 VerifyUnackedPackets(unacked3, arraysize(unacked3)); |
303 QuicPacketSequenceNumber pending3[] = { 3, 4, 5 }; | 320 QuicPacketSequenceNumber pending3[] = { 3, 4, 5 }; |
304 VerifyInFlightPackets(pending3, arraysize(pending3)); | 321 VerifyInFlightPackets(pending3, arraysize(pending3)); |
305 QuicPacketSequenceNumber retransmittable3[] = { 4, 5 }; | 322 QuicPacketSequenceNumber retransmittable3[] = { 4, 5 }; |
306 VerifyRetransmittablePackets(retransmittable3, arraysize(retransmittable3)); | 323 VerifyRetransmittablePackets(retransmittable3, arraysize(retransmittable3)); |
307 | 324 |
308 // Early retransmit 4 as 6 and ensure in flight packet 3 is removed. | 325 // Early retransmit 4 as 6 and ensure in flight packet 3 is removed. |
309 unacked_packets_.IncreaseLargestObserved(5); | 326 unacked_packets_.IncreaseLargestObserved(5); |
310 unacked_packets_.RemoveFromInFlight(5); | 327 unacked_packets_.RemoveFromInFlight(5); |
311 unacked_packets_.RemoveRetransmittability(5); | 328 unacked_packets_.RemoveRetransmittability(5); |
312 unacked_packets_.RemoveFromInFlight(3); | 329 unacked_packets_.RemoveFromInFlight(3); |
313 unacked_packets_.RemoveFromInFlight(4); | 330 unacked_packets_.RemoveFromInFlight(4); |
314 unacked_packets_.OnRetransmittedPacket(4, 6, LOSS_RETRANSMISSION); | 331 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(6), 4, |
315 unacked_packets_.SetSent(6, now_, kDefaultLength, true); | 332 LOSS_RETRANSMISSION, now_, kDefaultLength, |
| 333 true); |
316 | 334 |
317 QuicPacketSequenceNumber unacked4[] = { 4, 6 }; | 335 QuicPacketSequenceNumber unacked4[] = { 4, 6 }; |
318 VerifyUnackedPackets(unacked4, arraysize(unacked4)); | 336 VerifyUnackedPackets(unacked4, arraysize(unacked4)); |
319 QuicPacketSequenceNumber pending4[] = { 6 }; | 337 QuicPacketSequenceNumber pending4[] = { 6 }; |
320 VerifyInFlightPackets(pending4, arraysize(pending4)); | 338 VerifyInFlightPackets(pending4, arraysize(pending4)); |
321 QuicPacketSequenceNumber retransmittable4[] = { 6 }; | 339 QuicPacketSequenceNumber retransmittable4[] = { 6 }; |
322 VerifyRetransmittablePackets(retransmittable4, arraysize(retransmittable4)); | 340 VerifyRetransmittablePackets(retransmittable4, arraysize(retransmittable4)); |
323 } | 341 } |
324 | 342 |
325 TEST_F(QuicUnackedPacketMapTest, RestoreInflight) { | 343 TEST_F(QuicUnackedPacketMapTest, RestoreInflight) { |
326 // Simulate a retransmittable packet being sent, retransmitted, and the first | 344 // Simulate a retransmittable packet being sent, retransmitted, and the first |
327 // transmission being acked. | 345 // transmission being acked. |
328 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); | 346 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, |
329 unacked_packets_.SetSent(1, now_, kDefaultLength, true); | 347 NOT_RETRANSMISSION, now_, kDefaultLength, |
330 unacked_packets_.OnRetransmittedPacket(1, 2, RTO_RETRANSMISSION); | 348 true); |
331 unacked_packets_.RemoveFromInFlight(1); | 349 unacked_packets_.RemoveFromInFlight(1); |
332 unacked_packets_.SetSent(2, now_, kDefaultLength, true); | 350 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(2), 1, |
| 351 RTO_RETRANSMISSION, now_, kDefaultLength, |
| 352 true); |
333 | 353 |
334 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 354 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
335 VerifyUnackedPackets(unacked, arraysize(unacked)); | 355 VerifyUnackedPackets(unacked, arraysize(unacked)); |
336 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 356 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
337 VerifyInFlightPackets(retransmittable, arraysize(retransmittable)); | 357 VerifyInFlightPackets(retransmittable, arraysize(retransmittable)); |
338 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 358 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
339 EXPECT_EQ(kDefaultLength, unacked_packets_.bytes_in_flight()); | 359 EXPECT_EQ(kDefaultLength, unacked_packets_.bytes_in_flight()); |
340 | 360 |
341 // Simulate an F-RTO, and restore 1 to flight. | 361 // Simulate an F-RTO, and restore 1 to flight. |
342 unacked_packets_.RestoreInFlight(1); | 362 unacked_packets_.RestoreInFlight(1); |
343 VerifyUnackedPackets(unacked, arraysize(unacked)); | 363 VerifyUnackedPackets(unacked, arraysize(unacked)); |
344 VerifyInFlightPackets(unacked, arraysize(unacked)); | 364 VerifyInFlightPackets(unacked, arraysize(unacked)); |
345 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 365 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
346 EXPECT_EQ(2 * kDefaultLength, unacked_packets_.bytes_in_flight()); | 366 EXPECT_EQ(2 * kDefaultLength, unacked_packets_.bytes_in_flight()); |
347 } | 367 } |
348 | 368 |
349 TEST_F(QuicUnackedPacketMapTest, SendWithGap) { | 369 TEST_F(QuicUnackedPacketMapTest, SendWithGap) { |
350 // Simulate a retransmittable packet being sent, retransmitted, and the first | 370 // Simulate a retransmittable packet being sent, retransmitted, and the first |
351 // transmission being acked. | 371 // transmission being acked. |
352 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); | 372 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, |
353 unacked_packets_.SetSent(1, now_, kDefaultLength, true); | 373 NOT_RETRANSMISSION, now_, kDefaultLength, |
354 unacked_packets_.AddPacket(CreateRetransmittablePacket(3)); | 374 true); |
355 unacked_packets_.SetSent(3, now_, kDefaultLength, true); | 375 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(3), 0, |
356 unacked_packets_.OnRetransmittedPacket(1, 5, LOSS_RETRANSMISSION); | 376 NOT_RETRANSMISSION, now_, kDefaultLength, |
357 unacked_packets_.SetSent(5, now_, kDefaultLength, true); | 377 true); |
| 378 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(5), 3, |
| 379 LOSS_RETRANSMISSION, now_, kDefaultLength, |
| 380 true); |
358 | 381 |
359 EXPECT_EQ(1u, unacked_packets_.GetLeastUnacked()); | 382 EXPECT_EQ(1u, unacked_packets_.GetLeastUnacked()); |
360 EXPECT_TRUE(unacked_packets_.IsUnacked(1)); | 383 EXPECT_TRUE(unacked_packets_.IsUnacked(1)); |
361 EXPECT_FALSE(unacked_packets_.IsUnacked(2)); | 384 EXPECT_FALSE(unacked_packets_.IsUnacked(2)); |
362 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); | 385 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); |
363 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); | 386 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); |
364 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); | 387 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); |
365 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); | 388 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); |
366 } | 389 } |
367 | 390 |
368 | 391 |
369 } // namespace | 392 } // namespace |
370 } // namespace test | 393 } // namespace test |
371 } // namespace net | 394 } // namespace net |
OLD | NEW |