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

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

Issue 559373003: Landing Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compiler errors Created 6 years, 3 months 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
« no previous file with comments | « net/quic/quic_packet_generator.h ('k') | net/quic/quic_protocol.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 (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_packet_generator.h" 5 #include "net/quic/quic_packet_generator.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "net/quic/crypto/crypto_protocol.h" 9 #include "net/quic/crypto/crypto_protocol.h"
10 #include "net/quic/crypto/null_encrypter.h" 10 #include "net/quic/crypto/null_encrypter.h"
(...skipping 24 matching lines...) Expand all
35 MockDelegate() {} 35 MockDelegate() {}
36 virtual ~MockDelegate() OVERRIDE {} 36 virtual ~MockDelegate() OVERRIDE {}
37 37
38 MOCK_METHOD3(ShouldGeneratePacket, 38 MOCK_METHOD3(ShouldGeneratePacket,
39 bool(TransmissionType transmission_type, 39 bool(TransmissionType transmission_type,
40 HasRetransmittableData retransmittable, 40 HasRetransmittableData retransmittable,
41 IsHandshake handshake)); 41 IsHandshake handshake));
42 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); 42 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*());
43 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*()); 43 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*());
44 MOCK_METHOD0(CreateStopWaitingFrame, QuicStopWaitingFrame*()); 44 MOCK_METHOD0(CreateStopWaitingFrame, QuicStopWaitingFrame*());
45 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet)); 45 MOCK_METHOD1(OnSerializedPacket, void(const SerializedPacket& packet));
46 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool)); 46 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool));
47 47
48 void SetCanWriteAnything() { 48 void SetCanWriteAnything() {
49 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) 49 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _))
50 .WillRepeatedly(Return(true)); 50 .WillRepeatedly(Return(true));
51 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, 51 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION,
52 NO_RETRANSMITTABLE_DATA, _)) 52 NO_RETRANSMITTABLE_DATA, _))
53 .WillRepeatedly(Return(true)); 53 .WillRepeatedly(Return(true));
54 } 54 }
55 55
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1); 264 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1);
265 265
266 generator_.SetShouldSendAck(false, false); 266 generator_.SetShouldSendAck(false, false);
267 EXPECT_TRUE(generator_.HasQueuedFrames()); 267 EXPECT_TRUE(generator_.HasQueuedFrames());
268 } 268 }
269 269
270 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { 270 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) {
271 delegate_.SetCanWriteOnlyNonRetransmittable(); 271 delegate_.SetCanWriteOnlyNonRetransmittable();
272 272
273 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 273 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
274 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 274 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
275 DoAll(SaveArg<0>(&packet_), Return(true)));
276 275
277 generator_.SetShouldSendAck(false, false); 276 generator_.SetShouldSendAck(false, false);
278 EXPECT_FALSE(generator_.HasQueuedFrames()); 277 EXPECT_FALSE(generator_.HasQueuedFrames());
279 278
280 PacketContents contents; 279 PacketContents contents;
281 contents.num_ack_frames = 1; 280 contents.num_ack_frames = 1;
282 CheckPacketContains(contents, packet_); 281 CheckPacketContains(contents, packet_);
283 } 282 }
284 283
285 TEST_F(QuicPacketGeneratorTest, 284 TEST_F(QuicPacketGeneratorTest,
(...skipping 12 matching lines...) Expand all
298 TEST_F(QuicPacketGeneratorTest, 297 TEST_F(QuicPacketGeneratorTest,
299 ShouldSendAckWithFeedback_WritableAndShouldFlush) { 298 ShouldSendAckWithFeedback_WritableAndShouldFlush) {
300 delegate_.SetCanWriteOnlyNonRetransmittable(); 299 delegate_.SetCanWriteOnlyNonRetransmittable();
301 300
302 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 301 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
303 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 302 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
304 Return(CreateFeedbackFrame())); 303 Return(CreateFeedbackFrame()));
305 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce( 304 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce(
306 Return(CreateStopWaitingFrame())); 305 Return(CreateStopWaitingFrame()));
307 306
308 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 307 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
309 DoAll(SaveArg<0>(&packet_), Return(true)));
310 308
311 generator_.SetShouldSendAck(true, true); 309 generator_.SetShouldSendAck(true, true);
312 EXPECT_FALSE(generator_.HasQueuedFrames()); 310 EXPECT_FALSE(generator_.HasQueuedFrames());
313 311
314 PacketContents contents; 312 PacketContents contents;
315 contents.num_ack_frames = 1; 313 contents.num_ack_frames = 1;
316 contents.num_feedback_frames = 1; 314 contents.num_feedback_frames = 1;
317 contents.num_stop_waiting_frames = 1; 315 contents.num_stop_waiting_frames = 1;
318 CheckPacketContains(contents, packet_); 316 CheckPacketContains(contents, packet_);
319 } 317 }
(...skipping 22 matching lines...) Expand all
342 340
343 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) { 341 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) {
344 delegate_.SetCanNotWrite(); 342 delegate_.SetCanNotWrite();
345 generator_.StartBatchOperations(); 343 generator_.StartBatchOperations();
346 344
347 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 345 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
348 EXPECT_TRUE(generator_.HasQueuedFrames()); 346 EXPECT_TRUE(generator_.HasQueuedFrames());
349 generator_.FinishBatchOperations(); 347 generator_.FinishBatchOperations();
350 EXPECT_TRUE(generator_.HasQueuedFrames()); 348 EXPECT_TRUE(generator_.HasQueuedFrames());
351 349
352 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 350 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
353 DoAll(SaveArg<0>(&packet_), Return(true)));
354 generator_.FlushAllQueuedFrames(); 351 generator_.FlushAllQueuedFrames();
355 EXPECT_FALSE(generator_.HasQueuedFrames()); 352 EXPECT_FALSE(generator_.HasQueuedFrames());
356 353
357 PacketContents contents; 354 PacketContents contents;
358 contents.num_rst_stream_frames = 1; 355 contents.num_rst_stream_frames = 1;
359 CheckPacketContains(contents, packet_); 356 CheckPacketContains(contents, packet_);
360 } 357 }
361 358
362 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { 359 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) {
363 delegate_.SetCanWriteAnything(); 360 delegate_.SetCanWriteAnything();
364 361
365 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 362 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
366 DoAll(SaveArg<0>(&packet_), Return(true)));
367 363
368 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 364 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
369 EXPECT_FALSE(generator_.HasQueuedFrames()); 365 EXPECT_FALSE(generator_.HasQueuedFrames());
370 366
371 PacketContents contents; 367 PacketContents contents;
372 contents.num_rst_stream_frames = 1; 368 contents.num_rst_stream_frames = 1;
373 CheckPacketContains(contents, packet_); 369 CheckPacketContains(contents, packet_);
374 } 370 }
375 371
376 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { 372 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) {
(...skipping 13 matching lines...) Expand all
390 QuicConsumedData consumed = generator_.ConsumeData( 386 QuicConsumedData consumed = generator_.ConsumeData(
391 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL); 387 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL);
392 EXPECT_EQ(3u, consumed.bytes_consumed); 388 EXPECT_EQ(3u, consumed.bytes_consumed);
393 EXPECT_TRUE(consumed.fin_consumed); 389 EXPECT_TRUE(consumed.fin_consumed);
394 EXPECT_TRUE(generator_.HasQueuedFrames()); 390 EXPECT_TRUE(generator_.HasQueuedFrames());
395 } 391 }
396 392
397 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { 393 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) {
398 delegate_.SetCanWriteAnything(); 394 delegate_.SetCanWriteAnything();
399 395
400 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 396 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
401 DoAll(SaveArg<0>(&packet_), Return(true)));
402 QuicConsumedData consumed = generator_.ConsumeData( 397 QuicConsumedData consumed = generator_.ConsumeData(
403 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL); 398 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL);
404 EXPECT_EQ(3u, consumed.bytes_consumed); 399 EXPECT_EQ(3u, consumed.bytes_consumed);
405 EXPECT_TRUE(consumed.fin_consumed); 400 EXPECT_TRUE(consumed.fin_consumed);
406 EXPECT_FALSE(generator_.HasQueuedFrames()); 401 EXPECT_FALSE(generator_.HasQueuedFrames());
407 402
408 PacketContents contents; 403 PacketContents contents;
409 contents.num_stream_frames = 1; 404 contents.num_stream_frames = 1;
410 CheckPacketContains(contents, packet_); 405 CheckPacketContains(contents, packet_);
411 } 406 }
(...skipping 18 matching lines...) Expand all
430 425
431 generator_.ConsumeData(kHeadersStreamId, MakeIOVector("foo"), 2, true, 426 generator_.ConsumeData(kHeadersStreamId, MakeIOVector("foo"), 2, true,
432 MAY_FEC_PROTECT, NULL); 427 MAY_FEC_PROTECT, NULL);
433 QuicConsumedData consumed = generator_.ConsumeData( 428 QuicConsumedData consumed = generator_.ConsumeData(
434 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, NULL); 429 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, NULL);
435 EXPECT_EQ(4u, consumed.bytes_consumed); 430 EXPECT_EQ(4u, consumed.bytes_consumed);
436 EXPECT_FALSE(consumed.fin_consumed); 431 EXPECT_FALSE(consumed.fin_consumed);
437 EXPECT_TRUE(generator_.HasQueuedFrames()); 432 EXPECT_TRUE(generator_.HasQueuedFrames());
438 433
439 // Now both frames will be flushed out. 434 // Now both frames will be flushed out.
440 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 435 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
441 DoAll(SaveArg<0>(&packet_), Return(true)));
442 generator_.FinishBatchOperations(); 436 generator_.FinishBatchOperations();
443 EXPECT_FALSE(generator_.HasQueuedFrames()); 437 EXPECT_FALSE(generator_.HasQueuedFrames());
444 438
445 PacketContents contents; 439 PacketContents contents;
446 contents.num_stream_frames = 2; 440 contents.num_stream_frames = 2;
447 CheckPacketContains(contents, packet_); 441 CheckPacketContains(contents, packet_);
448 } 442 }
449 443
450 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { 444 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) {
451 delegate_.SetCanWriteAnything(); 445 delegate_.SetCanWriteAnything();
452 446
453 // Send FEC every two packets. 447 // Send FEC every two packets.
454 creator_->set_max_packets_per_fec_group(2); 448 creator_->set_max_packets_per_fec_group(2);
455 449
456 { 450 {
457 InSequence dummy; 451 InSequence dummy;
458 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 452 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
459 DoAll(SaveArg<0>(&packet_), Return(true))); 453 SaveArg<0>(&packet_));
460 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 454 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
461 DoAll(SaveArg<0>(&packet2_), Return(true))); 455 SaveArg<0>(&packet2_));
462 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 456 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
463 DoAll(SaveArg<0>(&packet3_), Return(true))); 457 SaveArg<0>(&packet3_));
464 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 458 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
465 DoAll(SaveArg<0>(&packet4_), Return(true))); 459 SaveArg<0>(&packet4_));
466 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 460 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
467 DoAll(SaveArg<0>(&packet5_), Return(true))); 461 SaveArg<0>(&packet5_));
468 } 462 }
469 463
470 // Send enough data to create 3 packets: two full and one partial. Send 464 // Send enough data to create 3 packets: two full and one partial. Send
471 // with MUST_FEC_PROTECT flag. 465 // with MUST_FEC_PROTECT flag.
472 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 466 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
473 QuicConsumedData consumed = 467 QuicConsumedData consumed =
474 generator_.ConsumeData(3, CreateData(data_len), 0, true, 468 generator_.ConsumeData(3, CreateData(data_len), 0, true,
475 MUST_FEC_PROTECT, NULL); 469 MUST_FEC_PROTECT, NULL);
476 EXPECT_EQ(data_len, consumed.bytes_consumed); 470 EXPECT_EQ(data_len, consumed.bytes_consumed);
477 EXPECT_TRUE(consumed.fin_consumed); 471 EXPECT_TRUE(consumed.fin_consumed);
478 EXPECT_FALSE(generator_.HasQueuedFrames()); 472 EXPECT_FALSE(generator_.HasQueuedFrames());
479 473
480 CheckPacketHasSingleStreamFrame(packet_); 474 CheckPacketHasSingleStreamFrame(packet_);
481 CheckPacketHasSingleStreamFrame(packet2_); 475 CheckPacketHasSingleStreamFrame(packet2_);
482 CheckPacketIsFec(packet3_, 1); 476 CheckPacketIsFec(packet3_, 1);
483 477
484 CheckPacketHasSingleStreamFrame(packet4_); 478 CheckPacketHasSingleStreamFrame(packet4_);
485 CheckPacketIsFec(packet5_, 4); 479 CheckPacketIsFec(packet5_, 4);
486 } 480 }
487 481
488 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { 482 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) {
489 delegate_.SetCanWriteAnything(); 483 delegate_.SetCanWriteAnything();
490 484
491 // Enable FEC. 485 // Enable FEC.
492 creator_->set_max_packets_per_fec_group(6); 486 creator_->set_max_packets_per_fec_group(6);
493 { 487 {
494 InSequence dummy; 488 InSequence dummy;
495 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 489 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
496 DoAll(SaveArg<0>(&packet_), Return(true))); 490 SaveArg<0>(&packet_));
497 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 491 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
498 DoAll(SaveArg<0>(&packet2_), Return(true))); 492 SaveArg<0>(&packet2_));
499 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 493 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
500 DoAll(SaveArg<0>(&packet3_), Return(true))); 494 SaveArg<0>(&packet3_));
501 } 495 }
502 496
503 // Send enough data to create 2 packets: one full and one partial. Send 497 // Send enough data to create 2 packets: one full and one partial. Send
504 // with MUST_FEC_PROTECT flag. 498 // with MUST_FEC_PROTECT flag.
505 size_t data_len = 1 * kDefaultMaxPacketSize + 100; 499 size_t data_len = 1 * kDefaultMaxPacketSize + 100;
506 QuicConsumedData consumed = 500 QuicConsumedData consumed =
507 generator_.ConsumeData(3, CreateData(data_len), 0, true, 501 generator_.ConsumeData(3, CreateData(data_len), 0, true,
508 MUST_FEC_PROTECT, NULL); 502 MUST_FEC_PROTECT, NULL);
509 EXPECT_EQ(data_len, consumed.bytes_consumed); 503 EXPECT_EQ(data_len, consumed.bytes_consumed);
510 EXPECT_TRUE(consumed.fin_consumed); 504 EXPECT_TRUE(consumed.fin_consumed);
(...skipping 15 matching lines...) Expand all
526 NOT_IN_FEC_GROUP) + 520 NOT_IN_FEC_GROUP) +
527 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger 521 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger
528 // than the GetMinStreamFrameSize. 522 // than the GetMinStreamFrameSize.
529 QuicFramer::GetMinStreamFrameSize(1, 0, false, NOT_IN_FEC_GROUP) + 3 + 523 QuicFramer::GetMinStreamFrameSize(1, 0, false, NOT_IN_FEC_GROUP) + 3 +
530 QuicFramer::GetMinStreamFrameSize(1, 0, true, NOT_IN_FEC_GROUP) + 1; 524 QuicFramer::GetMinStreamFrameSize(1, 0, true, NOT_IN_FEC_GROUP) + 1;
531 creator_->set_max_packet_length(length); 525 creator_->set_max_packet_length(length);
532 delegate_.SetCanWriteAnything(); 526 delegate_.SetCanWriteAnything();
533 { 527 {
534 InSequence dummy; 528 InSequence dummy;
535 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 529 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
536 DoAll(SaveArg<0>(&packet_), Return(true))); 530 SaveArg<0>(&packet_));
537 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 531 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
538 DoAll(SaveArg<0>(&packet2_), Return(true))); 532 SaveArg<0>(&packet2_));
539 } 533 }
540 generator_.StartBatchOperations(); 534 generator_.StartBatchOperations();
541 // Queue enough data to prevent a stream frame with a non-zero offset from 535 // Queue enough data to prevent a stream frame with a non-zero offset from
542 // fitting. 536 // fitting.
543 QuicConsumedData consumed = generator_.ConsumeData( 537 QuicConsumedData consumed = generator_.ConsumeData(
544 kHeadersStreamId, MakeIOVector("foo"), 0, false, MAY_FEC_PROTECT, NULL); 538 kHeadersStreamId, MakeIOVector("foo"), 0, false, MAY_FEC_PROTECT, NULL);
545 EXPECT_EQ(3u, consumed.bytes_consumed); 539 EXPECT_EQ(3u, consumed.bytes_consumed);
546 EXPECT_FALSE(consumed.fin_consumed); 540 EXPECT_FALSE(consumed.fin_consumed);
547 EXPECT_TRUE(generator_.HasQueuedFrames()); 541 EXPECT_TRUE(generator_.HasQueuedFrames());
548 542
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 generator_.StartBatchOperations(); 581 generator_.StartBatchOperations();
588 creator_->set_max_packets_per_fec_group(50); 582 creator_->set_max_packets_per_fec_group(50);
589 EXPECT_EQ(50u, creator_->max_packets_per_fec_group()); 583 EXPECT_EQ(50u, creator_->max_packets_per_fec_group());
590 EXPECT_FALSE(creator_->IsFecGroupOpen()); 584 EXPECT_FALSE(creator_->IsFecGroupOpen());
591 585
592 // Send enough data to create 4 packets with MUST_FEC_PROTECT flag. 586 // Send enough data to create 4 packets with MUST_FEC_PROTECT flag.
593 // 3 packets are sent, one is queued in the creator. 587 // 3 packets are sent, one is queued in the creator.
594 { 588 {
595 InSequence dummy; 589 InSequence dummy;
596 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 590 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
597 DoAll(SaveArg<0>(&packet_), Return(true))); 591 SaveArg<0>(&packet_));
598 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 592 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
599 DoAll(SaveArg<0>(&packet2_), Return(true))); 593 SaveArg<0>(&packet2_));
600 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 594 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
601 DoAll(SaveArg<0>(&packet3_), Return(true))); 595 SaveArg<0>(&packet3_));
602 } 596 }
603 size_t data_len = 3 * kDefaultMaxPacketSize + 1; 597 size_t data_len = 3 * kDefaultMaxPacketSize + 1;
604 QuicConsumedData consumed = generator_.ConsumeData( 598 QuicConsumedData consumed = generator_.ConsumeData(
605 7, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL); 599 7, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL);
606 EXPECT_EQ(data_len, consumed.bytes_consumed); 600 EXPECT_EQ(data_len, consumed.bytes_consumed);
607 EXPECT_TRUE(creator_->IsFecGroupOpen()); 601 EXPECT_TRUE(creator_->IsFecGroupOpen());
608 602
609 // Change FEC groupsize. 603 // Change FEC groupsize.
610 generator_.OnCongestionWindowChange(2 * kDefaultTCPMSS); 604 generator_.OnCongestionWindowChange(2 * kDefaultTCPMSS);
611 EXPECT_EQ(2u, creator_->max_packets_per_fec_group()); 605 EXPECT_EQ(2u, creator_->max_packets_per_fec_group());
612 606
613 // Send enough data to trigger one unprotected data packet, 607 // Send enough data to trigger one unprotected data packet,
614 // causing the FEC packet to also be sent. 608 // causing the FEC packet to also be sent.
615 { 609 {
616 InSequence dummy; 610 InSequence dummy;
617 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 611 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
618 DoAll(SaveArg<0>(&packet4_), Return(true))); 612 SaveArg<0>(&packet4_));
619 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 613 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
620 DoAll(SaveArg<0>(&packet5_), Return(true))); 614 SaveArg<0>(&packet5_));
621 } 615 }
622 consumed = generator_.ConsumeData(7, CreateData(kDefaultMaxPacketSize), 0, 616 consumed = generator_.ConsumeData(7, CreateData(kDefaultMaxPacketSize), 0,
623 true, MAY_FEC_PROTECT, NULL); 617 true, MAY_FEC_PROTECT, NULL);
624 EXPECT_EQ(kDefaultMaxPacketSize, consumed.bytes_consumed); 618 EXPECT_EQ(kDefaultMaxPacketSize, consumed.bytes_consumed);
625 // Verify that one FEC packet was sent. 619 // Verify that one FEC packet was sent.
626 CheckPacketIsFec(packet5_, /*fec_group=*/1u); 620 CheckPacketIsFec(packet5_, /*fec_group=*/1u);
627 EXPECT_FALSE(creator_->IsFecGroupOpen()); 621 EXPECT_FALSE(creator_->IsFecGroupOpen());
628 EXPECT_FALSE(creator_->IsFecProtected()); 622 EXPECT_FALSE(creator_->IsFecProtected());
629 } 623 }
630 624
631 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) { 625 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) {
632 delegate_.SetCanWriteAnything(); 626 delegate_.SetCanWriteAnything();
633 creator_->set_max_packets_per_fec_group(2); 627 creator_->set_max_packets_per_fec_group(2);
634 EXPECT_FALSE(creator_->IsFecProtected()); 628 EXPECT_FALSE(creator_->IsFecProtected());
635 629
636 // Send one unprotected data packet. 630 // Send one unprotected data packet.
637 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 631 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
638 DoAll(SaveArg<0>(&packet_), Return(true))); 632 SaveArg<0>(&packet_));
639 QuicConsumedData consumed = 633 QuicConsumedData consumed =
640 generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT, 634 generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT,
641 NULL); 635 NULL);
642 EXPECT_EQ(1u, consumed.bytes_consumed); 636 EXPECT_EQ(1u, consumed.bytes_consumed);
643 EXPECT_FALSE(generator_.HasQueuedFrames()); 637 EXPECT_FALSE(generator_.HasQueuedFrames());
644 EXPECT_FALSE(creator_->IsFecProtected()); 638 EXPECT_FALSE(creator_->IsFecProtected());
645 // Verify that one data packet was sent. 639 // Verify that one data packet was sent.
646 PacketContents contents; 640 PacketContents contents;
647 contents.num_stream_frames = 1; 641 contents.num_stream_frames = 1;
648 CheckPacketContains(contents, packet_); 642 CheckPacketContains(contents, packet_);
649 643
650 { 644 {
651 InSequence dummy; 645 InSequence dummy;
652 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 646 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
653 DoAll(SaveArg<0>(&packet2_), Return(true))); 647 SaveArg<0>(&packet2_));
654 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 648 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
655 DoAll(SaveArg<0>(&packet3_), Return(true))); 649 SaveArg<0>(&packet3_));
656 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 650 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
657 DoAll(SaveArg<0>(&packet4_), Return(true))); 651 SaveArg<0>(&packet4_));
658 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 652 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
659 DoAll(SaveArg<0>(&packet5_), Return(true))); 653 SaveArg<0>(&packet5_));
660 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 654 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
661 DoAll(SaveArg<0>(&packet6_), Return(true))); 655 SaveArg<0>(&packet6_));
662 } 656 }
663 // Send enough data to create 3 packets with MUST_FEC_PROTECT flag. 657 // Send enough data to create 3 packets with MUST_FEC_PROTECT flag.
664 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 658 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
665 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true, 659 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true,
666 MUST_FEC_PROTECT, NULL); 660 MUST_FEC_PROTECT, NULL);
667 EXPECT_EQ(data_len, consumed.bytes_consumed); 661 EXPECT_EQ(data_len, consumed.bytes_consumed);
668 EXPECT_FALSE(generator_.HasQueuedFrames()); 662 EXPECT_FALSE(generator_.HasQueuedFrames());
669 663
670 // Verify that two FEC packets were sent. 664 // Verify that two FEC packets were sent.
671 CheckPacketHasSingleStreamFrame(packet2_); 665 CheckPacketHasSingleStreamFrame(packet2_);
672 CheckPacketHasSingleStreamFrame(packet3_); 666 CheckPacketHasSingleStreamFrame(packet3_);
673 CheckPacketIsFec(packet4_, /*fec_group=*/2u); 667 CheckPacketIsFec(packet4_, /*fec_group=*/2u);
674 CheckPacketHasSingleStreamFrame(packet5_); 668 CheckPacketHasSingleStreamFrame(packet5_);
675 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream. 669 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream.
676 670
677 // Send one unprotected data packet. 671 // Send one unprotected data packet.
678 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 672 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
679 DoAll(SaveArg<0>(&packet7_), Return(true))); 673 SaveArg<0>(&packet7_));
680 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 674 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
681 MAY_FEC_PROTECT, NULL); 675 MAY_FEC_PROTECT, NULL);
682 EXPECT_EQ(1u, consumed.bytes_consumed); 676 EXPECT_EQ(1u, consumed.bytes_consumed);
683 EXPECT_FALSE(generator_.HasQueuedFrames()); 677 EXPECT_FALSE(generator_.HasQueuedFrames());
684 EXPECT_FALSE(creator_->IsFecProtected()); 678 EXPECT_FALSE(creator_->IsFecProtected());
685 // Verify that one unprotected data packet was sent. 679 // Verify that one unprotected data packet was sent.
686 CheckPacketContains(contents, packet7_); 680 CheckPacketContains(contents, packet7_);
687 } 681 }
688 682
689 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) { 683 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) {
690 delegate_.SetCanWriteAnything(); 684 delegate_.SetCanWriteAnything();
691 // Enable FEC. 685 // Enable FEC.
692 creator_->set_max_packets_per_fec_group(2); 686 creator_->set_max_packets_per_fec_group(2);
693 687
694 generator_.StartBatchOperations(); 688 generator_.StartBatchOperations();
695 // Queue enough data to prevent a stream frame with a non-zero offset from 689 // Queue enough data to prevent a stream frame with a non-zero offset from
696 // fitting. 690 // fitting.
697 QuicConsumedData consumed = generator_.ConsumeData( 691 QuicConsumedData consumed = generator_.ConsumeData(
698 7, CreateData(1u), 0, true, MAY_FEC_PROTECT, NULL); 692 7, CreateData(1u), 0, true, MAY_FEC_PROTECT, NULL);
699 EXPECT_EQ(1u, consumed.bytes_consumed); 693 EXPECT_EQ(1u, consumed.bytes_consumed);
700 EXPECT_TRUE(creator_->HasPendingFrames()); 694 EXPECT_TRUE(creator_->HasPendingFrames());
701 695
702 // Queue protected data for sending. Should cause queued frames to be flushed. 696 // Queue protected data for sending. Should cause queued frames to be flushed.
703 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 697 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
704 DoAll(SaveArg<0>(&packet_), Return(true))); 698 SaveArg<0>(&packet_));
705 EXPECT_FALSE(creator_->IsFecProtected()); 699 EXPECT_FALSE(creator_->IsFecProtected());
706 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 700 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
707 MUST_FEC_PROTECT, NULL); 701 MUST_FEC_PROTECT, NULL);
708 EXPECT_EQ(1u, consumed.bytes_consumed); 702 EXPECT_EQ(1u, consumed.bytes_consumed);
709 PacketContents contents; 703 PacketContents contents;
710 contents.num_stream_frames = 1; 704 contents.num_stream_frames = 1;
711 // Transmitted packet was not FEC protected. 705 // Transmitted packet was not FEC protected.
712 CheckPacketContains(contents, packet_); 706 CheckPacketContains(contents, packet_);
713 EXPECT_TRUE(creator_->IsFecProtected()); 707 EXPECT_TRUE(creator_->IsFecProtected());
714 EXPECT_TRUE(creator_->HasPendingFrames()); 708 EXPECT_TRUE(creator_->HasPendingFrames());
(...skipping 16 matching lines...) Expand all
731 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce( 725 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce(
732 Return(CreateStopWaitingFrame())); 726 Return(CreateStopWaitingFrame()));
733 727
734 // Generator should have queued control frames, and creator should be empty. 728 // Generator should have queued control frames, and creator should be empty.
735 EXPECT_TRUE(generator_.HasQueuedFrames()); 729 EXPECT_TRUE(generator_.HasQueuedFrames());
736 EXPECT_FALSE(creator_->HasPendingFrames()); 730 EXPECT_FALSE(creator_->HasPendingFrames());
737 EXPECT_FALSE(creator_->IsFecProtected()); 731 EXPECT_FALSE(creator_->IsFecProtected());
738 732
739 // Queue protected data for sending. Should cause queued frames to be flushed. 733 // Queue protected data for sending. Should cause queued frames to be flushed.
740 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 734 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
741 DoAll(SaveArg<0>(&packet_), Return(true))); 735 SaveArg<0>(&packet_));
742 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 736 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
743 MUST_FEC_PROTECT, NULL); 737 MUST_FEC_PROTECT, NULL);
744 EXPECT_EQ(1u, consumed.bytes_consumed); 738 EXPECT_EQ(1u, consumed.bytes_consumed);
745 PacketContents contents; 739 PacketContents contents;
746 contents.num_ack_frames = 1; 740 contents.num_ack_frames = 1;
747 contents.num_feedback_frames = 1; 741 contents.num_feedback_frames = 1;
748 contents.num_stop_waiting_frames = 1; 742 contents.num_stop_waiting_frames = 1;
749 CheckPacketContains(contents, packet_); 743 CheckPacketContains(contents, packet_);
750 744
751 // FEC protection should be on in creator. 745 // FEC protection should be on in creator.
(...skipping 11 matching lines...) Expand all
763 generator_.StartBatchOperations(); 757 generator_.StartBatchOperations();
764 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 758 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
765 MUST_FEC_PROTECT, NULL); 759 MUST_FEC_PROTECT, NULL);
766 EXPECT_EQ(1u, consumed.bytes_consumed); 760 EXPECT_EQ(1u, consumed.bytes_consumed);
767 // Creator has a pending protected frame. 761 // Creator has a pending protected frame.
768 EXPECT_TRUE(creator_->HasPendingFrames()); 762 EXPECT_TRUE(creator_->HasPendingFrames());
769 EXPECT_TRUE(creator_->IsFecProtected()); 763 EXPECT_TRUE(creator_->IsFecProtected());
770 764
771 // Add enough unprotected data to exceed size of current packet, so that 765 // Add enough unprotected data to exceed size of current packet, so that
772 // current packet is sent. Both frames will be sent out in a single packet. 766 // current packet is sent. Both frames will be sent out in a single packet.
773 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 767 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
774 DoAll(SaveArg<0>(&packet_), Return(true)));
775 size_t data_len = kDefaultMaxPacketSize; 768 size_t data_len = kDefaultMaxPacketSize;
776 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 769 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
777 MAY_FEC_PROTECT, NULL); 770 MAY_FEC_PROTECT, NULL);
778 EXPECT_EQ(data_len, consumed.bytes_consumed); 771 EXPECT_EQ(data_len, consumed.bytes_consumed);
779 PacketContents contents; 772 PacketContents contents;
780 contents.num_stream_frames = 2u; 773 contents.num_stream_frames = 2u;
781 contents.fec_group = 1u; 774 contents.fec_group = 1u;
782 CheckPacketContains(contents, packet_); 775 CheckPacketContains(contents, packet_);
783 // FEC protection should still be on in creator. 776 // FEC protection should still be on in creator.
784 EXPECT_TRUE(creator_->IsFecProtected()); 777 EXPECT_TRUE(creator_->IsFecProtected());
785 } 778 }
786 779
787 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) { 780 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) {
788 delegate_.SetCanWriteAnything(); 781 delegate_.SetCanWriteAnything();
789 782
790 // Enable FEC. 783 // Enable FEC.
791 creator_->set_max_packets_per_fec_group(2); 784 creator_->set_max_packets_per_fec_group(2);
792 EXPECT_FALSE(creator_->IsFecProtected()); 785 EXPECT_FALSE(creator_->IsFecProtected());
793 786
794 generator_.StartBatchOperations(); 787 generator_.StartBatchOperations();
795 // Send first packet, FEC protected. 788 // Send first packet, FEC protected.
796 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 789 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
797 DoAll(SaveArg<0>(&packet_), Return(true)));
798 // Write enough data to cause a packet to be emitted. 790 // Write enough data to cause a packet to be emitted.
799 size_t data_len = kDefaultMaxPacketSize; 791 size_t data_len = kDefaultMaxPacketSize;
800 QuicConsumedData consumed = generator_.ConsumeData( 792 QuicConsumedData consumed = generator_.ConsumeData(
801 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL); 793 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL);
802 EXPECT_EQ(data_len, consumed.bytes_consumed); 794 EXPECT_EQ(data_len, consumed.bytes_consumed);
803 PacketContents contents; 795 PacketContents contents;
804 contents.num_stream_frames = 1u; 796 contents.num_stream_frames = 1u;
805 contents.fec_group = 1u; 797 contents.fec_group = 1u;
806 CheckPacketContains(contents, packet_); 798 CheckPacketContains(contents, packet_);
807 799
808 // FEC should still be on in creator. 800 // FEC should still be on in creator.
809 EXPECT_TRUE(creator_->IsFecProtected()); 801 EXPECT_TRUE(creator_->IsFecProtected());
810 802
811 // Send enough unprotected data to cause second packet to be sent, which gets 803 // Send enough unprotected data to cause second packet to be sent, which gets
812 // protected because it happens to fall within an open FEC group. Data packet 804 // protected because it happens to fall within an open FEC group. Data packet
813 // will be followed by FEC packet. 805 // will be followed by FEC packet.
814 { 806 {
815 InSequence dummy; 807 InSequence dummy;
816 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 808 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
817 DoAll(SaveArg<0>(&packet2_), Return(true))); 809 SaveArg<0>(&packet2_));
818 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 810 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
819 DoAll(SaveArg<0>(&packet3_), Return(true))); 811 SaveArg<0>(&packet3_));
820 } 812 }
821 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 813 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
822 MAY_FEC_PROTECT, NULL); 814 MAY_FEC_PROTECT, NULL);
823 EXPECT_EQ(data_len, consumed.bytes_consumed); 815 EXPECT_EQ(data_len, consumed.bytes_consumed);
824 contents.num_stream_frames = 2u; 816 contents.num_stream_frames = 2u;
825 CheckPacketContains(contents, packet2_); 817 CheckPacketContains(contents, packet2_);
826 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 818 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
827 819
828 // FEC protection should be off in creator. 820 // FEC protection should be off in creator.
829 EXPECT_FALSE(creator_->IsFecProtected()); 821 EXPECT_FALSE(creator_->IsFecProtected());
830 } 822 }
831 823
832 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) { 824 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) {
833 delegate_.SetCanWriteAnything(); 825 delegate_.SetCanWriteAnything();
834 generator_.StartBatchOperations(); 826 generator_.StartBatchOperations();
835 827
836 // Enable FEC. 828 // Enable FEC.
837 creator_->set_max_packets_per_fec_group(2); 829 creator_->set_max_packets_per_fec_group(2);
838 EXPECT_FALSE(creator_->IsFecProtected()); 830 EXPECT_FALSE(creator_->IsFecProtected());
839 831
840 // Queue one byte of FEC protected data. 832 // Queue one byte of FEC protected data.
841 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 833 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
842 MUST_FEC_PROTECT, NULL); 834 MUST_FEC_PROTECT, NULL);
843 EXPECT_TRUE(creator_->HasPendingFrames()); 835 EXPECT_TRUE(creator_->HasPendingFrames());
844 836
845 // Add more unprotected data causing first packet to be sent, FEC protected. 837 // Add more unprotected data causing first packet to be sent, FEC protected.
846 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 838 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
847 DoAll(SaveArg<0>(&packet_), Return(true))); 839 SaveArg<0>(&packet_));
848 size_t data_len = kDefaultMaxPacketSize; 840 size_t data_len = kDefaultMaxPacketSize;
849 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 841 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
850 MAY_FEC_PROTECT, NULL); 842 MAY_FEC_PROTECT, NULL);
851 EXPECT_EQ(data_len, consumed.bytes_consumed); 843 EXPECT_EQ(data_len, consumed.bytes_consumed);
852 PacketContents contents; 844 PacketContents contents;
853 contents.num_stream_frames = 2u; 845 contents.num_stream_frames = 2u;
854 contents.fec_group = 1u; 846 contents.fec_group = 1u;
855 CheckPacketContains(contents, packet_); 847 CheckPacketContains(contents, packet_);
856 848
857 // FEC group is still open in creator. 849 // FEC group is still open in creator.
858 EXPECT_TRUE(creator_->IsFecProtected()); 850 EXPECT_TRUE(creator_->IsFecProtected());
859 851
860 // Add data that should be protected, large enough to cause second packet to 852 // Add data that should be protected, large enough to cause second packet to
861 // be sent. Data packet should be followed by FEC packet. 853 // be sent. Data packet should be followed by FEC packet.
862 { 854 {
863 InSequence dummy; 855 InSequence dummy;
864 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 856 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
865 DoAll(SaveArg<0>(&packet2_), Return(true))); 857 SaveArg<0>(&packet2_));
866 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 858 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
867 DoAll(SaveArg<0>(&packet3_), Return(true))); 859 SaveArg<0>(&packet3_));
868 } 860 }
869 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 861 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
870 MUST_FEC_PROTECT, NULL); 862 MUST_FEC_PROTECT, NULL);
871 EXPECT_EQ(data_len, consumed.bytes_consumed); 863 EXPECT_EQ(data_len, consumed.bytes_consumed);
872 CheckPacketContains(contents, packet2_); 864 CheckPacketContains(contents, packet2_);
873 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 865 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
874 866
875 // FEC protection should remain on in creator. 867 // FEC protection should remain on in creator.
876 EXPECT_TRUE(creator_->IsFecProtected()); 868 EXPECT_TRUE(creator_->IsFecProtected());
877 } 869 }
(...skipping 14 matching lines...) Expand all
892 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 884 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
893 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 885 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
894 Return(CreateFeedbackFrame())); 886 Return(CreateFeedbackFrame()));
895 887
896 // Send some data and a control frame 888 // Send some data and a control frame
897 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, 889 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false,
898 MAY_FEC_PROTECT, NULL); 890 MAY_FEC_PROTECT, NULL);
899 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 891 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
900 892
901 // All five frames will be flushed out in a single packet. 893 // All five frames will be flushed out in a single packet.
902 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 894 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
903 DoAll(SaveArg<0>(&packet_), Return(true)));
904 generator_.FinishBatchOperations(); 895 generator_.FinishBatchOperations();
905 EXPECT_FALSE(generator_.HasQueuedFrames()); 896 EXPECT_FALSE(generator_.HasQueuedFrames());
906 897
907 PacketContents contents; 898 PacketContents contents;
908 contents.num_ack_frames = 1; 899 contents.num_ack_frames = 1;
909 contents.num_goaway_frames = 1; 900 contents.num_goaway_frames = 1;
910 contents.num_feedback_frames = 1; 901 contents.num_feedback_frames = 1;
911 contents.num_rst_stream_frames = 1; 902 contents.num_rst_stream_frames = 1;
912 contents.num_stream_frames = 1; 903 contents.num_stream_frames = 1;
913 CheckPacketContains(contents, packet_); 904 CheckPacketContains(contents, packet_);
(...skipping 11 matching lines...) Expand all
925 generator_.StartBatchOperations(); 916 generator_.StartBatchOperations();
926 917
927 // When the first write operation is invoked, the ack and feedback 918 // When the first write operation is invoked, the ack and feedback
928 // frames will be returned. 919 // frames will be returned.
929 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 920 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
930 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 921 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
931 Return(CreateFeedbackFrame())); 922 Return(CreateFeedbackFrame()));
932 923
933 { 924 {
934 InSequence dummy; 925 InSequence dummy;
935 // All five frames will be flushed out in a single packet 926 // All five frames will be flushed out in a single packet
936 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 927 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
937 DoAll(SaveArg<0>(&packet_), Return(true))); 928 SaveArg<0>(&packet_));
938 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 929 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
939 DoAll(SaveArg<0>(&packet2_), Return(true))); 930 SaveArg<0>(&packet2_));
940 } 931 }
941 932
942 // Send enough data to exceed one packet 933 // Send enough data to exceed one packet
943 size_t data_len = kDefaultMaxPacketSize + 100; 934 size_t data_len = kDefaultMaxPacketSize + 100;
944 QuicConsumedData consumed = 935 QuicConsumedData consumed =
945 generator_.ConsumeData(3, CreateData(data_len), 0, true, 936 generator_.ConsumeData(3, CreateData(data_len), 0, true,
946 MAY_FEC_PROTECT, NULL); 937 MAY_FEC_PROTECT, NULL);
947 EXPECT_EQ(data_len, consumed.bytes_consumed); 938 EXPECT_EQ(data_len, consumed.bytes_consumed);
948 EXPECT_TRUE(consumed.fin_consumed); 939 EXPECT_TRUE(consumed.fin_consumed);
949 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 940 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
(...skipping 11 matching lines...) Expand all
961 952
962 // The second should have the remainder of the stream data. 953 // The second should have the remainder of the stream data.
963 PacketContents contents2; 954 PacketContents contents2;
964 contents2.num_goaway_frames = 1; 955 contents2.num_goaway_frames = 1;
965 contents2.num_stream_frames = 1; 956 contents2.num_stream_frames = 1;
966 CheckPacketContains(contents2, packet2_); 957 CheckPacketContains(contents2, packet2_);
967 } 958 }
968 959
969 } // namespace test 960 } // namespace test
970 } // namespace net 961 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.h ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698