Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(795)

Side by Side Diff: net/quic/quic_sent_packet_manager_test.cc

Issue 114683002: Merge the QUIC unacked packet map with the unacked fec packet map and (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: One more try Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/test_tools/quic_connection_peer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
116 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { 115 void SendDataPacket(QuicPacketSequenceNumber sequence_number) {
117 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _)) 116 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _))
118 .Times(1).WillOnce(Return(true)); 117 .Times(1).WillOnce(Return(true));
119 SerializedPacket packet(CreatePacket(sequence_number)); 118 SerializedPacket packet(CreatePacket(sequence_number));
120 manager_.OnSerializedPacket(packet, clock_.ApproximateNow()); 119 manager_.OnSerializedPacket(packet);
121 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), 120 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
122 packet.packet->length(), NOT_RETRANSMISSION, 121 packet.packet->length(), NOT_RETRANSMISSION,
123 HAS_RETRANSMITTABLE_DATA); 122 HAS_RETRANSMITTABLE_DATA);
124 } 123 }
125 124
126 // Based on QuicConnection's WritePendingRetransmissions. 125 // Based on QuicConnection's WritePendingRetransmissions.
127 void RetransmitNextPacket( 126 void RetransmitNextPacket(
128 QuicPacketSequenceNumber retransmission_sequence_number) { 127 QuicPacketSequenceNumber retransmission_sequence_number) {
129 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 128 EXPECT_TRUE(manager_.HasPendingRetransmissions());
130 EXPECT_CALL(*send_algorithm_, 129 EXPECT_CALL(*send_algorithm_,
(...skipping 13 matching lines...) Expand all
144 vector<QuicPacket*> packets_; 143 vector<QuicPacket*> packets_;
145 MockClock clock_; 144 MockClock clock_;
146 MockSendAlgorithm* send_algorithm_; 145 MockSendAlgorithm* send_algorithm_;
147 }; 146 };
148 147
149 TEST_F(QuicSentPacketManagerTest, IsUnacked) { 148 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
150 VerifyUnackedPackets(NULL, 0); 149 VerifyUnackedPackets(NULL, 0);
151 150
152 SerializedPacket serialized_packet(CreatePacket(1)); 151 SerializedPacket serialized_packet(CreatePacket(1));
153 152
154 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 153 manager_.OnSerializedPacket(serialized_packet);
155 154
156 QuicPacketSequenceNumber unacked[] = { 1 }; 155 QuicPacketSequenceNumber unacked[] = { 1 };
157 VerifyUnackedPackets(unacked, arraysize(unacked)); 156 VerifyUnackedPackets(unacked, arraysize(unacked));
158 QuicPacketSequenceNumber retransmittable[] = { 1 }; 157 QuicPacketSequenceNumber retransmittable[] = { 1 };
159 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 158 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
160 } 159 }
161 160
162 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { 161 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) {
163 SerializedPacket serialized_packet(CreatePacket(1)); 162 SerializedPacket serialized_packet(CreatePacket(1));
164 163
165 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 164 manager_.OnSerializedPacket(serialized_packet);
166 RetransmitPacket(1, 2); 165 RetransmitPacket(1, 2);
167 166
168 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); 167 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2));
169 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 168 QuicPacketSequenceNumber unacked[] = { 1, 2 };
170 VerifyUnackedPackets(unacked, arraysize(unacked)); 169 VerifyUnackedPackets(unacked, arraysize(unacked));
171 QuicPacketSequenceNumber retransmittable[] = { 2 }; 170 QuicPacketSequenceNumber retransmittable[] = { 2 };
172 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 171 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
173 } 172 }
174 173
175 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { 174 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
176 SerializedPacket serialized_packet(CreatePacket(1)); 175 SerializedPacket serialized_packet(CreatePacket(1));
177 176
178 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 177 manager_.OnSerializedPacket(serialized_packet);
179 RetransmitPacket(1, 2); 178 RetransmitPacket(1, 2);
180 179
181 // Ack 2 but not 1. 180 // Ack 2 but not 1.
182 ReceivedPacketInfo received_info; 181 ReceivedPacketInfo received_info;
183 received_info.largest_observed = 2; 182 received_info.largest_observed = 2;
184 received_info.missing_packets.insert(1); 183 received_info.missing_packets.insert(1);
185 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u));
186 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 184 manager_.OnIncomingAck(received_info, QuicTime::Zero());
187 185
188 // No unacked packets remain. 186 // No unacked packets remain.
189 VerifyUnackedPackets(NULL, 0); 187 VerifyUnackedPackets(NULL, 0);
190 VerifyRetransmittablePackets(NULL, 0); 188 VerifyRetransmittablePackets(NULL, 0);
191 } 189 }
192 190
193 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { 191 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) {
194 SerializedPacket serialized_packet(CreatePacket(1)); 192 SerializedPacket serialized_packet(CreatePacket(1));
195 193
196 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 194 manager_.OnSerializedPacket(serialized_packet);
197 QuicSentPacketManagerPeer::MarkForRetransmission( 195 QuicSentPacketManagerPeer::MarkForRetransmission(
198 &manager_, 1, NACK_RETRANSMISSION); 196 &manager_, 1, NACK_RETRANSMISSION);
199 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 197 EXPECT_TRUE(manager_.HasPendingRetransmissions());
200 198
201 // Ack 1. 199 // Ack 1.
202 ReceivedPacketInfo received_info; 200 ReceivedPacketInfo received_info;
203 received_info.largest_observed = 1; 201 received_info.largest_observed = 1;
204 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u));
205 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 202 manager_.OnIncomingAck(received_info, QuicTime::Zero());
206 203
207 // There should no longer be a pending retransmission. 204 // There should no longer be a pending retransmission.
208 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 205 EXPECT_FALSE(manager_.HasPendingRetransmissions());
209 206
210 // No unacked packets remain. 207 // No unacked packets remain.
211 VerifyUnackedPackets(NULL, 0); 208 VerifyUnackedPackets(NULL, 0);
212 VerifyRetransmittablePackets(NULL, 0); 209 VerifyRetransmittablePackets(NULL, 0);
213 } 210 }
214 211
215 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { 212 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) {
216 SerializedPacket serialized_packet(CreatePacket(1)); 213 SerializedPacket serialized_packet(CreatePacket(1));
217 214
218 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 215 manager_.OnSerializedPacket(serialized_packet);
219 RetransmitPacket(1, 2); 216 RetransmitPacket(1, 2);
220 217
221 // Ack 1 but not 2. 218 // Ack 1 but not 2.
222 ReceivedPacketInfo received_info; 219 ReceivedPacketInfo received_info;
223 received_info.largest_observed = 1; 220 received_info.largest_observed = 1;
224 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u));
225 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 221 manager_.OnIncomingAck(received_info, QuicTime::Zero());
226 222
227 // 2 remains unacked, but no packets have retransmittable data. 223 // 2 remains unacked, but no packets have retransmittable data.
228 QuicPacketSequenceNumber unacked[] = { 2 }; 224 QuicPacketSequenceNumber unacked[] = { 2 };
229 VerifyUnackedPackets(unacked, arraysize(unacked)); 225 VerifyUnackedPackets(unacked, arraysize(unacked));
230 VerifyRetransmittablePackets(NULL, 0); 226 VerifyRetransmittablePackets(NULL, 0);
231 227
232 // Verify that if the retransmission alarm does fire to abandon packet 2, 228 // Verify that if the retransmission alarm does fire to abandon packet 2,
233 // the sent packet manager is not notified, since there is no retransmittable 229 // the sent packet manager is not notified, since there is no retransmittable
234 // data outstanding. 230 // data outstanding.
231 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
232 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
235 manager_.OnRetransmissionTimeout(); 233 manager_.OnRetransmissionTimeout();
236 } 234 }
237 235
238 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { 236 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
239 SerializedPacket serialized_packet(CreatePacket(1)); 237 SerializedPacket serialized_packet(CreatePacket(1));
240 238
241 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 239 manager_.OnSerializedPacket(serialized_packet);
242 RetransmitPacket(1, 2); 240 RetransmitPacket(1, 2);
243 RetransmitPacket(2, 3); 241 RetransmitPacket(2, 3);
244 242
245 // Ack 1 but not 2 or 3. 243 // Ack 1 but not 2 or 3.
246 ReceivedPacketInfo received_info; 244 ReceivedPacketInfo received_info;
247 received_info.largest_observed = 1; 245 received_info.largest_observed = 1;
248 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u));
249 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 246 manager_.OnIncomingAck(received_info, QuicTime::Zero());
250 247
251 // 3 remains unacked, but no packets have retransmittable data. 248 // 3 remains unacked, but no packets have retransmittable data.
252 QuicPacketSequenceNumber unacked[] = { 3 }; 249 QuicPacketSequenceNumber unacked[] = { 3 };
253 VerifyUnackedPackets(unacked, arraysize(unacked)); 250 VerifyUnackedPackets(unacked, arraysize(unacked));
254 VerifyRetransmittablePackets(NULL, 0); 251 VerifyRetransmittablePackets(NULL, 0);
255 252
256 // Verify that if the retransmission alarm does fire to abandon packet 3, 253 // Verify that if the retransmission alarm does fire to abandon packet 3,
257 // the sent packet manager is not notified, since there is no retransmittable 254 // the sent packet manager is not notified, since there is no retransmittable
258 // data outstanding. 255 // data outstanding.
256 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
257 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
259 manager_.OnRetransmissionTimeout(); 258 manager_.OnRetransmissionTimeout();
260 } 259 }
261 260
262 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { 261 TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
263 SerializedPacket serialized_packet(CreatePacket(1)); 262 SerializedPacket serialized_packet(CreatePacket(1));
264 263
265 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 264 manager_.OnSerializedPacket(serialized_packet);
266 RetransmitPacket(1, 2); 265 RetransmitPacket(1, 2);
267 RetransmitPacket(2, 3); 266 RetransmitPacket(2, 3);
268 RetransmitPacket(3, 4); 267 RetransmitPacket(3, 4);
269 268
270 // Truncated ack with 2 NACKs 269 // Truncated ack with 2 NACKs
271 ReceivedPacketInfo received_info; 270 ReceivedPacketInfo received_info;
272 received_info.largest_observed = 2; 271 received_info.largest_observed = 2;
273 received_info.missing_packets.insert(1); 272 received_info.missing_packets.insert(1);
274 received_info.missing_packets.insert(2); 273 received_info.missing_packets.insert(2);
275 received_info.is_truncated = true; 274 received_info.is_truncated = true;
276 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(5u));
277 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 275 manager_.OnIncomingAck(received_info, QuicTime::Zero());
278 276
279 // High water mark will be raised. 277 // High water mark will be raised.
280 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; 278 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 };
281 VerifyUnackedPackets(unacked, arraysize(unacked)); 279 VerifyUnackedPackets(unacked, arraysize(unacked));
282 QuicPacketSequenceNumber retransmittable[] = { 4 }; 280 QuicPacketSequenceNumber retransmittable[] = { 4 };
283 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 281 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
284 } 282 }
285 283
286 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { 284 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) {
287 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); 285 manager_.OnSerializedPacket(CreatePacket(1));
288 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); 286 manager_.OnSerializedPacket(CreatePacket(2));
289 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); 287 manager_.OnSerializedPacket(CreatePacket(3));
290 288
291 { 289 {
292 // Ack packets 1 and 3. 290 // Ack packets 1 and 3.
293 ReceivedPacketInfo received_info; 291 ReceivedPacketInfo received_info;
294 received_info.largest_observed = 3; 292 received_info.largest_observed = 3;
295 received_info.missing_packets.insert(2); 293 received_info.missing_packets.insert(2);
296 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u));
297 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 294 manager_.OnIncomingAck(received_info, QuicTime::Zero());
298 295
299 QuicPacketSequenceNumber unacked[] = { 2 }; 296 QuicPacketSequenceNumber unacked[] = { 2 };
300 VerifyUnackedPackets(unacked, arraysize(unacked)); 297 VerifyUnackedPackets(unacked, arraysize(unacked));
301 QuicPacketSequenceNumber retransmittable[] = { 2 }; 298 QuicPacketSequenceNumber retransmittable[] = { 2 };
302 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 299 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
303 } 300 }
304 301
305 manager_.OnSerializedPacket(CreatePacket(4), QuicTime::Zero()); 302 manager_.OnSerializedPacket(CreatePacket(4));
306 manager_.OnSerializedPacket(CreatePacket(5), QuicTime::Zero()); 303 manager_.OnSerializedPacket(CreatePacket(5));
307 304
308 { 305 {
309 // Ack packets 5. 306 // Ack packets 5.
310 ReceivedPacketInfo received_info; 307 ReceivedPacketInfo received_info;
311 received_info.largest_observed = 5; 308 received_info.largest_observed = 5;
312 received_info.missing_packets.insert(2); 309 received_info.missing_packets.insert(2);
313 received_info.missing_packets.insert(4); 310 received_info.missing_packets.insert(4);
314 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(6u));
315 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 311 manager_.OnIncomingAck(received_info, QuicTime::Zero());
316 312
317 QuicPacketSequenceNumber unacked[] = { 2, 4 }; 313 QuicPacketSequenceNumber unacked[] = { 2, 4 };
318 VerifyUnackedPackets(unacked, arraysize(unacked)); 314 VerifyUnackedPackets(unacked, arraysize(unacked));
319 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; 315 QuicPacketSequenceNumber retransmittable[] = { 2, 4 };
320 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 316 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
321 } 317 }
322 318
323 manager_.OnSerializedPacket(CreatePacket(6), QuicTime::Zero()); 319 manager_.OnSerializedPacket(CreatePacket(6));
324 manager_.OnSerializedPacket(CreatePacket(7), QuicTime::Zero()); 320 manager_.OnSerializedPacket(CreatePacket(7));
325 321
326 { 322 {
327 // Ack packets 7. 323 // Ack packets 7.
328 ReceivedPacketInfo received_info; 324 ReceivedPacketInfo received_info;
329 received_info.largest_observed = 7; 325 received_info.largest_observed = 7;
330 received_info.missing_packets.insert(2); 326 received_info.missing_packets.insert(2);
331 received_info.missing_packets.insert(4); 327 received_info.missing_packets.insert(4);
332 received_info.missing_packets.insert(6); 328 received_info.missing_packets.insert(6);
333 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(8u));
334 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 329 manager_.OnIncomingAck(received_info, QuicTime::Zero());
335 330
336 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; 331 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 };
337 VerifyUnackedPackets(unacked, arraysize(unacked)); 332 VerifyUnackedPackets(unacked, arraysize(unacked));
338 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; 333 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 };
339 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 334 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
340 } 335 }
341 336
342 RetransmitPacket(2, 8); 337 RetransmitPacket(2, 8);
343 manager_.OnSerializedPacket(CreatePacket(9), QuicTime::Zero()); 338 manager_.OnSerializedPacket(CreatePacket(9));
344 manager_.OnSerializedPacket(CreatePacket(10), QuicTime::Zero()); 339 manager_.OnSerializedPacket(CreatePacket(10));
345 340
346 { 341 {
347 // Ack packet 10. 342 // Ack packet 10.
348 ReceivedPacketInfo received_info; 343 ReceivedPacketInfo received_info;
349 received_info.largest_observed = 10; 344 received_info.largest_observed = 10;
350 received_info.missing_packets.insert(2); 345 received_info.missing_packets.insert(2);
351 received_info.missing_packets.insert(4); 346 received_info.missing_packets.insert(4);
352 received_info.missing_packets.insert(6); 347 received_info.missing_packets.insert(6);
353 received_info.missing_packets.insert(8); 348 received_info.missing_packets.insert(8);
354 received_info.missing_packets.insert(9); 349 received_info.missing_packets.insert(9);
355 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(11u));
356 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 350 manager_.OnIncomingAck(received_info, QuicTime::Zero());
357 351
358 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; 352 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 };
359 VerifyUnackedPackets(unacked, arraysize(unacked)); 353 VerifyUnackedPackets(unacked, arraysize(unacked));
360 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; 354 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 };
361 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 355 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
362 } 356 }
363 357
364 358
365 RetransmitPacket(4, 11); 359 RetransmitPacket(4, 11);
366 manager_.OnSerializedPacket(CreatePacket(12), QuicTime::Zero()); 360 manager_.OnSerializedPacket(CreatePacket(12));
367 manager_.OnSerializedPacket(CreatePacket(13), QuicTime::Zero()); 361 manager_.OnSerializedPacket(CreatePacket(13));
368 362
369 { 363 {
370 // Ack packet 13. 364 // Ack packet 13.
371 ReceivedPacketInfo received_info; 365 ReceivedPacketInfo received_info;
372 received_info.largest_observed = 13; 366 received_info.largest_observed = 13;
373 received_info.missing_packets.insert(2); 367 received_info.missing_packets.insert(2);
374 received_info.missing_packets.insert(4); 368 received_info.missing_packets.insert(4);
375 received_info.missing_packets.insert(6); 369 received_info.missing_packets.insert(6);
376 received_info.missing_packets.insert(8); 370 received_info.missing_packets.insert(8);
377 received_info.missing_packets.insert(9); 371 received_info.missing_packets.insert(9);
378 received_info.missing_packets.insert(11); 372 received_info.missing_packets.insert(11);
379 received_info.missing_packets.insert(12); 373 received_info.missing_packets.insert(12);
380 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(14u));
381 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 374 manager_.OnIncomingAck(received_info, QuicTime::Zero());
382 375
383 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; 376 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 };
384 VerifyUnackedPackets(unacked, arraysize(unacked)); 377 VerifyUnackedPackets(unacked, arraysize(unacked));
385 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; 378 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 };
386 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 379 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
387 } 380 }
388 381
389 RetransmitPacket(6, 14); 382 RetransmitPacket(6, 14);
390 manager_.OnSerializedPacket(CreatePacket(15), QuicTime::Zero()); 383 manager_.OnSerializedPacket(CreatePacket(15));
391 manager_.OnSerializedPacket(CreatePacket(16), QuicTime::Zero()); 384 manager_.OnSerializedPacket(CreatePacket(16));
392 385
393 { 386 {
394 // Ack packet 16. 387 // Ack packet 16.
395 ReceivedPacketInfo received_info; 388 ReceivedPacketInfo received_info;
396 received_info.largest_observed = 13; 389 received_info.largest_observed = 13;
397 received_info.missing_packets.insert(2); 390 received_info.missing_packets.insert(2);
398 received_info.missing_packets.insert(4); 391 received_info.missing_packets.insert(4);
399 received_info.missing_packets.insert(6); 392 received_info.missing_packets.insert(6);
400 received_info.missing_packets.insert(8); 393 received_info.missing_packets.insert(8);
401 received_info.missing_packets.insert(9); 394 received_info.missing_packets.insert(9);
402 received_info.missing_packets.insert(11); 395 received_info.missing_packets.insert(11);
403 received_info.missing_packets.insert(12); 396 received_info.missing_packets.insert(12);
404 received_info.is_truncated = true; 397 received_info.is_truncated = true;
405 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(17u));
406 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 398 manager_.OnIncomingAck(received_info, QuicTime::Zero());
407 399
408 // 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.
409 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; 401 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 };
410 VerifyUnackedPackets(unacked, arraysize(unacked)); 402 VerifyUnackedPackets(unacked, arraysize(unacked));
411 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; 403 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 };
412 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 404 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
413 } 405 }
414 } 406 }
415 407
416 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { 408 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) {
417 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); 409 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u));
418 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); 410 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
419 } 411 }
420 412
421 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { 413 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) {
422 SerializedPacket serialized_packet(CreatePacket(1)); 414 SerializedPacket serialized_packet(CreatePacket(1));
423 415
424 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 416 manager_.OnSerializedPacket(serialized_packet);
425 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); 417 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
426 } 418 }
427 419
428 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { 420 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) {
429 SerializedPacket serialized_packet(CreateFecPacket(1)); 421 SerializedPacket serialized_packet(CreateFecPacket(1));
430 422
431 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 423 manager_.OnSerializedPacket(serialized_packet);
432 // FEC packets do not count as "unacked". 424 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
433 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u));
434 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket());
435 } 425 }
436 426
437 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { 427 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) {
438 SerializedPacket serialized_packet(CreatePacket(1)); 428 SerializedPacket serialized_packet(CreatePacket(1));
439 429
440 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 430 manager_.OnSerializedPacket(serialized_packet);
441 manager_.DiscardUnackedPacket(1u); 431 manager_.DiscardUnackedPacket(1u);
442 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); 432 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u));
443 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); 433 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket());
444 } 434 }
445 435
446 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { 436 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedPacketAndDiscard) {
447 VerifyUnackedPackets(NULL, 0); 437 VerifyUnackedPackets(NULL, 0);
448 438
449 SerializedPacket serialized_packet(CreateFecPacket(1)); 439 SerializedPacket serialized_packet(CreateFecPacket(1));
450 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 440 manager_.OnSerializedPacket(serialized_packet);
451 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); 441 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
452 442
453 SerializedPacket serialized_packet2(CreateFecPacket(2)); 443 SerializedPacket serialized_packet2(CreateFecPacket(2));
454 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); 444 manager_.OnSerializedPacket(serialized_packet2);
455 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); 445 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
456 446
457 SerializedPacket serialized_packet3(CreateFecPacket(3)); 447 SerializedPacket serialized_packet3(CreateFecPacket(3));
458 manager_.OnSerializedPacket(serialized_packet3, QuicTime::Zero()); 448 manager_.OnSerializedPacket(serialized_packet3);
459 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); 449 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
460 450
461 VerifyUnackedPackets(NULL, 0); 451 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 };
452 VerifyUnackedPackets(unacked, arraysize(unacked));
462 VerifyRetransmittablePackets(NULL, 0); 453 VerifyRetransmittablePackets(NULL, 0);
463 454
464 manager_.DiscardFecPacket(1); 455 manager_.DiscardUnackedPacket(1);
465 EXPECT_EQ(2u, manager_.GetLeastUnackedFecPacket()); 456 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket());
466 457
467 // Ack 2. 458 // Ack 2.
468 ReceivedPacketInfo received_info; 459 ReceivedPacketInfo received_info;
469 received_info.largest_observed = 2; 460 received_info.largest_observed = 2;
470 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u));
471 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 461 manager_.OnIncomingAck(received_info, QuicTime::Zero());
472 462
473 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); 463 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket());
474 464
475 // Discard the 3rd packet and ensure there are no FEC packets. 465 // Discard the 3rd packet and ensure there are no FEC packets.
476 manager_.DiscardFecPacket(3); 466 manager_.DiscardUnackedPacket(3);
477 EXPECT_FALSE(manager_.HasUnackedFecPackets()); 467 EXPECT_FALSE(manager_.HasUnackedPackets());
478 } 468 }
479 469
480 TEST_F(QuicSentPacketManagerTest, GetFecSentTime) { 470 TEST_F(QuicSentPacketManagerTest, GetSentTime) {
481 VerifyUnackedPackets(NULL, 0); 471 VerifyUnackedPackets(NULL, 0);
482 472
483 SerializedPacket serialized_packet(CreateFecPacket(1)); 473 SerializedPacket serialized_packet(CreateFecPacket(1));
484 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);
485 SerializedPacket serialized_packet2(CreateFecPacket(2)); 479 SerializedPacket serialized_packet2(CreateFecPacket(2));
486 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); 480 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1));
487 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);
488 486
489 VerifyUnackedPackets(NULL, 0); 487 QuicPacketSequenceNumber unacked[] = { 1, 2 };
488 VerifyUnackedPackets(unacked, arraysize(unacked));
490 VerifyRetransmittablePackets(NULL, 0); 489 VerifyRetransmittablePackets(NULL, 0);
491 490
492 EXPECT_TRUE(manager_.HasUnackedFecPackets()); 491 EXPECT_TRUE(manager_.HasUnackedPackets());
493 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); 492 EXPECT_EQ(QuicTime::Zero(),
494 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); 493 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1));
494 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
495 } 495 }
496 496
497 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) { 497 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) {
498 const size_t kNumSentPackets = 4; 498 const size_t kNumSentPackets = 4;
499 // Transmit 4 packets. 499 // Transmit 4 packets.
500 for (size_t i = 1; i <= kNumSentPackets; ++i) { 500 for (size_t i = 1; i <= kNumSentPackets; ++i) {
501 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 501 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
502 .Times(1).WillOnce(Return(true)); 502 .Times(1).WillOnce(Return(true));
503 manager_.OnPacketSent(i, clock_.Now(), 1000, 503 manager_.OnPacketSent(i, clock_.Now(), 1000,
504 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 504 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 received_info.largest_observed = sequence_number; 819 received_info.largest_observed = sequence_number;
820 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 820 received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
821 manager_.OnIncomingAckFrame(received_info, clock_.Now()); 821 manager_.OnIncomingAckFrame(received_info, clock_.Now());
822 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); 822 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_));
823 } 823 }
824 824
825 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 825 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
826 // 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.
827 const size_t kNumSentPackets = 100; 827 const size_t kNumSentPackets = 100;
828 for (size_t i = 1; i <= kNumSentPackets; ++i) { 828 for (size_t i = 1; i <= kNumSentPackets; ++i) {
829 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 829 SendDataPacket(i);
830 .Times(1).WillOnce(Return(true));
831 manager_.OnPacketSent(i, clock_.Now(), 1000,
832 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
833 } 830 }
834 831
835 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); 832 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets);
836 833
834 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
835 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
837 manager_.OnRetransmissionTimeout(); 837 manager_.OnRetransmissionTimeout();
838 } 838 }
839 839
840 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { 840 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) {
841 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(1);
842 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 841 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
843 .WillOnce(Return(delay)); 842 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
844 843
845 manager_.OnRetransmissionTimeout();
846 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), 844 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200),
847 manager_.GetRetransmissionDelay()); 845 manager_.GetRetransmissionDelay());
848 } 846 }
849 847
850 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { 848 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) {
851 QuicTime::Delta delay = QuicTime::Delta::FromSeconds(500);
852 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 849 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
853 .WillOnce(Return(delay)); 850 .WillOnce(Return(QuicTime::Delta::FromSeconds(500)));
854 851
855 manager_.OnRetransmissionTimeout();
856 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), 852 EXPECT_EQ(QuicTime::Delta::FromSeconds(60),
857 manager_.GetRetransmissionDelay()); 853 manager_.GetRetransmissionDelay());
858 } 854 }
859 855
860 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { 856 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) {
861 SendDataPacket(1); 857 SendDataPacket(1);
862 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); 858 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
863 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 859 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
864 .WillRepeatedly(Return(delay)); 860 .WillRepeatedly(Return(delay));
865 861
(...skipping 25 matching lines...) Expand all
891 RetransmitNextPacket(i + 2); 887 RetransmitNextPacket(i + 2);
892 } 888 }
893 889
894 // Then backoff starts 890 // Then backoff starts
895 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); 891 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay());
896 } 892 }
897 893
898 } // namespace 894 } // namespace
899 } // namespace test 895 } // namespace test
900 } // namespace net 896 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/test_tools/quic_connection_peer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698