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

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

Issue 11416155: Adding transmission times for every QUIC packet received in the AckFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Done Created 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "net/base/net_errors.h" 7 #include "net/base/net_errors.h"
8 #include "net/quic/congestion_control/quic_receipt_metrics_collector.h" 8 #include "net/quic/congestion_control/quic_receipt_metrics_collector.h"
9 #include "net/quic/congestion_control/quic_send_scheduler.h" 9 #include "net/quic/congestion_control/quic_send_scheduler.h"
10 #include "net/quic/crypto/quic_decrypter.h" 10 #include "net/quic/crypto/quic_decrypter.h"
11 #include "net/quic/crypto/quic_encrypter.h" 11 #include "net/quic/crypto/quic_encrypter.h"
12 #include "net/quic/test_tools/mock_clock.h" 12 #include "net/quic/test_tools/mock_clock.h"
13 #include "net/quic/test_tools/quic_test_utils.h" 13 #include "net/quic/test_tools/quic_test_utils.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 //DECLARE_int32(fake_packet_loss_percentage); 17 //DECLARE_int32(fake_packet_loss_percentage);
18 18
19 using base::StringPiece;
19 using std::map; 20 using std::map;
20 using testing::_; 21 using testing::_;
21 using testing::ContainerEq; 22 using testing::ContainerEq;
22 using testing::Return; 23 using testing::Return;
24 using testing::StrictMock;
23 25
24 namespace net { 26 namespace net {
25 27
26 // Peer to make public a number of otherwise private QuicConnection methods. 28 // Peer to make public a number of otherwise private QuicConnection methods.
27 class QuicConnectionPeer { 29 class QuicConnectionPeer {
28 public: 30 public:
29 static void SendAck(QuicConnection* connection) { 31 static void SendAck(QuicConnection* connection) {
30 connection->SendAck(); 32 connection->SendAck();
31 } 33 }
32 34
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 private: 182 private:
181 DISALLOW_COPY_AND_ASSIGN(TestConnection); 183 DISALLOW_COPY_AND_ASSIGN(TestConnection);
182 }; 184 };
183 185
184 class QuicConnectionTest : public ::testing::Test { 186 class QuicConnectionTest : public ::testing::Test {
185 protected: 187 protected:
186 QuicConnectionTest() 188 QuicConnectionTest()
187 : guid_(42), 189 : guid_(42),
188 framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)), 190 framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)),
189 creator_(guid_, &framer_), 191 creator_(guid_, &framer_),
190 scheduler_(new MockScheduler()), 192 scheduler_(new StrictMock<MockScheduler>),
191 helper_(new TestConnectionHelper(&clock_)), 193 helper_(new TestConnectionHelper(&clock_)),
192 connection_(guid_, IPEndPoint(), helper_), 194 connection_(guid_, IPEndPoint(), helper_),
193 frame1_(1, false, 0, data1), 195 frame1_(1, false, 0, data1),
194 frame2_(1, false, 3, data2), 196 frame2_(1, false, 3, data2),
195 accept_packet_(true) { 197 accept_packet_(true) {
196 connection_.set_visitor(&visitor_); 198 connection_.set_visitor(&visitor_);
197 connection_.SetScheduler(scheduler_); 199 connection_.SetScheduler(scheduler_);
198 EXPECT_CALL(*scheduler_, TimeUntilSend(_)).WillRepeatedly(Return( 200 EXPECT_CALL(*scheduler_, TimeUntilSend(_)).WillRepeatedly(Return(
199 QuicTime::Delta())); 201 QuicTime::Delta()));
200 } 202 }
201 203
202 QuicAckFrame* last_frame() { 204 QuicAckFrame* last_frame() {
203 return helper_->frame(); 205 return helper_->frame();
204 } 206 }
205 207
206 QuicPacketHeader* last_header() { 208 QuicPacketHeader* last_header() {
207 return helper_->header(); 209 return helper_->header();
208 } 210 }
209 211
210 void ProcessPacket(QuicPacketSequenceNumber number) { 212 void ProcessPacket(QuicPacketSequenceNumber number) {
211 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)) 213 EXPECT_CALL(visitor_, OnPacket(_, _, _, _))
212 .WillOnce(Return(accept_packet_)); 214 .WillOnce(Return(accept_packet_));
215 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
213 ProcessDataPacket(number, 0); 216 ProcessDataPacket(number, 0);
214 } 217 }
215 218
216 void ProcessFecProtectedPacket(QuicPacketSequenceNumber number, 219 void ProcessFecProtectedPacket(QuicPacketSequenceNumber number,
217 bool expect_revival) { 220 bool expect_revival) {
218 if (expect_revival) { 221 if (expect_revival) {
219 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).Times(2).WillRepeatedly( 222 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).Times(2).WillRepeatedly(
220 Return(accept_packet_)); 223 Return(accept_packet_));
224 EXPECT_CALL(*scheduler_, SentPacket(_, _, _)).Times(2);
221 } else { 225 } else {
222 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce( 226 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(
223 Return(accept_packet_)); 227 Return(accept_packet_));
228 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
224 } 229 }
225 ProcessDataPacket(number, 1); 230 ProcessDataPacket(number, 1);
226 } 231 }
227 232
228 void ProcessDataPacket(QuicPacketSequenceNumber number, 233 void ProcessDataPacket(QuicPacketSequenceNumber number,
229 QuicFecGroupNumber fec_group) { 234 QuicFecGroupNumber fec_group) {
230 scoped_ptr<QuicPacket> packet(ConstructDataPacket(number, fec_group)); 235 scoped_ptr<QuicPacket> packet(ConstructDataPacket(number, fec_group));
231 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(*packet)); 236 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(*packet));
232 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 237 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
233 } 238 }
234 239
235 // Sends an FEC packet that covers the packets that would have been sent. 240 // Sends an FEC packet that covers the packets that would have been sent.
236 void ProcessFecPacket(QuicPacketSequenceNumber number, 241 void ProcessFecPacket(QuicPacketSequenceNumber number,
237 QuicPacketSequenceNumber min_protected_packet, 242 QuicPacketSequenceNumber min_protected_packet,
238 bool expect_revival) { 243 bool expect_revival) {
239 if (expect_revival) { 244 if (expect_revival) {
240 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce( 245 EXPECT_CALL(visitor_, OnPacket(_, _, _, _)).WillOnce(
241 Return(accept_packet_)); 246 Return(accept_packet_));
247 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
242 } 248 }
243 249
244 // Construct the decrypted data packet so we can compute the correct 250 // Construct the decrypted data packet so we can compute the correct
245 // redundancy. 251 // redundancy.
246 scoped_ptr<QuicPacket> data_packet(ConstructDataPacket(number, 1)); 252 scoped_ptr<QuicPacket> data_packet(ConstructDataPacket(number, 1));
247 253
248 header_.guid = guid_; 254 header_.guid = guid_;
249 header_.packet_sequence_number = number; 255 header_.packet_sequence_number = number;
250 header_.flags = PACKET_FLAGS_FEC; 256 header_.flags = PACKET_FLAGS_FEC;
251 header_.fec_group = 1; 257 header_.fec_group = 1;
(...skipping 12 matching lines...) Expand all
264 fec_data.redundancy = data_packet->FecProtectedData(); 270 fec_data.redundancy = data_packet->FecProtectedData();
265 QuicPacket* fec_packet; 271 QuicPacket* fec_packet;
266 framer_.ConstructFecPacket(header_, fec_data, &fec_packet); 272 framer_.ConstructFecPacket(header_, fec_data, &fec_packet);
267 scoped_ptr<QuicEncryptedPacket> encrypted( 273 scoped_ptr<QuicEncryptedPacket> encrypted(
268 framer_.EncryptPacket(*fec_packet)); 274 framer_.EncryptPacket(*fec_packet));
269 275
270 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 276 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
271 delete fec_packet; 277 delete fec_packet;
272 } 278 }
273 279
280 void SendStreamDataToPeer(QuicStreamId id, StringPiece data,
281 QuicStreamOffset offset, bool fin,
jar (doing other things) 2012/11/30 16:50:33 nit: indent also... (chromium style): put each ar
Ian Swett 2012/12/04 21:40:19 Already fixed in HEAD.
282 QuicPacketSequenceNumber* last_packet) {
283 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
284 connection_.SendStreamData(id, data, offset, fin, last_packet);
285 }
274 286
275 void SendAckPacket(QuicAckFrame* frame) { 287 void SendAckPacketToPeer() {
288 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
289 connection_.SendAck();
290 }
291
292 void ProcessAckPacket(QuicAckFrame* frame, bool expect_success = true) {
293 if (expect_success) {
294 EXPECT_CALL(*scheduler_, OnIncomingAckFrame(_));
295 }
276 scoped_ptr<QuicPacket> packet(creator_.AckPacket(frame).second); 296 scoped_ptr<QuicPacket> packet(creator_.AckPacket(frame).second);
277 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(*packet)); 297 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(*packet));
278 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 298 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
279 } 299 }
280 300
281 void SendAckPacket(QuicPacketSequenceNumber least_unacked) {
282 QuicAckFrame frame(0, QuicTime(), least_unacked);
283 SendAckPacket(&frame);
284 }
285
286 bool IsMissing(QuicPacketSequenceNumber number) { 301 bool IsMissing(QuicPacketSequenceNumber number) {
287 return last_frame()->received_info.missing_packets.find(number) != 302 return !last_frame()->received_info.ContainsAck(number);
288 last_frame()->received_info.missing_packets.end();
289 }
290
291 size_t NonRetransmittingSize() {
292 return last_frame()->sent_info.non_retransmiting.size();
293 }
294
295 bool NonRetransmitting(QuicPacketSequenceNumber number) {
296 return last_frame()->sent_info.non_retransmiting.find(number) !=
297 last_frame()->sent_info.non_retransmiting.end();
298 } 303 }
299 304
300 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, 305 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number,
301 QuicFecGroupNumber fec_group) { 306 QuicFecGroupNumber fec_group) {
302 header_.guid = guid_; 307 header_.guid = guid_;
303 header_.packet_sequence_number = number; 308 header_.packet_sequence_number = number;
304 header_.flags = PACKET_FLAGS_NONE; 309 header_.flags = PACKET_FLAGS_NONE;
305 header_.fec_group = fec_group; 310 header_.fec_group = fec_group;
306 311
307 QuicFrames frames; 312 QuicFrames frames;
(...skipping 19 matching lines...) Expand all
327 QuicStreamFrame frame2_; 332 QuicStreamFrame frame2_;
328 bool accept_packet_; 333 bool accept_packet_;
329 334
330 private: 335 private:
331 DISALLOW_COPY_AND_ASSIGN(QuicConnectionTest); 336 DISALLOW_COPY_AND_ASSIGN(QuicConnectionTest);
332 }; 337 };
333 338
334 TEST_F(QuicConnectionTest, PacketsInOrder) { 339 TEST_F(QuicConnectionTest, PacketsInOrder) {
335 ProcessPacket(1); 340 ProcessPacket(1);
336 EXPECT_EQ(1u, last_frame()->received_info.largest_received); 341 EXPECT_EQ(1u, last_frame()->received_info.largest_received);
337 EXPECT_EQ(0u, last_frame()->received_info.missing_packets.size()); 342 EXPECT_EQ(1u, last_frame()->received_info.received_packet_times.size());
jar (doing other things) 2012/11/30 16:50:33 Wouldn't it still be reasonable to check the missi
Ian Swett 2012/12/04 21:40:19 Done in current version now that missing_packets h
338 343
339 ProcessPacket(2); 344 ProcessPacket(2);
340 EXPECT_EQ(2u, last_frame()->received_info.largest_received); 345 EXPECT_EQ(2u, last_frame()->received_info.largest_received);
341 EXPECT_EQ(0u, last_frame()->received_info.missing_packets.size()); 346 EXPECT_EQ(2u, last_frame()->received_info.received_packet_times.size());
342 347
343 ProcessPacket(3); 348 ProcessPacket(3);
344 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 349 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
345 EXPECT_EQ(0u, last_frame()->received_info.missing_packets.size()); 350 EXPECT_EQ(3u, last_frame()->received_info.received_packet_times.size());
346 } 351 }
347 352
348 TEST_F(QuicConnectionTest, PacketsRejected) { 353 TEST_F(QuicConnectionTest, PacketsRejected) {
349 ProcessPacket(1); 354 ProcessPacket(1);
350 EXPECT_EQ(1u, last_frame()->received_info.largest_received); 355 EXPECT_EQ(1u, last_frame()->received_info.largest_received);
351 EXPECT_EQ(0u, last_frame()->received_info.missing_packets.size()); 356 EXPECT_EQ(1u, last_frame()->received_info.received_packet_times.size());
352 357
353 accept_packet_ = false; 358 accept_packet_ = false;
354 ProcessPacket(2); 359 ProcessPacket(2);
355 // We should not have an ack for two. 360 // We should not have an ack for two.
356 EXPECT_EQ(1u, last_frame()->received_info.largest_received); 361 EXPECT_EQ(1u, last_frame()->received_info.largest_received);
357 EXPECT_EQ(0u, last_frame()->received_info.missing_packets.size()); 362 EXPECT_EQ(1u, last_frame()->received_info.received_packet_times.size());
358 } 363 }
359 364
360 TEST_F(QuicConnectionTest, PacketsOutOfOrder) { 365 TEST_F(QuicConnectionTest, PacketsOutOfOrder) {
361 ProcessPacket(3); 366 ProcessPacket(3);
362 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 367 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
363 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size()); 368 EXPECT_EQ(1u, last_frame()->received_info.received_packet_times.size());
364 EXPECT_TRUE(IsMissing(2)); 369 EXPECT_TRUE(IsMissing(2));
365 EXPECT_TRUE(IsMissing(1)); 370 EXPECT_TRUE(IsMissing(1));
366 371
367 ProcessPacket(2); 372 ProcessPacket(2);
368 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 373 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
369 EXPECT_EQ(1u, last_frame()->received_info.missing_packets.size()); 374 EXPECT_EQ(2u, last_frame()->received_info.received_packet_times.size());
370 EXPECT_TRUE(IsMissing(1)); 375 EXPECT_TRUE(IsMissing(1));
371 376
372 ProcessPacket(1); 377 ProcessPacket(1);
373 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 378 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
374 EXPECT_EQ(0u, last_frame()->received_info.missing_packets.size()); 379 EXPECT_EQ(3u, last_frame()->received_info.received_packet_times.size());
375 } 380 }
376 381
377 TEST_F(QuicConnectionTest, DuplicatePacket) { 382 TEST_F(QuicConnectionTest, DuplicatePacket) {
378 ProcessPacket(3); 383 ProcessPacket(3);
379 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 384 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
380 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size()); 385 EXPECT_EQ(1u, last_frame()->received_info.received_packet_times.size());
381 EXPECT_TRUE(IsMissing(2)); 386 EXPECT_TRUE(IsMissing(2));
382 EXPECT_TRUE(IsMissing(1)); 387 EXPECT_TRUE(IsMissing(1));
383 388
384 // Send packet 3 again, but do not set the expectation that 389 // Send packet 3 again, but do not set the expectation that
385 // the visitor OnPacket() will be called. 390 // the visitor OnPacket() will be called.
386 ProcessDataPacket(3, 0); 391 ProcessDataPacket(3, 0);
387 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 392 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
388 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size()); 393 EXPECT_EQ(1u, last_frame()->received_info.received_packet_times.size());
389 EXPECT_TRUE(IsMissing(2)); 394 EXPECT_TRUE(IsMissing(2));
390 EXPECT_TRUE(IsMissing(1)); 395 EXPECT_TRUE(IsMissing(1));
391 } 396 }
392 397
393 TEST_F(QuicConnectionTest, LatePacketMarkedWillNotResend) { 398 TEST_F(QuicConnectionTest, PacketsOutOfOrderWithAdditionsAndLeastAwaiting) {
394 ProcessPacket(5);
395 // Now send non-resending information, that we're not going to resend 3.
396 // The far end should stop waiting for it.
397 QuicPacketSequenceNumber largest_received = 0;
398 QuicTime time_received;
399 QuicPacketSequenceNumber least_unacked = 1;
400 QuicAckFrame frame(largest_received, time_received, least_unacked);
401 frame.sent_info.non_retransmiting.insert(3);
402 SendAckPacket(&frame);
403 // Force an ack to be sent.
404 connection_.SendAck();
405 EXPECT_EQ(5u, last_frame()->received_info.largest_received);
406 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size());
407 EXPECT_TRUE(IsMissing(4));
408 EXPECT_TRUE(IsMissing(2));
409
410 // Send packet 3 again, but do not set the expectation that
411 // the visitor OnPacket() will be called.
412 ProcessDataPacket(3, 0);
413 connection_.SendAck();
414 EXPECT_EQ(5u, last_frame()->received_info.largest_received);
415 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size());
416 EXPECT_TRUE(IsMissing(4));
417 EXPECT_TRUE(IsMissing(2));
418 }
419
420 TEST_F(QuicConnectionTest, PacketsOutOfOrderWithAdditionsAndNonResend) {
421 ProcessPacket(3); 399 ProcessPacket(3);
422 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 400 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
423 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size()); 401 EXPECT_EQ(1u, last_frame()->received_info.received_packet_times.size());
424 EXPECT_TRUE(IsMissing(2)); 402 EXPECT_TRUE(IsMissing(2));
425 EXPECT_TRUE(IsMissing(1)); 403 EXPECT_TRUE(IsMissing(1));
426 404
427 ProcessPacket(2); 405 ProcessPacket(2);
428 EXPECT_EQ(3u, last_frame()->received_info.largest_received); 406 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
429 EXPECT_EQ(1u, last_frame()->received_info.missing_packets.size()); 407 EXPECT_EQ(2u, last_frame()->received_info.received_packet_times.size());
430 EXPECT_TRUE(IsMissing(1));
431
432 ProcessPacket(6);
433 EXPECT_EQ(6u, last_frame()->received_info.largest_received);
434 EXPECT_EQ(3u, last_frame()->received_info.missing_packets.size());
435 EXPECT_TRUE(IsMissing(1));
436 EXPECT_TRUE(IsMissing(4));
437 EXPECT_TRUE(IsMissing(5));
438
439 // Now send non-resending information, that we're not going to resend 4.
440 // The far end should stop waiting for it.
441 // In sending the ack, we also have sent packet 1, so we'll stop waiting for
442 // that as well.
443 QuicAckFrame frame(0, QuicTime(), 1);
444 frame.sent_info.non_retransmiting.insert(4);
445 SendAckPacket(&frame);
446 // Force an ack to be sent.
447 connection_.SendAck();
448 EXPECT_EQ(1u, last_frame()->received_info.missing_packets.size());
449 EXPECT_TRUE(IsMissing(5));
450 }
451
452 TEST_F(QuicConnectionTest, PacketsOutOfOrderWithAdditionsAndLeastAwaiting) {
453 ProcessPacket(3);
454 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
455 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size());
456 EXPECT_TRUE(IsMissing(2));
457 EXPECT_TRUE(IsMissing(1));
458
459 ProcessPacket(2);
460 EXPECT_EQ(3u, last_frame()->received_info.largest_received);
461 EXPECT_EQ(1u, last_frame()->received_info.missing_packets.size());
462 EXPECT_TRUE(IsMissing(1)); 408 EXPECT_TRUE(IsMissing(1));
463 409
464 ProcessPacket(5); 410 ProcessPacket(5);
465 EXPECT_EQ(5u, last_frame()->received_info.largest_received); 411 EXPECT_EQ(5u, last_frame()->received_info.largest_received);
466 EXPECT_EQ(2u, last_frame()->received_info.missing_packets.size()); 412 EXPECT_EQ(3u, last_frame()->received_info.received_packet_times.size());
467 EXPECT_TRUE(IsMissing(1)); 413 EXPECT_TRUE(IsMissing(1));
468 EXPECT_TRUE(IsMissing(4)); 414 EXPECT_TRUE(IsMissing(4));
469 415
470 // Pretend at this point the client has gotten acks for 2 and 3 and 1 is a 416 // Pretend at this point the client has gotten acks for 2 and 3 and 1 is a
471 // packet the peer will not retransmit. It indicates this by sending 'least 417 // packet the peer will not retransmit. It indicates this by sending 'least
472 // awaiting' is 4. The connection should then realize 1 will not be 418 // awaiting' is 4. The connection should then realize 1 will not be
473 // retransmitted, and will remove it from the missing list. 419 // retransmitted, and will remove it from the missing list.
474 QuicAckFrame frame(0, QuicTime(), 4); 420 QuicAckFrame frame(0, QuicTime(), 4);
475 SendAckPacket(&frame); 421 ProcessAckPacket(&frame);
476 // Force an ack to be sent. 422 // Force an ack to be sent.
477 connection_.SendAck(); 423 SendAckPacketToPeer();
478 EXPECT_EQ(1u, last_frame()->received_info.missing_packets.size()); 424 EXPECT_EQ(2u, last_frame()->received_info.received_packet_times.size());
479 EXPECT_TRUE(IsMissing(4)); 425 EXPECT_TRUE(IsMissing(4));
480 } 426 }
481 427
482 TEST_F(QuicConnectionTest, RejectPacketTooFarOut) { 428 TEST_F(QuicConnectionTest, RejectPacketTooFarOut) {
483 // Call ProcessDataPacket rather than ProcessPacket, as we should not get a 429 // Call ProcessDataPacket rather than ProcessPacket, as we should not get a
484 // packet call to the visitor. 430 // packet call to the visitor.
485 ProcessDataPacket(6000, 0);; 431 ProcessDataPacket(6000, 0);
486 432
487 connection_.SendAck(); // Packet 2 433 SendAckPacketToPeer(); // Packet 2
488 EXPECT_EQ(0u, last_frame()->received_info.largest_received); 434 EXPECT_EQ(0u, last_frame()->received_info.largest_received);
489 } 435 }
490 436
491 TEST_F(QuicConnectionTest, LeastUnackedLower) { 437 TEST_F(QuicConnectionTest, LeastUnackedLower) {
492 connection_.SendStreamData(1, "foo", 0, false, NULL); 438 SendStreamDataToPeer(1, "foo", 0, false, NULL);
493 connection_.SendStreamData(1, "bar", 3, false, NULL); 439 SendStreamDataToPeer(1, "bar", 3, false, NULL);
494 connection_.SendStreamData(1, "eep", 6, false, NULL); 440 SendStreamDataToPeer(1, "eep", 6, false, NULL);
495 441
496 // Start out saying the least unacked is 2 442 // Start out saying the least unacked is 2
497 creator_.set_sequence_number(5); 443 creator_.set_sequence_number(5);
498 QuicAckFrame frame(0, QuicTime(), 2); 444 QuicAckFrame frame(0, QuicTime(), 2);
499 SendAckPacket(&frame); 445 ProcessAckPacket(&frame);
500 446
501 // Change it to 1, but lower the sequence number to fake out-of-order packets. 447 // Change it to 1, but lower the sequence number to fake out-of-order packets.
502 // This should be fine. 448 // This should be fine.
503 creator_.set_sequence_number(1); 449 creator_.set_sequence_number(1);
504 QuicAckFrame frame2(0, QuicTime(), 1); 450 QuicAckFrame frame2(0, QuicTime(), 1);
505 SendAckPacket(&frame2); 451 // The scheduler will not process out of order acks.
452 ProcessAckPacket(&frame2, false);
506 453
507 // Now claim it's one, but set the ordering so it was sent "after" the first 454 // Now claim it's one, but set the ordering so it was sent "after" the first
508 // one. This should cause a connection error. 455 // one. This should cause a connection error.
509 EXPECT_CALL(visitor_, ConnectionClose(QUIC_INVALID_ACK_DATA, false)); 456 EXPECT_CALL(visitor_, ConnectionClose(QUIC_INVALID_ACK_DATA, false));
457 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
510 creator_.set_sequence_number(7); 458 creator_.set_sequence_number(7);
511 SendAckPacket(&frame2); 459 ProcessAckPacket(&frame2, false);
512 } 460 }
513 461
514 TEST_F(QuicConnectionTest, AckUnsentData) { 462 TEST_F(QuicConnectionTest, AckUnsentData) {
515 // Ack a packet which has not been sent. 463 // Ack a packet which has not been sent.
516 EXPECT_CALL(visitor_, ConnectionClose(QUIC_INVALID_ACK_DATA, false)); 464 EXPECT_CALL(visitor_, ConnectionClose(QUIC_INVALID_ACK_DATA, false));
465 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
517 QuicAckFrame frame(1, QuicTime(), 0); 466 QuicAckFrame frame(1, QuicTime(), 0);
518 SendAckPacket(&frame); 467 ProcessAckPacket(&frame, false);
519 } 468 }
520 469
521 TEST_F(QuicConnectionTest, AckAll) { 470 TEST_F(QuicConnectionTest, AckAll) {
522 ProcessPacket(1); 471 ProcessPacket(1);
523 472
524 creator_.set_sequence_number(1); 473 creator_.set_sequence_number(1);
525 QuicAckFrame frame1(1, QuicTime(), 1); 474 QuicAckFrame frame1(1, QuicTime(), 1);
526 SendAckPacket(&frame1); 475 ProcessAckPacket(&frame1);
527 476
528 // Send an ack with least_unacked == 0, which indicates that all packets 477 // Send an ack with least_unacked == 0, which indicates that all packets
529 // we have sent have been acked. 478 // we have sent have been acked.
530 QuicAckFrame frame2(1, QuicTime(), 0); 479 QuicAckFrame frame2(1, QuicTime(), 0);
531 SendAckPacket(&frame2); 480 ProcessAckPacket(&frame2);
532 } 481 }
533 482
534 // This test is meant to validate that we can't overwhelm the far end with a ton 483 // This test is meant to validate that we can't overwhelm the far end with a ton
535 // of missing packets. 484 // of acks.
536 // We will likely fix the protocol to allow more than 190 in flight, and the 485 // We will likely fix the protocol to allow more than 190 in flight, and the
537 // test will need to be adjusted accordingly. 486 // test will need to be adjusted accordingly.
538 TEST_F(QuicConnectionTest, TooManyMissing) { 487 TEST_F(QuicConnectionTest, TooManyAcked) {
539 connection_.SendStreamData(1, "foo", 0, false, NULL); 488 SendStreamDataToPeer(1, "foo", 0, false, NULL);
540 489
541 EXPECT_CALL(visitor_, ConnectionClose(QUIC_PACKET_TOO_LARGE, false)); 490 EXPECT_CALL(visitor_, ConnectionClose(QUIC_PACKET_TOO_LARGE, false));
542 QuicAckFrame frame(1, QuicTime(), 0); 491 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
543 for (int i = 0; i < 5001; ++i) { 492 QuicAckFrame frame(0, QuicTime(), 0);
544 frame.received_info.missing_packets.insert(i); 493 for (int i = 1; i < 5001; ++i) {
494 frame.received_info.RecordAck(i, QuicTime::FromMilliseconds(i));
545 } 495 }
546 SendAckPacket(&frame); 496 ProcessAckPacket(&frame, false);
547 }
548
549 // See comment for TooManyMissing above.
550 TEST_F(QuicConnectionTest, TooManyNonRetransmitting) {
551 connection_.SendStreamData(1, "foo", 0, false, NULL);
552
553 EXPECT_CALL(visitor_, ConnectionClose(QUIC_PACKET_TOO_LARGE, false));
554 QuicAckFrame frame(1, QuicTime(), 0);
555 for (int i = 0; i < 5001; ++i) {
556 frame.sent_info.non_retransmiting.insert(i);
557 }
558 SendAckPacket(&frame);
559 } 497 }
560 498
561 TEST_F(QuicConnectionTest, BasicSending) { 499 TEST_F(QuicConnectionTest, BasicSending) {
562 QuicPacketSequenceNumber last_packet; 500 QuicPacketSequenceNumber last_packet;
563 connection_.SendStreamData(1, "foo", 0, false, &last_packet); // Packet 1 501 SendStreamDataToPeer(1, "foo", 0, false, &last_packet); // Packet 1
564 EXPECT_EQ(1u, last_packet); 502 EXPECT_EQ(1u, last_packet);
565 connection_.SendAck(); // Packet 2 503 SendAckPacketToPeer(); // Packet 2
566 504
567 EXPECT_EQ(1u, last_frame()->sent_info.least_unacked); 505 EXPECT_EQ(1u, last_frame()->sent_info.least_unacked);
568 506
569 connection_.SendAck(); // Packet 3 507 SendAckPacketToPeer(); // Packet 3
570 EXPECT_EQ(1u, last_frame()->sent_info.least_unacked); 508 EXPECT_EQ(1u, last_frame()->sent_info.least_unacked);
571 EXPECT_EQ(1u, NonRetransmittingSize());
572 EXPECT_TRUE(NonRetransmitting(2));
573 509
574 connection_.SendStreamData(1, "bar", 3, false, &last_packet); // Packet 4 510 SendStreamDataToPeer(1u, "bar", 3, false, &last_packet); // Packet 4
575 EXPECT_EQ(4u, last_packet); 511 EXPECT_EQ(4u, last_packet);
576 connection_.SendAck(); // Packet 5 512 SendAckPacketToPeer(); // Packet 5
577 EXPECT_EQ(1u, last_frame()->sent_info.least_unacked); 513 EXPECT_EQ(1u, last_frame()->sent_info.least_unacked);
578 EXPECT_EQ(2u, NonRetransmittingSize());
579 EXPECT_TRUE(NonRetransmitting(2));
580 EXPECT_TRUE(NonRetransmitting(3));
581 514
582 QuicConnectionVisitorInterface::AckedPackets expected_acks; 515 QuicConnectionVisitorInterface::AckedPackets expected_acks;
583 expected_acks.insert(1); 516 expected_acks.insert(1);
584 517
585 // Client acks up to packet 3 518 // Client acks up to packet 3
586 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks))); 519 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks)));
587 QuicAckFrame frame(3, QuicTime(), 0); 520 QuicAckFrame frame(3, QuicTime(), 0);
588 SendAckPacket(&frame); 521 ProcessAckPacket(&frame);
589 connection_.SendAck(); // Packet 6 522 SendAckPacketToPeer(); // Packet 6
590 523
591 // As soon as we've acked one, we skip ack packets 2 and 3 and note lack of 524 // As soon as we've acked one, we skip ack packets 2 and 3 and note lack of
592 // ack for 4. 525 // ack for 4.
593 EXPECT_EQ(4u, last_frame()->sent_info.least_unacked); 526 EXPECT_EQ(4u, last_frame()->sent_info.least_unacked);
594 EXPECT_EQ(1u, NonRetransmittingSize());
595 EXPECT_TRUE(NonRetransmitting(5));
596 527
597 expected_acks.clear(); 528 expected_acks.clear();
598 expected_acks.insert(4); 529 expected_acks.insert(4);
599 530
600 // Client acks up to packet 4, the last packet 531 // Client acks up to packet 4, the last packet
601 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks))); 532 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks)));
602 QuicAckFrame frame2(6, QuicTime(), 0); 533 QuicAckFrame frame2(6, QuicTime(), 0);
603 SendAckPacket(&frame2); 534 ProcessAckPacket(&frame2);
604 connection_.SendAck(); // Packet 7 535 SendAckPacketToPeer(); // Packet 7
605 536
606 // The least packet awaiting ack should now be the special value of 0 537 // The least packet awaiting ack should now be the special value of 0
607 EXPECT_EQ(0u, last_frame()->sent_info.least_unacked); 538 EXPECT_EQ(0u, last_frame()->sent_info.least_unacked);
608 EXPECT_EQ(0u, NonRetransmittingSize());
609 539
610 // If we force an ack, we shouldn't change our retransmit state. 540 // If we force an ack, we shouldn't change our retransmit state.
611 connection_.SendAck(); // Packet 8 541 SendAckPacketToPeer(); // Packet 8
612 EXPECT_EQ(0u, last_frame()->sent_info.least_unacked); 542 EXPECT_EQ(0u, last_frame()->sent_info.least_unacked);
613 EXPECT_EQ(0u, NonRetransmittingSize());
614 543
615 // But if we send more data it should. 544 // But if we send more data it should.
616 connection_.SendStreamData(1, "eep", 6, false, &last_packet); // Packet 9 545 SendStreamDataToPeer(1, "eep", 6, false, &last_packet); // Packet 9
617 EXPECT_EQ(9u, last_packet); 546 EXPECT_EQ(9u, last_packet);
618 connection_.SendAck(); // Packet10 547 SendAckPacketToPeer(); // Packet10
619 EXPECT_EQ(9u, last_frame()->sent_info.least_unacked); 548 EXPECT_EQ(9u, last_frame()->sent_info.least_unacked);
620 } 549 }
621 550
622 // Test sending multiple acks from the connection to the session. 551 // Test sending multiple acks from the connection to the session.
623 TEST_F(QuicConnectionTest, MultipleAcks) { 552 TEST_F(QuicConnectionTest, MultipleAcks) {
624 QuicPacketSequenceNumber last_packet; 553 QuicPacketSequenceNumber last_packet;
625 connection_.SendStreamData(1, "foo", 0, false, &last_packet); // Packet 1 554 SendStreamDataToPeer(1u, "foo", 0, false, &last_packet); // Packet 1
626 EXPECT_EQ(1u, last_packet); 555 EXPECT_EQ(1u, last_packet);
627 connection_.SendStreamData(3, "foo", 0, false, &last_packet); // Packet 2 556 SendStreamDataToPeer(3u, "foo", 0, false, &last_packet); // Packet 2
628 EXPECT_EQ(2u, last_packet); 557 EXPECT_EQ(2u, last_packet);
629 connection_.SendAck(); // Packet 3 558 SendAckPacketToPeer(); // Packet 3
630 connection_.SendStreamData(5, "foo", 0, false, &last_packet); // Packet 4 559 SendStreamDataToPeer(5u, "foo", 0, false, &last_packet); // Packet 4
631 EXPECT_EQ(4u, last_packet); 560 EXPECT_EQ(4u, last_packet);
632 connection_.SendStreamData(1, "foo", 3, false, &last_packet); // Packet 5 561 SendStreamDataToPeer(1u, "foo", 3, false, &last_packet); // Packet 5
633 EXPECT_EQ(5u, last_packet); 562 EXPECT_EQ(5u, last_packet);
634 connection_.SendStreamData(3, "foo", 3, false, &last_packet); // Packet 6 563 SendStreamDataToPeer(3u, "foo", 3, false, &last_packet); // Packet 6
635 EXPECT_EQ(6u, last_packet); 564 EXPECT_EQ(6u, last_packet);
636 565
637 // Client will acks packets 1, [!2], 3, 4, 5 566 // Client will ack packets 1, [!2], 3, 4, 5
638 QuicAckFrame frame1(5, QuicTime(), 0); 567 QuicAckFrame frame1(5, QuicTime(), 0);
639 frame1.received_info.missing_packets.insert(2); 568 frame1.received_info.received_packet_times.erase(2);
640 569
641 // The connection should pass up acks for 1, 4, 5. 2 is not acked, and 3 was 570 // The connection should pass up acks for 1, 4, 5. 2 is not acked, and 3 was
642 // an ackframe so should not be passed up. 571 // an ackframe so should not be passed up.
643 QuicConnectionVisitorInterface::AckedPackets expected_acks; 572 QuicConnectionVisitorInterface::AckedPackets expected_acks;
644 expected_acks.insert(1); 573 expected_acks.insert(1);
645 expected_acks.insert(4); 574 expected_acks.insert(4);
646 expected_acks.insert(5); 575 expected_acks.insert(5);
647 576
648 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks))); 577 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks)));
649 SendAckPacket(&frame1); 578 ProcessAckPacket(&frame1);
650 579
651 // Now the client implicitly acks 2, and explicitly acks 6 580 // Now the client implicitly acks 2, and explicitly acks 6
652 QuicAckFrame frame2(6, QuicTime(), 0); 581 QuicAckFrame frame2(6, QuicTime(), 0);
653 expected_acks.clear(); 582 expected_acks.clear();
654 // Both acks should be passed up. 583 // Both acks should be passed up.
655 expected_acks.insert(2); 584 expected_acks.insert(2);
656 expected_acks.insert(6); 585 expected_acks.insert(6);
657 586
658 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks))); 587 EXPECT_CALL(visitor_, OnAck(ContainerEq(expected_acks)));
659 SendAckPacket(&frame2); 588 ProcessAckPacket(&frame2);
660 } 589 }
661 590
662 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterFecPacket) { 591 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterFecPacket) {
663 // Don't send missing packet 1. 592 // Don't send missing packet 1.
664 ProcessFecPacket(2, 1, true); 593 ProcessFecPacket(2, 1, true);
665 } 594 }
666 595
667 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) { 596 TEST_F(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) {
668 ProcessFecProtectedPacket(1, false); 597 ProcessFecProtectedPacket(1, false);
669 // Don't send missing packet 2. 598 // Don't send missing packet 2.
(...skipping 23 matching lines...) Expand all
693 } 622 }
694 623
695 TEST_F(QuicConnectionTest, TestResend) { 624 TEST_F(QuicConnectionTest, TestResend) {
696 // TODO(rch): make this work 625 // TODO(rch): make this work
697 // FLAGS_fake_packet_loss_percentage = 100; 626 // FLAGS_fake_packet_loss_percentage = 100;
698 const QuicTime::Delta kDefaultResendTime = 627 const QuicTime::Delta kDefaultResendTime =
699 QuicTime::Delta::FromMilliseconds(500); 628 QuicTime::Delta::FromMilliseconds(500);
700 629
701 QuicTime default_resend_time = clock_.Now().Add(kDefaultResendTime); 630 QuicTime default_resend_time = clock_.Now().Add(kDefaultResendTime);
702 631
703 connection_.SendStreamData(1, "foo", 0, false, NULL); 632 SendStreamDataToPeer(1, "foo", 0, false, NULL);
704 EXPECT_EQ(1u, last_header()->packet_sequence_number); 633 EXPECT_EQ(1u, last_header()->packet_sequence_number);
705 EXPECT_EQ(1u, helper_->resend_alarms().size()); 634 EXPECT_EQ(1u, helper_->resend_alarms().size());
706 EXPECT_EQ(default_resend_time, 635 EXPECT_EQ(default_resend_time,
707 helper_->resend_alarms().find(1)->second); 636 helper_->resend_alarms().find(1)->second);
708 // Simulate the resend alarm firing 637 // Simulate the resend alarm firing
709 clock_.AdvanceTime(kDefaultResendTime); 638 clock_.AdvanceTime(kDefaultResendTime);
639 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
710 connection_.MaybeResendPacket(1); 640 connection_.MaybeResendPacket(1);
711 EXPECT_EQ(2u, last_header()->packet_sequence_number); 641 EXPECT_EQ(2u, last_header()->packet_sequence_number);
712 } 642 }
713 643
714 // TODO(rch): Enable after we get non-blocking sockets. 644 // TODO(rch): Enable after we get non-blocking sockets.
715 TEST_F(QuicConnectionTest, DISABLED_TestQueued) { 645 TEST_F(QuicConnectionTest, DISABLED_TestQueued) {
716 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 646 EXPECT_EQ(0u, connection_.NumQueuedPackets());
717 helper_->set_blocked(true); 647 helper_->set_blocked(true);
718 connection_.SendStreamData(1, "foo", 0, false, NULL); 648 SendStreamDataToPeer(1, "foo", 0, false, NULL);
719 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 649 EXPECT_EQ(1u, connection_.NumQueuedPackets());
720 650
721 // Attempt to send all packets, but since we're actually still 651 // Attempt to send all packets, but since we're actually still
722 // blocked, they should all remain queued. 652 // blocked, they should all remain queued.
723 EXPECT_FALSE(connection_.OnCanWrite()); 653 EXPECT_FALSE(connection_.OnCanWrite());
724 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 654 EXPECT_EQ(1u, connection_.NumQueuedPackets());
725 655
726 // Unblock the writes and actually send. 656 // Unblock the writes and actually send.
727 helper_->set_blocked(false); 657 helper_->set_blocked(false);
728 EXPECT_TRUE(connection_.OnCanWrite()); 658 EXPECT_TRUE(connection_.OnCanWrite());
729 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 659 EXPECT_EQ(0u, connection_.NumQueuedPackets());
730 } 660 }
731 661
732 TEST_F(QuicConnectionTest, CloseFecGroup) { 662 TEST_F(QuicConnectionTest, CloseFecGroup) {
733 // Don't send missing packet 1 663 // Don't send missing packet 1
734 // Don't send missing packet 2 664 // Don't send missing packet 2
735 ProcessFecProtectedPacket(3, false); 665 ProcessFecProtectedPacket(3, false);
736 // Don't send missing FEC packet 3 666 // Don't send missing FEC packet 3
737 ASSERT_EQ(1u, connection_.NumFecGroups()); 667 ASSERT_EQ(1u, connection_.NumFecGroups());
738 668
739 // Now send non-fec protected ack packet and close the group 669 // Now send non-fec protected ack packet and close the group
740 SendAckPacket(5); 670 QuicAckFrame frame(0, QuicTime(), 5);
671 ProcessAckPacket(&frame);
741 ASSERT_EQ(0u, connection_.NumFecGroups()); 672 ASSERT_EQ(0u, connection_.NumFecGroups());
742 } 673 }
743 674
744 TEST_F(QuicConnectionTest, NoCongestionInfo) { 675 TEST_F(QuicConnectionTest, NoCongestionInfo) {
745 TestCollector* collector(new TestCollector(NULL)); 676 TestCollector* collector(new TestCollector(NULL));
746 connection_.SetCollector(collector); 677 connection_.SetCollector(collector);
747 connection_.SendAck(); 678 SendAckPacketToPeer();
748 EXPECT_EQ(kNone, last_frame()->congestion_info.type); 679 EXPECT_EQ(kNone, last_frame()->congestion_info.type);
749 } 680 }
750 681
751 TEST_F(QuicConnectionTest, WithCongestionInfo) { 682 TEST_F(QuicConnectionTest, WithCongestionInfo) {
752 CongestionInfo info; 683 CongestionInfo info;
753 info.type = kFixRate; 684 info.type = kFixRate;
754 info.fix_rate.bitrate_in_bytes_per_second = 123; 685 info.fix_rate.bitrate_in_bytes_per_second = 123;
755 TestCollector* collector(new TestCollector(&info)); 686 TestCollector* collector(new TestCollector(&info));
756 connection_.SetCollector(collector); 687 connection_.SetCollector(collector);
757 connection_.SendAck(); 688 SendAckPacketToPeer();
758 EXPECT_EQ(kFixRate, last_frame()->congestion_info.type); 689 EXPECT_EQ(kFixRate, last_frame()->congestion_info.type);
759 EXPECT_EQ(info.fix_rate.bitrate_in_bytes_per_second, 690 EXPECT_EQ(info.fix_rate.bitrate_in_bytes_per_second,
760 last_frame()->congestion_info.fix_rate.bitrate_in_bytes_per_second); 691 last_frame()->congestion_info.fix_rate.bitrate_in_bytes_per_second);
761 } 692 }
762 693
763 TEST_F(QuicConnectionTest, UpdateCongestionInfo) { 694 TEST_F(QuicConnectionTest, UpdateCongestionInfo) {
764 TestCollector* collector(new TestCollector(NULL)); 695 TestCollector* collector(new TestCollector(NULL));
765 connection_.SetCollector(collector); 696 connection_.SetCollector(collector);
766 connection_.SendAck(); 697 SendAckPacketToPeer();
767 EXPECT_CALL(*collector, RecordIncomingPacket(_, _, _, _)); 698 EXPECT_CALL(*collector, RecordIncomingPacket(_, _, _, _));
768 ProcessPacket(1); 699 ProcessPacket(1);
769 } 700 }
770 701
771 TEST_F(QuicConnectionTest, DontUpdateCongestionInfoForRevived) { 702 TEST_F(QuicConnectionTest, DontUpdateCongestionInfoForRevived) {
772 TestCollector* collector(new TestCollector(NULL)); 703 TestCollector* collector(new TestCollector(NULL));
773 connection_.SetCollector(collector); 704 connection_.SetCollector(collector);
774 connection_.SendAck(); 705 SendAckPacketToPeer();
775 // Process an FEC packet, and revive the missing data packet 706 // Process an FEC packet, and revive the missing data packet
776 // but only contact the collector once. 707 // but only contact the collector once.
777 EXPECT_CALL(*collector, RecordIncomingPacket(_, _, _, _)); 708 EXPECT_CALL(*collector, RecordIncomingPacket(_, _, _, _));
778 ProcessFecPacket(2, 1, true); 709 ProcessFecPacket(2, 1, true);
779 } 710 }
780 711
781 TEST_F(QuicConnectionTest, InitialTimeout) { 712 TEST_F(QuicConnectionTest, InitialTimeout) {
782 EXPECT_TRUE(connection_.connected()); 713 EXPECT_TRUE(connection_.connected());
783 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false)); 714 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false));
715 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
784 716
785 QuicTime default_timeout = clock_.Now().Add( 717 QuicTime default_timeout = clock_.Now().Add(
786 QuicTime::Delta::FromMicroseconds(kDefaultTimeoutUs)); 718 QuicTime::Delta::FromMicroseconds(kDefaultTimeoutUs));
787 EXPECT_EQ(default_timeout, helper_->timeout_alarm()); 719 EXPECT_EQ(default_timeout, helper_->timeout_alarm());
788 720
789 // Simulate the timeout alarm firing 721 // Simulate the timeout alarm firing
790 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(kDefaultTimeoutUs)); 722 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(kDefaultTimeoutUs));
791 EXPECT_TRUE(connection_.CheckForTimeout()); 723 EXPECT_TRUE(connection_.CheckForTimeout());
792 EXPECT_FALSE(connection_.connected()); 724 EXPECT_FALSE(connection_.connected());
793 } 725 }
794 726
795 TEST_F(QuicConnectionTest, TimeoutAfterSend) { 727 TEST_F(QuicConnectionTest, TimeoutAfterSend) {
796 EXPECT_TRUE(connection_.connected()); 728 EXPECT_TRUE(connection_.connected());
797 729
798 QuicTime default_timeout = clock_.Now().Add( 730 QuicTime default_timeout = clock_.Now().Add(
799 QuicTime::Delta::FromMicroseconds(kDefaultTimeoutUs)); 731 QuicTime::Delta::FromMicroseconds(kDefaultTimeoutUs));
800 732
801 // When we send a packet, the timeout will change to 5000 + kDefaultTimeout. 733 // When we send a packet, the timeout will change to 5000 + kDefaultTimeout.
802 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); 734 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
803 735
804 // Send an ack so we don't set the resend alarm. 736 // Send an ack so we don't set the resend alarm.
805 connection_.SendAck(); 737 SendAckPacketToPeer();
806 EXPECT_EQ(default_timeout, helper_->timeout_alarm()); 738 EXPECT_EQ(default_timeout, helper_->timeout_alarm());
807 739
808 // The original alarm will fire. We should not time out because we had a 740 // The original alarm will fire. We should not time out because we had a
809 // network event at t=5000. The alarm will reregister. 741 // network event at t=5000. The alarm will reregister.
810 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds( 742 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(
811 kDefaultTimeoutUs - 5000)); 743 kDefaultTimeoutUs - 5000));
812 EXPECT_EQ(default_timeout, clock_.Now()); 744 EXPECT_EQ(default_timeout, clock_.Now());
813 EXPECT_FALSE(connection_.CheckForTimeout()); 745 EXPECT_FALSE(connection_.CheckForTimeout());
814 EXPECT_TRUE(connection_.connected()); 746 EXPECT_TRUE(connection_.connected());
815 EXPECT_EQ(default_timeout.Add(QuicTime::Delta::FromMilliseconds(5)), 747 EXPECT_EQ(default_timeout.Add(QuicTime::Delta::FromMilliseconds(5)),
816 helper_->timeout_alarm()); 748 helper_->timeout_alarm());
817 749
818 // This time, we should time out. 750 // This time, we should time out.
819 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false)); 751 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false));
752 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
820 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); 753 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
821 EXPECT_EQ(default_timeout.Add(QuicTime::Delta::FromMilliseconds(5)), 754 EXPECT_EQ(default_timeout.Add(QuicTime::Delta::FromMilliseconds(5)),
822 clock_.Now()); 755 clock_.Now());
823 EXPECT_TRUE(connection_.CheckForTimeout()); 756 EXPECT_TRUE(connection_.CheckForTimeout());
824 EXPECT_FALSE(connection_.connected()); 757 EXPECT_FALSE(connection_.connected());
825 } 758 }
826 759
827 // TODO(ianswett): Add scheduler tests when resend is false. 760 // TODO(ianswett): Add scheduler tests when resend is false.
828 TEST_F(QuicConnectionTest, SendScheduler) { 761 TEST_F(QuicConnectionTest, SendScheduler) {
829 // Test that if we send a packet without delay, it is not queued. 762 // Test that if we send a packet without delay, it is not queued.
830 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 763 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
831 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 764 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
832 QuicTime::Delta())); 765 QuicTime::Delta()));
766 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
833 connection_.SendPacket(1, packet.get(), true, false, false); 767 connection_.SendPacket(1, packet.get(), true, false, false);
834 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 768 EXPECT_EQ(0u, connection_.NumQueuedPackets());
835 } 769 }
836 770
837 TEST_F(QuicConnectionTest, SendSchedulerDelay) { 771 TEST_F(QuicConnectionTest, SendSchedulerDelay) {
838 // Test that if we send a packet with a delay, it ends up queued. 772 // Test that if we send a packet with a delay, it ends up queued.
839 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 773 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
840 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 774 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
841 QuicTime::Delta::FromMicroseconds(1))); 775 QuicTime::Delta::FromMicroseconds(1)));
842 EXPECT_CALL(*scheduler_, SentPacket(1, _, _)).Times(0); 776 EXPECT_CALL(*scheduler_, SentPacket(1, _, _)).Times(0);
843 connection_.SendPacket(1, packet.get(), true, false, false); 777 connection_.SendPacket(1, packet.get(), true, false, false);
844 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 778 EXPECT_EQ(1u, connection_.NumQueuedPackets());
845 } 779 }
846 780
847 TEST_F(QuicConnectionTest, SendSchedulerForce) { 781 TEST_F(QuicConnectionTest, SendSchedulerForce) {
848 // Test that if we force send a packet, it is not queued. 782 // Test that if we force send a packet, it is not queued.
849 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 783 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
850 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).Times(0); 784 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).Times(0);
785 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
851 connection_.SendPacket(1, packet.get(), true, true, false); 786 connection_.SendPacket(1, packet.get(), true, true, false);
852 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 787 EXPECT_EQ(0u, connection_.NumQueuedPackets());
853 } 788 }
854 789
855 // TODO(rch): Enable after we get non-blocking sockets. 790 // TODO(rch): Enable after we get non-blocking sockets.
856 TEST_F(QuicConnectionTest, DISABLED_SendSchedulerEAGAIN) { 791 TEST_F(QuicConnectionTest, DISABLED_SendSchedulerEAGAIN) {
857 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 792 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
858 helper_->set_blocked(true); 793 helper_->set_blocked(true);
859 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 794 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
860 QuicTime::Delta())); 795 QuicTime::Delta()));
861 EXPECT_CALL(*scheduler_, SentPacket(1, _, _)).Times(0); 796 EXPECT_CALL(*scheduler_, SentPacket(1, _, _)).Times(0);
862 connection_.SendPacket(1, packet.get(), true, false, false); 797 connection_.SendPacket(1, packet.get(), true, false, false);
863 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 798 EXPECT_EQ(1u, connection_.NumQueuedPackets());
864 } 799 }
865 800
866 TEST_F(QuicConnectionTest, SendSchedulerDelayThenSend) { 801 TEST_F(QuicConnectionTest, SendSchedulerDelayThenSend) {
867 // Test that if we send a packet with a delay, it ends up queued. 802 // Test that if we send a packet with a delay, it ends up queued.
868 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 803 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
869 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 804 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
870 QuicTime::Delta::FromMicroseconds(1))); 805 QuicTime::Delta::FromMicroseconds(1)));
871 connection_.SendPacket(1, packet.get(), true, false, false); 806 connection_.SendPacket(1, packet.get(), true, false, false);
872 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 807 EXPECT_EQ(1u, connection_.NumQueuedPackets());
873 808
874 // Advance the clock to fire the alarm, and configure the scheduler 809 // Advance the clock to fire the alarm, and configure the scheduler
875 // to permit the packet to be sent. 810 // to permit the packet to be sent.
876 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 811 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
877 QuicTime::Delta())); 812 QuicTime::Delta()));
878 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(1)); 813 clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(1));
814 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
879 connection_.OnCanWrite(); 815 connection_.OnCanWrite();
880 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 816 EXPECT_EQ(0u, connection_.NumQueuedPackets());
881 } 817 }
882 818
883 TEST_F(QuicConnectionTest, SendSchedulerDelayThenRetransmit) { 819 TEST_F(QuicConnectionTest, SendSchedulerDelayThenRetransmit) {
884 // Test that if we send a retransmit with a delay, it ends up queued. 820 // Test that if we send a retransmit with a delay, it ends up queued.
885 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 821 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
886 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 822 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
887 QuicTime::Delta::FromMicroseconds(1))); 823 QuicTime::Delta::FromMicroseconds(1)));
888 connection_.SendPacket(1, packet.get(), true, false, true); 824 connection_.SendPacket(1, packet.get(), true, false, true);
(...skipping 26 matching lines...) Expand all
915 TEST_F(QuicConnectionTest, SendSchedulerDelayThenAckAndSend) { 851 TEST_F(QuicConnectionTest, SendSchedulerDelayThenAckAndSend) {
916 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 852 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
917 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 853 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
918 QuicTime::Delta::FromMicroseconds(10))); 854 QuicTime::Delta::FromMicroseconds(10)));
919 connection_.SendPacket(1, packet.get(), true, false, false); 855 connection_.SendPacket(1, packet.get(), true, false, false);
920 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 856 EXPECT_EQ(1u, connection_.NumQueuedPackets());
921 857
922 // Now send non-retransmitting information, that we're not going to resend 3. 858 // Now send non-retransmitting information, that we're not going to resend 3.
923 // The far end should stop waiting for it. 859 // The far end should stop waiting for it.
924 QuicAckFrame frame(0, QuicTime(), 1); 860 QuicAckFrame frame(0, QuicTime(), 1);
925 frame.sent_info.non_retransmiting.insert(3);
926 EXPECT_CALL(*scheduler_, OnIncomingAckFrame(testing::_));
927 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillRepeatedly(testing::Return( 861 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillRepeatedly(testing::Return(
928 QuicTime::Delta())); 862 QuicTime::Delta()));
929 SendAckPacket(&frame); 863 EXPECT_CALL(*scheduler_, SentPacket(_, _, _));
864 ProcessAckPacket(&frame);
930 865
931 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 866 EXPECT_EQ(0u, connection_.NumQueuedPackets());
932 // Ensure alarm is not set 867 // Ensure alarm is not set
933 EXPECT_FALSE(helper_->IsSendAlarmSet()); 868 EXPECT_FALSE(helper_->IsSendAlarmSet());
934 } 869 }
935 870
936 TEST_F(QuicConnectionTest, SendSchedulerDelayThenAckAndHold) { 871 TEST_F(QuicConnectionTest, SendSchedulerDelayThenAckAndHold) {
937 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 872 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
938 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 873 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
939 QuicTime::Delta::FromMicroseconds(10))); 874 QuicTime::Delta::FromMicroseconds(10)));
940 connection_.SendPacket(1, packet.get(), true, false, false); 875 connection_.SendPacket(1, packet.get(), true, false, false);
941 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 876 EXPECT_EQ(1u, connection_.NumQueuedPackets());
942 877
943 // Now send non-resending information, that we're not going to resend 3. 878 // Now send non-resending information, that we're not going to resend 3.
944 // The far end should stop waiting for it. 879 // The far end should stop waiting for it.
945 QuicAckFrame frame(0, QuicTime(), 1); 880 QuicAckFrame frame(0, QuicTime(), 1);
946 frame.sent_info.non_retransmiting.insert(3);
947 EXPECT_CALL(*scheduler_, OnIncomingAckFrame(testing::_));
948 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 881 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
949 QuicTime::Delta::FromMicroseconds(1))); 882 QuicTime::Delta::FromMicroseconds(1)));
950 SendAckPacket(&frame); 883 ProcessAckPacket(&frame);
951 884
952 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 885 EXPECT_EQ(1u, connection_.NumQueuedPackets());
953 } 886 }
954 887
955 TEST_F(QuicConnectionTest, SendSchedulerDelayThenOnCanWrite) { 888 TEST_F(QuicConnectionTest, SendSchedulerDelayThenOnCanWrite) {
956 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); 889 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0));
957 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return( 890 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(
958 QuicTime::Delta::FromMicroseconds(10))); 891 QuicTime::Delta::FromMicroseconds(10)));
959 connection_.SendPacket(1, packet.get(), true, false, false); 892 connection_.SendPacket(1, packet.get(), true, false, false);
960 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 893 EXPECT_EQ(1u, connection_.NumQueuedPackets());
961 894
962 // OnCanWrite should not send the packet (because of the delay) 895 // OnCanWrite should not send the packet (because of the delay)
963 // but should still return true. 896 // but should still return true.
964 EXPECT_TRUE(connection_.OnCanWrite()); 897 EXPECT_TRUE(connection_.OnCanWrite());
965 EXPECT_EQ(1u, connection_.NumQueuedPackets()); 898 EXPECT_EQ(1u, connection_.NumQueuedPackets());
966 } 899 }
967 900
968 } // namespace 901 } // namespace
969 } // namespace test 902 } // namespace test
970 } // namespace net 903 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698