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_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 | 34 |
35 ~QuicSentPacketManagerTest() { | 35 ~QuicSentPacketManagerTest() { |
36 STLDeleteElements(&packets_); | 36 STLDeleteElements(&packets_); |
37 } | 37 } |
38 | 38 |
39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
40 size_t num_packets) { | 40 size_t num_packets) { |
41 if (num_packets == 0) { | 41 if (num_packets == 0) { |
42 EXPECT_FALSE(manager_.HasUnackedPackets()); | 42 EXPECT_FALSE(manager_.HasUnackedPackets()); |
43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets()); | 43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets()); |
44 EXPECT_FALSE(manager_.HasUnackedPackets()); | |
45 return; | 44 return; |
46 } | 45 } |
47 | 46 |
48 EXPECT_TRUE(manager_.HasUnackedPackets()); | 47 EXPECT_TRUE(manager_.HasUnackedPackets()); |
49 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); | 48 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); |
50 for (size_t i = 0; i < num_packets; ++i) { | 49 for (size_t i = 0; i < num_packets; ++i) { |
51 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; | 50 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; |
52 } | 51 } |
53 } | 52 } |
54 | 53 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 } | 105 } |
107 | 106 |
108 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { | 107 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { |
109 packets_.push_back(QuicPacket::NewFecPacket( | 108 packets_.push_back(QuicPacket::NewFecPacket( |
110 NULL, 0, false, PACKET_8BYTE_GUID, false, | 109 NULL, 0, false, PACKET_8BYTE_GUID, false, |
111 PACKET_6BYTE_SEQUENCE_NUMBER)); | 110 PACKET_6BYTE_SEQUENCE_NUMBER)); |
112 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 111 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
113 packets_.back(), 0u, NULL); | 112 packets_.back(), 0u, NULL); |
114 } | 113 } |
115 | 114 |
| 115 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 116 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _)) |
| 117 .Times(1).WillOnce(Return(true)); |
| 118 SerializedPacket packet(CreatePacket(sequence_number)); |
| 119 manager_.OnSerializedPacket(packet); |
| 120 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), |
| 121 packet.packet->length(), NOT_RETRANSMISSION, |
| 122 HAS_RETRANSMITTABLE_DATA); |
| 123 } |
| 124 |
| 125 // Based on QuicConnection's WritePendingRetransmissions. |
| 126 void RetransmitNextPacket( |
| 127 QuicPacketSequenceNumber retransmission_sequence_number) { |
| 128 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 129 EXPECT_CALL(*send_algorithm_, |
| 130 OnPacketSent(_, retransmission_sequence_number, _, _, _)) |
| 131 .Times(1).WillOnce(Return(true)); |
| 132 const QuicSentPacketManager::PendingRetransmission pending = |
| 133 manager_.NextPendingRetransmission(); |
| 134 manager_.OnRetransmittedPacket( |
| 135 pending.sequence_number, retransmission_sequence_number); |
| 136 manager_.OnPacketSent(retransmission_sequence_number, |
| 137 clock_.ApproximateNow(), 1000, |
| 138 pending.transmission_type, HAS_RETRANSMITTABLE_DATA); |
| 139 } |
| 140 |
116 testing::StrictMock<MockHelper> helper_; | 141 testing::StrictMock<MockHelper> helper_; |
117 QuicSentPacketManager manager_; | 142 QuicSentPacketManager manager_; |
118 vector<QuicPacket*> packets_; | 143 vector<QuicPacket*> packets_; |
119 MockClock clock_; | 144 MockClock clock_; |
120 MockSendAlgorithm* send_algorithm_; | 145 MockSendAlgorithm* send_algorithm_; |
121 }; | 146 }; |
122 | 147 |
123 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 148 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
124 VerifyUnackedPackets(NULL, 0); | 149 VerifyUnackedPackets(NULL, 0); |
125 | 150 |
126 SerializedPacket serialized_packet(CreatePacket(1)); | 151 SerializedPacket serialized_packet(CreatePacket(1)); |
127 | 152 |
128 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 153 manager_.OnSerializedPacket(serialized_packet); |
129 | 154 |
130 QuicPacketSequenceNumber unacked[] = { 1 }; | 155 QuicPacketSequenceNumber unacked[] = { 1 }; |
131 VerifyUnackedPackets(unacked, arraysize(unacked)); | 156 VerifyUnackedPackets(unacked, arraysize(unacked)); |
132 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 157 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
133 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 158 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
134 } | 159 } |
135 | 160 |
136 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 161 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
137 SerializedPacket serialized_packet(CreatePacket(1)); | 162 SerializedPacket serialized_packet(CreatePacket(1)); |
138 | 163 |
139 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 164 manager_.OnSerializedPacket(serialized_packet); |
140 RetransmitPacket(1, 2); | 165 RetransmitPacket(1, 2); |
141 | 166 |
142 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); | 167 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); |
143 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 168 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
144 VerifyUnackedPackets(unacked, arraysize(unacked)); | 169 VerifyUnackedPackets(unacked, arraysize(unacked)); |
145 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 170 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
146 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 171 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
147 } | 172 } |
148 | 173 |
149 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 174 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
150 SerializedPacket serialized_packet(CreatePacket(1)); | 175 SerializedPacket serialized_packet(CreatePacket(1)); |
151 | 176 |
152 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 177 manager_.OnSerializedPacket(serialized_packet); |
153 RetransmitPacket(1, 2); | 178 RetransmitPacket(1, 2); |
154 | 179 |
155 // Ack 2 but not 1. | 180 // Ack 2 but not 1. |
156 ReceivedPacketInfo received_info; | 181 ReceivedPacketInfo received_info; |
157 received_info.largest_observed = 2; | 182 received_info.largest_observed = 2; |
158 received_info.missing_packets.insert(1); | 183 received_info.missing_packets.insert(1); |
159 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u)); | |
160 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 184 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
161 | 185 |
162 // No unacked packets remain. | 186 // No unacked packets remain. |
163 VerifyUnackedPackets(NULL, 0); | 187 VerifyUnackedPackets(NULL, 0); |
164 VerifyRetransmittablePackets(NULL, 0); | 188 VerifyRetransmittablePackets(NULL, 0); |
165 } | 189 } |
166 | 190 |
167 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 191 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
168 SerializedPacket serialized_packet(CreatePacket(1)); | 192 SerializedPacket serialized_packet(CreatePacket(1)); |
169 | 193 |
170 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 194 manager_.OnSerializedPacket(serialized_packet); |
171 QuicSentPacketManagerPeer::MarkForRetransmission( | 195 QuicSentPacketManagerPeer::MarkForRetransmission( |
172 &manager_, 1, NACK_RETRANSMISSION); | 196 &manager_, 1, NACK_RETRANSMISSION); |
173 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 197 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
174 | 198 |
175 // Ack 1. | 199 // Ack 1. |
176 ReceivedPacketInfo received_info; | 200 ReceivedPacketInfo received_info; |
177 received_info.largest_observed = 1; | 201 received_info.largest_observed = 1; |
178 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | |
179 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 202 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
180 | 203 |
181 // There should no longer be a pending retransmission. | 204 // There should no longer be a pending retransmission. |
182 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 205 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
183 | 206 |
184 // No unacked packets remain. | 207 // No unacked packets remain. |
185 VerifyUnackedPackets(NULL, 0); | 208 VerifyUnackedPackets(NULL, 0); |
186 VerifyRetransmittablePackets(NULL, 0); | 209 VerifyRetransmittablePackets(NULL, 0); |
187 } | 210 } |
188 | 211 |
189 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 212 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
190 SerializedPacket serialized_packet(CreatePacket(1)); | 213 SerializedPacket serialized_packet(CreatePacket(1)); |
191 | 214 |
192 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 215 manager_.OnSerializedPacket(serialized_packet); |
193 RetransmitPacket(1, 2); | 216 RetransmitPacket(1, 2); |
194 | 217 |
195 // Ack 1 but not 2. | 218 // Ack 1 but not 2. |
196 ReceivedPacketInfo received_info; | 219 ReceivedPacketInfo received_info; |
197 received_info.largest_observed = 1; | 220 received_info.largest_observed = 1; |
198 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u)); | |
199 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 221 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
200 | 222 |
201 // 2 remains unacked, but no packets have retransmittable data. | 223 // 2 remains unacked, but no packets have retransmittable data. |
202 QuicPacketSequenceNumber unacked[] = { 2 }; | 224 QuicPacketSequenceNumber unacked[] = { 2 }; |
203 VerifyUnackedPackets(unacked, arraysize(unacked)); | 225 VerifyUnackedPackets(unacked, arraysize(unacked)); |
204 VerifyRetransmittablePackets(NULL, 0); | 226 VerifyRetransmittablePackets(NULL, 0); |
| 227 |
| 228 // Verify that if the retransmission alarm does fire to abandon packet 2, |
| 229 // the sent packet manager is not notified, since there is no retransmittable |
| 230 // data outstanding. |
| 231 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 232 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
| 233 manager_.OnRetransmissionTimeout(); |
205 } | 234 } |
206 | 235 |
207 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { | 236 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
208 SerializedPacket serialized_packet(CreatePacket(1)); | 237 SerializedPacket serialized_packet(CreatePacket(1)); |
209 | 238 |
210 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 239 manager_.OnSerializedPacket(serialized_packet); |
211 RetransmitPacket(1, 2); | 240 RetransmitPacket(1, 2); |
212 RetransmitPacket(2, 3); | 241 RetransmitPacket(2, 3); |
213 | 242 |
214 // Ack 1 but not 2 or 3. | 243 // Ack 1 but not 2 or 3. |
215 ReceivedPacketInfo received_info; | 244 ReceivedPacketInfo received_info; |
216 received_info.largest_observed = 1; | 245 received_info.largest_observed = 1; |
217 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u)); | |
218 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 246 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
219 | 247 |
220 // 3 remains unacked, but no packets have retransmittable data. | 248 // 3 remains unacked, but no packets have retransmittable data. |
221 QuicPacketSequenceNumber unacked[] = { 3 }; | 249 QuicPacketSequenceNumber unacked[] = { 3 }; |
222 VerifyUnackedPackets(unacked, arraysize(unacked)); | 250 VerifyUnackedPackets(unacked, arraysize(unacked)); |
223 VerifyRetransmittablePackets(NULL, 0); | 251 VerifyRetransmittablePackets(NULL, 0); |
| 252 |
| 253 // Verify that if the retransmission alarm does fire to abandon packet 3, |
| 254 // the sent packet manager is not notified, since there is no retransmittable |
| 255 // data outstanding. |
| 256 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 257 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
| 258 manager_.OnRetransmissionTimeout(); |
224 } | 259 } |
225 | 260 |
226 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { | 261 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
227 SerializedPacket serialized_packet(CreatePacket(1)); | 262 SerializedPacket serialized_packet(CreatePacket(1)); |
228 | 263 |
229 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 264 manager_.OnSerializedPacket(serialized_packet); |
230 RetransmitPacket(1, 2); | 265 RetransmitPacket(1, 2); |
231 RetransmitPacket(2, 3); | 266 RetransmitPacket(2, 3); |
232 RetransmitPacket(3, 4); | 267 RetransmitPacket(3, 4); |
233 | 268 |
234 // Truncated ack with 2 NACKs | 269 // Truncated ack with 2 NACKs |
235 ReceivedPacketInfo received_info; | 270 ReceivedPacketInfo received_info; |
236 received_info.largest_observed = 2; | 271 received_info.largest_observed = 2; |
237 received_info.missing_packets.insert(1); | 272 received_info.missing_packets.insert(1); |
238 received_info.missing_packets.insert(2); | 273 received_info.missing_packets.insert(2); |
239 received_info.is_truncated = true; | 274 received_info.is_truncated = true; |
240 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(5u)); | |
241 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 275 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
242 | 276 |
243 // High water mark will be raised. | 277 // High water mark will be raised. |
244 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 278 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
245 VerifyUnackedPackets(unacked, arraysize(unacked)); | 279 VerifyUnackedPackets(unacked, arraysize(unacked)); |
246 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 280 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
247 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 281 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
248 } | 282 } |
249 | 283 |
250 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { | 284 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { |
251 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); | 285 manager_.OnSerializedPacket(CreatePacket(1)); |
252 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); | 286 manager_.OnSerializedPacket(CreatePacket(2)); |
253 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); | 287 manager_.OnSerializedPacket(CreatePacket(3)); |
254 | 288 |
255 { | 289 { |
256 // Ack packets 1 and 3. | 290 // Ack packets 1 and 3. |
257 ReceivedPacketInfo received_info; | 291 ReceivedPacketInfo received_info; |
258 received_info.largest_observed = 3; | 292 received_info.largest_observed = 3; |
259 received_info.missing_packets.insert(2); | 293 received_info.missing_packets.insert(2); |
260 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u)); | |
261 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 294 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
262 | 295 |
263 QuicPacketSequenceNumber unacked[] = { 2 }; | 296 QuicPacketSequenceNumber unacked[] = { 2 }; |
264 VerifyUnackedPackets(unacked, arraysize(unacked)); | 297 VerifyUnackedPackets(unacked, arraysize(unacked)); |
265 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 298 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
266 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 299 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
267 } | 300 } |
268 | 301 |
269 manager_.OnSerializedPacket(CreatePacket(4), QuicTime::Zero()); | 302 manager_.OnSerializedPacket(CreatePacket(4)); |
270 manager_.OnSerializedPacket(CreatePacket(5), QuicTime::Zero()); | 303 manager_.OnSerializedPacket(CreatePacket(5)); |
271 | 304 |
272 { | 305 { |
273 // Ack packets 5. | 306 // Ack packets 5. |
274 ReceivedPacketInfo received_info; | 307 ReceivedPacketInfo received_info; |
275 received_info.largest_observed = 5; | 308 received_info.largest_observed = 5; |
276 received_info.missing_packets.insert(2); | 309 received_info.missing_packets.insert(2); |
277 received_info.missing_packets.insert(4); | 310 received_info.missing_packets.insert(4); |
278 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(6u)); | |
279 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 311 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
280 | 312 |
281 QuicPacketSequenceNumber unacked[] = { 2, 4 }; | 313 QuicPacketSequenceNumber unacked[] = { 2, 4 }; |
282 VerifyUnackedPackets(unacked, arraysize(unacked)); | 314 VerifyUnackedPackets(unacked, arraysize(unacked)); |
283 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; | 315 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; |
284 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 316 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
285 } | 317 } |
286 | 318 |
287 manager_.OnSerializedPacket(CreatePacket(6), QuicTime::Zero()); | 319 manager_.OnSerializedPacket(CreatePacket(6)); |
288 manager_.OnSerializedPacket(CreatePacket(7), QuicTime::Zero()); | 320 manager_.OnSerializedPacket(CreatePacket(7)); |
289 | 321 |
290 { | 322 { |
291 // Ack packets 7. | 323 // Ack packets 7. |
292 ReceivedPacketInfo received_info; | 324 ReceivedPacketInfo received_info; |
293 received_info.largest_observed = 7; | 325 received_info.largest_observed = 7; |
294 received_info.missing_packets.insert(2); | 326 received_info.missing_packets.insert(2); |
295 received_info.missing_packets.insert(4); | 327 received_info.missing_packets.insert(4); |
296 received_info.missing_packets.insert(6); | 328 received_info.missing_packets.insert(6); |
297 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(8u)); | |
298 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 329 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
299 | 330 |
300 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; | 331 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; |
301 VerifyUnackedPackets(unacked, arraysize(unacked)); | 332 VerifyUnackedPackets(unacked, arraysize(unacked)); |
302 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; | 333 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; |
303 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 334 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
304 } | 335 } |
305 | 336 |
306 RetransmitPacket(2, 8); | 337 RetransmitPacket(2, 8); |
307 manager_.OnSerializedPacket(CreatePacket(9), QuicTime::Zero()); | 338 manager_.OnSerializedPacket(CreatePacket(9)); |
308 manager_.OnSerializedPacket(CreatePacket(10), QuicTime::Zero()); | 339 manager_.OnSerializedPacket(CreatePacket(10)); |
309 | 340 |
310 { | 341 { |
311 // Ack packet 10. | 342 // Ack packet 10. |
312 ReceivedPacketInfo received_info; | 343 ReceivedPacketInfo received_info; |
313 received_info.largest_observed = 10; | 344 received_info.largest_observed = 10; |
314 received_info.missing_packets.insert(2); | 345 received_info.missing_packets.insert(2); |
315 received_info.missing_packets.insert(4); | 346 received_info.missing_packets.insert(4); |
316 received_info.missing_packets.insert(6); | 347 received_info.missing_packets.insert(6); |
317 received_info.missing_packets.insert(8); | 348 received_info.missing_packets.insert(8); |
318 received_info.missing_packets.insert(9); | 349 received_info.missing_packets.insert(9); |
319 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(11u)); | |
320 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 350 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
321 | 351 |
322 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; | 352 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; |
323 VerifyUnackedPackets(unacked, arraysize(unacked)); | 353 VerifyUnackedPackets(unacked, arraysize(unacked)); |
324 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; | 354 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; |
325 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 355 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
326 } | 356 } |
327 | 357 |
328 | 358 |
329 RetransmitPacket(4, 11); | 359 RetransmitPacket(4, 11); |
330 manager_.OnSerializedPacket(CreatePacket(12), QuicTime::Zero()); | 360 manager_.OnSerializedPacket(CreatePacket(12)); |
331 manager_.OnSerializedPacket(CreatePacket(13), QuicTime::Zero()); | 361 manager_.OnSerializedPacket(CreatePacket(13)); |
332 | 362 |
333 { | 363 { |
334 // Ack packet 13. | 364 // Ack packet 13. |
335 ReceivedPacketInfo received_info; | 365 ReceivedPacketInfo received_info; |
336 received_info.largest_observed = 13; | 366 received_info.largest_observed = 13; |
337 received_info.missing_packets.insert(2); | 367 received_info.missing_packets.insert(2); |
338 received_info.missing_packets.insert(4); | 368 received_info.missing_packets.insert(4); |
339 received_info.missing_packets.insert(6); | 369 received_info.missing_packets.insert(6); |
340 received_info.missing_packets.insert(8); | 370 received_info.missing_packets.insert(8); |
341 received_info.missing_packets.insert(9); | 371 received_info.missing_packets.insert(9); |
342 received_info.missing_packets.insert(11); | 372 received_info.missing_packets.insert(11); |
343 received_info.missing_packets.insert(12); | 373 received_info.missing_packets.insert(12); |
344 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(14u)); | |
345 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 374 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
346 | 375 |
347 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; | 376 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; |
348 VerifyUnackedPackets(unacked, arraysize(unacked)); | 377 VerifyUnackedPackets(unacked, arraysize(unacked)); |
349 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; | 378 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; |
350 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 379 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
351 } | 380 } |
352 | 381 |
353 RetransmitPacket(6, 14); | 382 RetransmitPacket(6, 14); |
354 manager_.OnSerializedPacket(CreatePacket(15), QuicTime::Zero()); | 383 manager_.OnSerializedPacket(CreatePacket(15)); |
355 manager_.OnSerializedPacket(CreatePacket(16), QuicTime::Zero()); | 384 manager_.OnSerializedPacket(CreatePacket(16)); |
356 | 385 |
357 { | 386 { |
358 // Ack packet 16. | 387 // Ack packet 16. |
359 ReceivedPacketInfo received_info; | 388 ReceivedPacketInfo received_info; |
360 received_info.largest_observed = 13; | 389 received_info.largest_observed = 13; |
361 received_info.missing_packets.insert(2); | 390 received_info.missing_packets.insert(2); |
362 received_info.missing_packets.insert(4); | 391 received_info.missing_packets.insert(4); |
363 received_info.missing_packets.insert(6); | 392 received_info.missing_packets.insert(6); |
364 received_info.missing_packets.insert(8); | 393 received_info.missing_packets.insert(8); |
365 received_info.missing_packets.insert(9); | 394 received_info.missing_packets.insert(9); |
366 received_info.missing_packets.insert(11); | 395 received_info.missing_packets.insert(11); |
367 received_info.missing_packets.insert(12); | 396 received_info.missing_packets.insert(12); |
368 received_info.is_truncated = true; | 397 received_info.is_truncated = true; |
369 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(17u)); | |
370 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 398 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
371 | 399 |
372 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. | 400 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. |
373 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; | 401 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; |
374 VerifyUnackedPackets(unacked, arraysize(unacked)); | 402 VerifyUnackedPackets(unacked, arraysize(unacked)); |
375 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; | 403 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; |
376 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 404 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
377 } | 405 } |
378 } | 406 } |
379 | 407 |
380 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 408 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
381 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); | 409 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); |
382 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 410 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
383 } | 411 } |
384 | 412 |
385 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { | 413 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { |
386 SerializedPacket serialized_packet(CreatePacket(1)); | 414 SerializedPacket serialized_packet(CreatePacket(1)); |
387 | 415 |
388 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 416 manager_.OnSerializedPacket(serialized_packet); |
389 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 417 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
390 } | 418 } |
391 | 419 |
392 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { | 420 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { |
393 SerializedPacket serialized_packet(CreateFecPacket(1)); | 421 SerializedPacket serialized_packet(CreateFecPacket(1)); |
394 | 422 |
395 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 423 manager_.OnSerializedPacket(serialized_packet); |
396 // FEC packets do not count as "unacked". | 424 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
397 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | |
398 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | |
399 } | 425 } |
400 | 426 |
401 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { | 427 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { |
402 SerializedPacket serialized_packet(CreatePacket(1)); | 428 SerializedPacket serialized_packet(CreatePacket(1)); |
403 | 429 |
404 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 430 manager_.OnSerializedPacket(serialized_packet); |
405 manager_.DiscardUnackedPacket(1u); | 431 manager_.DiscardUnackedPacket(1u); |
406 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | 432 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); |
407 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 433 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
408 } | 434 } |
409 | 435 |
410 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { | 436 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedPacketAndDiscard) { |
411 VerifyUnackedPackets(NULL, 0); | 437 VerifyUnackedPackets(NULL, 0); |
412 | 438 |
413 SerializedPacket serialized_packet(CreateFecPacket(1)); | 439 SerializedPacket serialized_packet(CreateFecPacket(1)); |
414 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 440 manager_.OnSerializedPacket(serialized_packet); |
415 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 441 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
416 | 442 |
417 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 443 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
418 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); | 444 manager_.OnSerializedPacket(serialized_packet2); |
419 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 445 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
420 | 446 |
421 SerializedPacket serialized_packet3(CreateFecPacket(3)); | 447 SerializedPacket serialized_packet3(CreateFecPacket(3)); |
422 manager_.OnSerializedPacket(serialized_packet3, QuicTime::Zero()); | 448 manager_.OnSerializedPacket(serialized_packet3); |
423 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 449 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
424 | 450 |
425 VerifyUnackedPackets(NULL, 0); | 451 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
| 452 VerifyUnackedPackets(unacked, arraysize(unacked)); |
426 VerifyRetransmittablePackets(NULL, 0); | 453 VerifyRetransmittablePackets(NULL, 0); |
427 | 454 |
428 manager_.DiscardFecPacket(1); | 455 manager_.DiscardUnackedPacket(1); |
429 EXPECT_EQ(2u, manager_.GetLeastUnackedFecPacket()); | 456 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
430 | 457 |
431 // Ack 2. | 458 // Ack 2. |
432 ReceivedPacketInfo received_info; | 459 ReceivedPacketInfo received_info; |
433 received_info.largest_observed = 2; | 460 received_info.largest_observed = 2; |
434 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u)); | |
435 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 461 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
436 | 462 |
437 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); | 463 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); |
438 | 464 |
439 // Discard the 3rd packet and ensure there are no FEC packets. | 465 // Discard the 3rd packet and ensure there are no FEC packets. |
440 manager_.DiscardFecPacket(3); | 466 manager_.DiscardUnackedPacket(3); |
441 EXPECT_FALSE(manager_.HasUnackedFecPackets()); | 467 EXPECT_FALSE(manager_.HasUnackedPackets()); |
442 } | 468 } |
443 | 469 |
444 TEST_F(QuicSentPacketManagerTest, GetFecSentTime) { | 470 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
445 VerifyUnackedPackets(NULL, 0); | 471 VerifyUnackedPackets(NULL, 0); |
446 | 472 |
447 SerializedPacket serialized_packet(CreateFecPacket(1)); | 473 SerializedPacket serialized_packet(CreateFecPacket(1)); |
448 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 474 manager_.OnSerializedPacket(serialized_packet); |
| 475 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _, _)) |
| 476 .Times(1).WillOnce(Return(true)); |
| 477 manager_.OnPacketSent( |
| 478 1, QuicTime::Zero(), 0, NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
449 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 479 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
450 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); | 480 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); |
451 manager_.OnSerializedPacket(serialized_packet2, sent_time); | 481 manager_.OnSerializedPacket(serialized_packet2); |
| 482 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _)) |
| 483 .Times(1).WillOnce(Return(true)); |
| 484 manager_.OnPacketSent( |
| 485 2, sent_time, 0, NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
452 | 486 |
453 VerifyUnackedPackets(NULL, 0); | 487 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 488 VerifyUnackedPackets(unacked, arraysize(unacked)); |
454 VerifyRetransmittablePackets(NULL, 0); | 489 VerifyRetransmittablePackets(NULL, 0); |
455 | 490 |
456 EXPECT_TRUE(manager_.HasUnackedFecPackets()); | 491 EXPECT_TRUE(manager_.HasUnackedPackets()); |
457 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); | 492 EXPECT_EQ(QuicTime::Zero(), |
458 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); | 493 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); |
| 494 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); |
459 } | 495 } |
460 | 496 |
461 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) { | 497 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) { |
462 const size_t kNumSentPackets = 4; | 498 const size_t kNumSentPackets = 4; |
463 // Transmit 4 packets. | 499 // Transmit 4 packets. |
464 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 500 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
465 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 501 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
466 .Times(1).WillOnce(Return(true)); | 502 .Times(1).WillOnce(Return(true)); |
467 manager_.OnPacketSent(i, clock_.Now(), 1000, | 503 manager_.OnPacketSent(i, clock_.Now(), 1000, |
468 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 504 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 received_info.largest_observed = sequence_number; | 819 received_info.largest_observed = sequence_number; |
784 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 820 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
785 manager_.OnIncomingAckFrame(received_info, clock_.Now()); | 821 manager_.OnIncomingAckFrame(received_info, clock_.Now()); |
786 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 822 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); |
787 } | 823 } |
788 | 824 |
789 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { | 825 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
790 // Send 100 packets and then ensure all are abandoned when the RTO fires. | 826 // Send 100 packets and then ensure all are abandoned when the RTO fires. |
791 const size_t kNumSentPackets = 100; | 827 const size_t kNumSentPackets = 100; |
792 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 828 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
793 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 829 SendDataPacket(i); |
794 .Times(1).WillOnce(Return(true)); | |
795 manager_.OnPacketSent(i, clock_.Now(), 1000, | |
796 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | |
797 } | 830 } |
798 | 831 |
799 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
800 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); | 832 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); |
801 | 833 |
| 834 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 835 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
| 836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
802 manager_.OnRetransmissionTimeout(); | 837 manager_.OnRetransmissionTimeout(); |
803 } | 838 } |
804 | 839 |
805 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { | 840 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { |
806 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
807 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(1); | |
808 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 841 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
809 .WillOnce(Return(delay)); | 842 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
810 | 843 |
811 manager_.OnRetransmissionTimeout(); | |
812 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), | 844 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), |
813 manager_.GetRetransmissionDelay()); | 845 manager_.GetRetransmissionDelay()); |
814 } | 846 } |
815 | 847 |
816 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { | 848 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { |
817 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
818 QuicTime::Delta delay = QuicTime::Delta::FromSeconds(500); | |
819 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 849 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
820 .WillOnce(Return(delay)); | 850 .WillOnce(Return(QuicTime::Delta::FromSeconds(500))); |
821 | 851 |
822 manager_.OnRetransmissionTimeout(); | |
823 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), | 852 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), |
824 manager_.GetRetransmissionDelay()); | 853 manager_.GetRetransmissionDelay()); |
825 } | 854 } |
826 | 855 |
827 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { | 856 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { |
| 857 SendDataPacket(1); |
828 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); | 858 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
829 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 859 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
830 .WillRepeatedly(Return(delay)); | 860 .WillRepeatedly(Return(delay)); |
831 | 861 |
832 // Delay should back off exponentially. | 862 // Delay should back off exponentially. |
833 for (int i = 0; i < 5; ++i) { | 863 for (int i = 0; i < 5; ++i) { |
834 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); | 864 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); |
835 delay = delay.Add(delay); | 865 delay = delay.Add(delay); |
| 866 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); |
836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | 867 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
837 manager_.OnRetransmissionTimeout(); | 868 manager_.OnRetransmissionTimeout(); |
| 869 RetransmitNextPacket(i + 2); |
838 } | 870 } |
839 } | 871 } |
840 | 872 |
841 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { | 873 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { |
842 FLAGS_limit_rto_increase_for_tests = true; | 874 FLAGS_limit_rto_increase_for_tests = true; |
843 | 875 |
| 876 SendDataPacket(1); |
844 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); | 877 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
845 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 878 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
846 .WillRepeatedly(Return(delay)); | 879 .WillRepeatedly(Return(delay)); |
847 | 880 |
848 // No backoff for the first 5 retransmissions. | 881 // No backoff for the first 5 retransmissions. |
849 for (int i = 0; i < 5; ++i) { | 882 for (int i = 0; i < 5; ++i) { |
850 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); | 883 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); |
| 884 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); |
851 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | 885 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
852 manager_.OnRetransmissionTimeout(); | 886 manager_.OnRetransmissionTimeout(); |
| 887 RetransmitNextPacket(i + 2); |
853 } | 888 } |
854 | 889 |
855 // Then backoff starts | 890 // Then backoff starts |
856 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); | 891 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); |
857 } | 892 } |
858 | 893 |
859 } // namespace | 894 } // namespace |
860 } // namespace test | 895 } // namespace test |
861 } // namespace net | 896 } // namespace net |
OLD | NEW |