| 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 |