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

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

Issue 329933003: Refactor the Connection and Generator so the Creator is completely (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/test_tools/quic_connection_peer.cc » ('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"
11 #include "net/quic/crypto/quic_decrypter.h" 11 #include "net/quic/crypto/quic_decrypter.h"
12 #include "net/quic/crypto/quic_encrypter.h" 12 #include "net/quic/crypto/quic_encrypter.h"
13 #include "net/quic/quic_utils.h" 13 #include "net/quic/quic_utils.h"
14 #include "net/quic/test_tools/quic_packet_creator_peer.h" 14 #include "net/quic/test_tools/quic_packet_creator_peer.h"
15 #include "net/quic/test_tools/quic_packet_generator_peer.h"
15 #include "net/quic/test_tools/quic_test_utils.h" 16 #include "net/quic/test_tools/quic_test_utils.h"
16 #include "net/quic/test_tools/simple_quic_framer.h" 17 #include "net/quic/test_tools/simple_quic_framer.h"
17 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 20
20 using base::StringPiece; 21 using base::StringPiece;
21 using std::string; 22 using std::string;
22 using testing::InSequence; 23 using testing::InSequence;
23 using testing::Return; 24 using testing::Return;
24 using testing::SaveArg; 25 using testing::SaveArg;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 99
99 QuicFecGroupNumber fec_group; 100 QuicFecGroupNumber fec_group;
100 }; 101 };
101 102
102 } // namespace 103 } // namespace
103 104
104 class QuicPacketGeneratorTest : public ::testing::Test { 105 class QuicPacketGeneratorTest : public ::testing::Test {
105 protected: 106 protected:
106 QuicPacketGeneratorTest() 107 QuicPacketGeneratorTest()
107 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false), 108 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false),
108 creator_(42, &framer_, &random_, false), 109 generator_(42, &framer_, &random_, &delegate_),
109 generator_(&delegate_, NULL, &creator_), 110 creator_(QuicPacketGeneratorPeer::GetPacketCreator(&generator_)),
110 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 111 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
111 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 112 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
112 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 113 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
113 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 114 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
114 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 115 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
115 packet6_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 116 packet6_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
116 packet7_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) { 117 packet7_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) {
117 } 118 }
118 119
119 virtual ~QuicPacketGeneratorTest() OVERRIDE { 120 virtual ~QuicPacketGeneratorTest() OVERRIDE {
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 IOVector CreateData(size_t len) { 217 IOVector CreateData(size_t len) {
217 data_array_.reset(new char[len]); 218 data_array_.reset(new char[len]);
218 memset(data_array_.get(), '?', len); 219 memset(data_array_.get(), '?', len);
219 IOVector data; 220 IOVector data;
220 data.Append(data_array_.get(), len); 221 data.Append(data_array_.get(), len);
221 return data; 222 return data;
222 } 223 }
223 224
224 QuicFramer framer_; 225 QuicFramer framer_;
225 MockRandom random_; 226 MockRandom random_;
226 QuicPacketCreator creator_;
227 StrictMock<MockDelegate> delegate_; 227 StrictMock<MockDelegate> delegate_;
228 QuicPacketGenerator generator_; 228 QuicPacketGenerator generator_;
229 QuicPacketCreator* creator_;
229 SimpleQuicFramer simple_framer_; 230 SimpleQuicFramer simple_framer_;
230 SerializedPacket packet_; 231 SerializedPacket packet_;
231 SerializedPacket packet2_; 232 SerializedPacket packet2_;
232 SerializedPacket packet3_; 233 SerializedPacket packet3_;
233 SerializedPacket packet4_; 234 SerializedPacket packet4_;
234 SerializedPacket packet5_; 235 SerializedPacket packet5_;
235 SerializedPacket packet6_; 236 SerializedPacket packet6_;
236 SerializedPacket packet7_; 237 SerializedPacket packet7_;
237 238
238 private: 239 private:
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 444
444 PacketContents contents; 445 PacketContents contents;
445 contents.num_stream_frames = 2; 446 contents.num_stream_frames = 2;
446 CheckPacketContains(contents, packet_); 447 CheckPacketContains(contents, packet_);
447 } 448 }
448 449
449 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { 450 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) {
450 delegate_.SetCanWriteAnything(); 451 delegate_.SetCanWriteAnything();
451 452
452 // Send FEC every two packets. 453 // Send FEC every two packets.
453 creator_.set_max_packets_per_fec_group(2); 454 creator_->set_max_packets_per_fec_group(2);
454 455
455 { 456 {
456 InSequence dummy; 457 InSequence dummy;
457 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 458 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
458 DoAll(SaveArg<0>(&packet_), Return(true))); 459 DoAll(SaveArg<0>(&packet_), Return(true)));
459 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 460 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
460 DoAll(SaveArg<0>(&packet2_), Return(true))); 461 DoAll(SaveArg<0>(&packet2_), Return(true)));
461 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 462 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
462 DoAll(SaveArg<0>(&packet3_), Return(true))); 463 DoAll(SaveArg<0>(&packet3_), Return(true)));
463 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 464 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
(...skipping 17 matching lines...) Expand all
481 CheckPacketIsFec(packet3_, 1); 482 CheckPacketIsFec(packet3_, 1);
482 483
483 CheckPacketHasSingleStreamFrame(packet4_); 484 CheckPacketHasSingleStreamFrame(packet4_);
484 CheckPacketIsFec(packet5_, 4); 485 CheckPacketIsFec(packet5_, 4);
485 } 486 }
486 487
487 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { 488 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) {
488 delegate_.SetCanWriteAnything(); 489 delegate_.SetCanWriteAnything();
489 490
490 // Enable FEC. 491 // Enable FEC.
491 creator_.set_max_packets_per_fec_group(6); 492 creator_->set_max_packets_per_fec_group(6);
492 { 493 {
493 InSequence dummy; 494 InSequence dummy;
494 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 495 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
495 DoAll(SaveArg<0>(&packet_), Return(true))); 496 DoAll(SaveArg<0>(&packet_), Return(true)));
496 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 497 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
497 DoAll(SaveArg<0>(&packet2_), Return(true))); 498 DoAll(SaveArg<0>(&packet2_), Return(true)));
498 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 499 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
499 DoAll(SaveArg<0>(&packet3_), Return(true))); 500 DoAll(SaveArg<0>(&packet3_), Return(true)));
500 } 501 }
501 502
(...skipping 10 matching lines...) Expand all
512 CheckPacketHasSingleStreamFrame(packet_); 513 CheckPacketHasSingleStreamFrame(packet_);
513 CheckPacketHasSingleStreamFrame(packet2_); 514 CheckPacketHasSingleStreamFrame(packet2_);
514 CheckPacketIsFec(packet3_, 1); 515 CheckPacketIsFec(packet3_, 1);
515 } 516 }
516 517
517 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { 518 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) {
518 // Set the packet size be enough for two stream frames with 0 stream offset, 519 // Set the packet size be enough for two stream frames with 0 stream offset,
519 // but not enough for a stream frame of 0 offset and one with non-zero offset. 520 // but not enough for a stream frame of 0 offset and one with non-zero offset.
520 size_t length = 521 size_t length =
521 NullEncrypter().GetCiphertextSize(0) + 522 NullEncrypter().GetCiphertextSize(0) +
522 GetPacketHeaderSize(creator_.connection_id_length(), 523 GetPacketHeaderSize(creator_->connection_id_length(),
523 true, 524 true,
524 creator_.next_sequence_number_length(), 525 creator_->next_sequence_number_length(),
525 NOT_IN_FEC_GROUP) + 526 NOT_IN_FEC_GROUP) +
526 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger 527 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger
527 // than the GetMinStreamFrameSize. 528 // than the GetMinStreamFrameSize.
528 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, false, 529 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, false,
529 NOT_IN_FEC_GROUP) + 3 + 530 NOT_IN_FEC_GROUP) + 3 +
530 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, true, 531 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, true,
531 NOT_IN_FEC_GROUP) + 1; 532 NOT_IN_FEC_GROUP) + 1;
532 creator_.set_max_packet_length(length); 533 creator_->set_max_packet_length(length);
533 delegate_.SetCanWriteAnything(); 534 delegate_.SetCanWriteAnything();
534 { 535 {
535 InSequence dummy; 536 InSequence dummy;
536 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 537 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
537 DoAll(SaveArg<0>(&packet_), Return(true))); 538 DoAll(SaveArg<0>(&packet_), Return(true)));
538 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 539 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
539 DoAll(SaveArg<0>(&packet2_), Return(true))); 540 DoAll(SaveArg<0>(&packet2_), Return(true)));
540 } 541 }
541 generator_.StartBatchOperations(); 542 generator_.StartBatchOperations();
542 // Queue enough data to prevent a stream frame with a non-zero offset from 543 // Queue enough data to prevent a stream frame with a non-zero offset from
(...skipping 15 matching lines...) Expand all
558 559
559 PacketContents contents; 560 PacketContents contents;
560 contents.num_stream_frames = 1; 561 contents.num_stream_frames = 1;
561 CheckPacketContains(contents, packet_); 562 CheckPacketContains(contents, packet_);
562 CheckPacketContains(contents, packet2_); 563 CheckPacketContains(contents, packet2_);
563 } 564 }
564 565
565 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) { 566 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) {
566 delegate_.SetCanWriteAnything(); 567 delegate_.SetCanWriteAnything();
567 // Enable FEC. 568 // Enable FEC.
568 creator_.set_max_packets_per_fec_group(2); 569 creator_->set_max_packets_per_fec_group(2);
569 EXPECT_FALSE(creator_.IsFecProtected()); 570 EXPECT_FALSE(creator_->IsFecProtected());
570 571
571 // Send one unprotected data packet. 572 // Send one unprotected data packet.
572 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 573 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
573 DoAll(SaveArg<0>(&packet_), Return(true))); 574 DoAll(SaveArg<0>(&packet_), Return(true)));
574 QuicConsumedData consumed = 575 QuicConsumedData consumed =
575 generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT, 576 generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT,
576 NULL); 577 NULL);
577 EXPECT_EQ(1u, consumed.bytes_consumed); 578 EXPECT_EQ(1u, consumed.bytes_consumed);
578 EXPECT_FALSE(generator_.HasQueuedFrames()); 579 EXPECT_FALSE(generator_.HasQueuedFrames());
579 EXPECT_FALSE(creator_.IsFecProtected()); 580 EXPECT_FALSE(creator_->IsFecProtected());
580 // Verify that one data packet was sent. 581 // Verify that one data packet was sent.
581 PacketContents contents; 582 PacketContents contents;
582 contents.num_stream_frames = 1; 583 contents.num_stream_frames = 1;
583 CheckPacketContains(contents, packet_); 584 CheckPacketContains(contents, packet_);
584 585
585 { 586 {
586 InSequence dummy; 587 InSequence dummy;
587 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 588 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
588 DoAll(SaveArg<0>(&packet2_), Return(true))); 589 DoAll(SaveArg<0>(&packet2_), Return(true)));
589 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 590 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
(...skipping 19 matching lines...) Expand all
609 CheckPacketHasSingleStreamFrame(packet5_); 610 CheckPacketHasSingleStreamFrame(packet5_);
610 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream. 611 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream.
611 612
612 // Send one unprotected data packet. 613 // Send one unprotected data packet.
613 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 614 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
614 DoAll(SaveArg<0>(&packet7_), Return(true))); 615 DoAll(SaveArg<0>(&packet7_), Return(true)));
615 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 616 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
616 MAY_FEC_PROTECT, NULL); 617 MAY_FEC_PROTECT, NULL);
617 EXPECT_EQ(1u, consumed.bytes_consumed); 618 EXPECT_EQ(1u, consumed.bytes_consumed);
618 EXPECT_FALSE(generator_.HasQueuedFrames()); 619 EXPECT_FALSE(generator_.HasQueuedFrames());
619 EXPECT_FALSE(creator_.IsFecProtected()); 620 EXPECT_FALSE(creator_->IsFecProtected());
620 // Verify that one unprotected data packet was sent. 621 // Verify that one unprotected data packet was sent.
621 CheckPacketContains(contents, packet7_); 622 CheckPacketContains(contents, packet7_);
622 } 623 }
623 624
624 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) { 625 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) {
625 delegate_.SetCanWriteAnything(); 626 delegate_.SetCanWriteAnything();
626 // Enable FEC. 627 // Enable FEC.
627 creator_.set_max_packets_per_fec_group(2); 628 creator_->set_max_packets_per_fec_group(2);
628 629
629 generator_.StartBatchOperations(); 630 generator_.StartBatchOperations();
630 // Queue enough data to prevent a stream frame with a non-zero offset from 631 // Queue enough data to prevent a stream frame with a non-zero offset from
631 // fitting. 632 // fitting.
632 QuicConsumedData consumed = generator_.ConsumeData( 633 QuicConsumedData consumed = generator_.ConsumeData(
633 7, CreateData(1u), 0, true, MAY_FEC_PROTECT, NULL); 634 7, CreateData(1u), 0, true, MAY_FEC_PROTECT, NULL);
634 EXPECT_EQ(1u, consumed.bytes_consumed); 635 EXPECT_EQ(1u, consumed.bytes_consumed);
635 EXPECT_TRUE(creator_.HasPendingFrames()); 636 EXPECT_TRUE(creator_->HasPendingFrames());
636 637
637 // Queue protected data for sending. Should cause queued frames to be flushed. 638 // Queue protected data for sending. Should cause queued frames to be flushed.
638 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 639 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
639 DoAll(SaveArg<0>(&packet_), Return(true))); 640 DoAll(SaveArg<0>(&packet_), Return(true)));
640 EXPECT_FALSE(creator_.IsFecProtected()); 641 EXPECT_FALSE(creator_->IsFecProtected());
641 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 642 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
642 MUST_FEC_PROTECT, NULL); 643 MUST_FEC_PROTECT, NULL);
643 EXPECT_EQ(1u, consumed.bytes_consumed); 644 EXPECT_EQ(1u, consumed.bytes_consumed);
644 PacketContents contents; 645 PacketContents contents;
645 contents.num_stream_frames = 1; 646 contents.num_stream_frames = 1;
646 // Transmitted packet was not FEC protected. 647 // Transmitted packet was not FEC protected.
647 CheckPacketContains(contents, packet_); 648 CheckPacketContains(contents, packet_);
648 EXPECT_TRUE(creator_.IsFecProtected()); 649 EXPECT_TRUE(creator_->IsFecProtected());
649 EXPECT_TRUE(creator_.HasPendingFrames()); 650 EXPECT_TRUE(creator_->HasPendingFrames());
650 } 651 }
651 652
652 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFramesInGenerator) { 653 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFramesInGenerator) {
653 // Enable FEC. 654 // Enable FEC.
654 creator_.set_max_packets_per_fec_group(2); 655 creator_->set_max_packets_per_fec_group(2);
655 656
656 // Queue control frames in generator. 657 // Queue control frames in generator.
657 delegate_.SetCanNotWrite(); 658 delegate_.SetCanNotWrite();
658 generator_.SetShouldSendAck(true, true); 659 generator_.SetShouldSendAck(true, true);
659 delegate_.SetCanWriteAnything(); 660 delegate_.SetCanWriteAnything();
660 generator_.StartBatchOperations(); 661 generator_.StartBatchOperations();
661 662
662 // Set up frames to write into the creator when control frames are written. 663 // Set up frames to write into the creator when control frames are written.
663 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 664 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
664 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 665 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
665 Return(CreateFeedbackFrame())); 666 Return(CreateFeedbackFrame()));
666 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce( 667 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce(
667 Return(CreateStopWaitingFrame())); 668 Return(CreateStopWaitingFrame()));
668 669
669 // Generator should have queued control frames, and creator should be empty. 670 // Generator should have queued control frames, and creator should be empty.
670 EXPECT_TRUE(generator_.HasQueuedFrames()); 671 EXPECT_TRUE(generator_.HasQueuedFrames());
671 EXPECT_FALSE(creator_.HasPendingFrames()); 672 EXPECT_FALSE(creator_->HasPendingFrames());
672 EXPECT_FALSE(creator_.IsFecProtected()); 673 EXPECT_FALSE(creator_->IsFecProtected());
673 674
674 // Queue protected data for sending. Should cause queued frames to be flushed. 675 // Queue protected data for sending. Should cause queued frames to be flushed.
675 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 676 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
676 DoAll(SaveArg<0>(&packet_), Return(true))); 677 DoAll(SaveArg<0>(&packet_), Return(true)));
677 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 678 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
678 MUST_FEC_PROTECT, NULL); 679 MUST_FEC_PROTECT, NULL);
679 EXPECT_EQ(1u, consumed.bytes_consumed); 680 EXPECT_EQ(1u, consumed.bytes_consumed);
680 PacketContents contents; 681 PacketContents contents;
681 contents.num_ack_frames = 1; 682 contents.num_ack_frames = 1;
682 contents.num_feedback_frames = 1; 683 contents.num_feedback_frames = 1;
683 contents.num_stop_waiting_frames = 1; 684 contents.num_stop_waiting_frames = 1;
684 CheckPacketContains(contents, packet_); 685 CheckPacketContains(contents, packet_);
685 686
686 // FEC protection should be on in creator. 687 // FEC protection should be on in creator.
687 EXPECT_TRUE(creator_.IsFecProtected()); 688 EXPECT_TRUE(creator_->IsFecProtected());
688 } 689 }
689 690
690 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentFramesProtected) { 691 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentFramesProtected) {
691 delegate_.SetCanWriteAnything(); 692 delegate_.SetCanWriteAnything();
692 693
693 // Enable FEC. 694 // Enable FEC.
694 creator_.set_max_packets_per_fec_group(2); 695 creator_->set_max_packets_per_fec_group(2);
695 EXPECT_FALSE(creator_.IsFecProtected()); 696 EXPECT_FALSE(creator_->IsFecProtected());
696 697
697 // Queue stream frame to be protected in creator. 698 // Queue stream frame to be protected in creator.
698 generator_.StartBatchOperations(); 699 generator_.StartBatchOperations();
699 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 700 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
700 MUST_FEC_PROTECT, NULL); 701 MUST_FEC_PROTECT, NULL);
701 EXPECT_EQ(1u, consumed.bytes_consumed); 702 EXPECT_EQ(1u, consumed.bytes_consumed);
702 // Creator has a pending protected frame. 703 // Creator has a pending protected frame.
703 EXPECT_TRUE(creator_.HasPendingFrames()); 704 EXPECT_TRUE(creator_->HasPendingFrames());
704 EXPECT_TRUE(creator_.IsFecProtected()); 705 EXPECT_TRUE(creator_->IsFecProtected());
705 706
706 // Add enough unprotected data to exceed size of current packet, so that 707 // Add enough unprotected data to exceed size of current packet, so that
707 // current packet is sent. Both frames will be sent out in a single packet. 708 // current packet is sent. Both frames will be sent out in a single packet.
708 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 709 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
709 DoAll(SaveArg<0>(&packet_), Return(true))); 710 DoAll(SaveArg<0>(&packet_), Return(true)));
710 size_t data_len = kDefaultMaxPacketSize; 711 size_t data_len = kDefaultMaxPacketSize;
711 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 712 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
712 MAY_FEC_PROTECT, NULL); 713 MAY_FEC_PROTECT, NULL);
713 EXPECT_EQ(data_len, consumed.bytes_consumed); 714 EXPECT_EQ(data_len, consumed.bytes_consumed);
714 PacketContents contents; 715 PacketContents contents;
715 contents.num_stream_frames = 2u; 716 contents.num_stream_frames = 2u;
716 contents.fec_group = 1u; 717 contents.fec_group = 1u;
717 CheckPacketContains(contents, packet_); 718 CheckPacketContains(contents, packet_);
718 // FEC protection should still be on in creator. 719 // FEC protection should still be on in creator.
719 EXPECT_TRUE(creator_.IsFecProtected()); 720 EXPECT_TRUE(creator_->IsFecProtected());
720 } 721 }
721 722
722 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) { 723 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) {
723 delegate_.SetCanWriteAnything(); 724 delegate_.SetCanWriteAnything();
724 725
725 // Enable FEC. 726 // Enable FEC.
726 creator_.set_max_packets_per_fec_group(2); 727 creator_->set_max_packets_per_fec_group(2);
727 EXPECT_FALSE(creator_.IsFecProtected()); 728 EXPECT_FALSE(creator_->IsFecProtected());
728 729
729 generator_.StartBatchOperations(); 730 generator_.StartBatchOperations();
730 // Send first packet, FEC protected. 731 // Send first packet, FEC protected.
731 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 732 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
732 DoAll(SaveArg<0>(&packet_), Return(true))); 733 DoAll(SaveArg<0>(&packet_), Return(true)));
733 // Write enough data to cause a packet to be emitted. 734 // Write enough data to cause a packet to be emitted.
734 size_t data_len = kDefaultMaxPacketSize; 735 size_t data_len = kDefaultMaxPacketSize;
735 QuicConsumedData consumed = generator_.ConsumeData( 736 QuicConsumedData consumed = generator_.ConsumeData(
736 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL); 737 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL);
737 EXPECT_EQ(data_len, consumed.bytes_consumed); 738 EXPECT_EQ(data_len, consumed.bytes_consumed);
738 PacketContents contents; 739 PacketContents contents;
739 contents.num_stream_frames = 1u; 740 contents.num_stream_frames = 1u;
740 contents.fec_group = 1u; 741 contents.fec_group = 1u;
741 CheckPacketContains(contents, packet_); 742 CheckPacketContains(contents, packet_);
742 743
743 // FEC should still be on in creator. 744 // FEC should still be on in creator.
744 EXPECT_TRUE(creator_.IsFecProtected()); 745 EXPECT_TRUE(creator_->IsFecProtected());
745 746
746 // Send enough unprotected data to cause second packet to be sent, which gets 747 // Send enough unprotected data to cause second packet to be sent, which gets
747 // protected because it happens to fall within an open FEC group. Data packet 748 // protected because it happens to fall within an open FEC group. Data packet
748 // will be followed by FEC packet. 749 // will be followed by FEC packet.
749 { 750 {
750 InSequence dummy; 751 InSequence dummy;
751 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 752 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
752 DoAll(SaveArg<0>(&packet2_), Return(true))); 753 DoAll(SaveArg<0>(&packet2_), Return(true)));
753 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 754 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
754 DoAll(SaveArg<0>(&packet3_), Return(true))); 755 DoAll(SaveArg<0>(&packet3_), Return(true)));
755 } 756 }
756 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 757 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
757 MAY_FEC_PROTECT, NULL); 758 MAY_FEC_PROTECT, NULL);
758 EXPECT_EQ(data_len, consumed.bytes_consumed); 759 EXPECT_EQ(data_len, consumed.bytes_consumed);
759 contents.num_stream_frames = 2u; 760 contents.num_stream_frames = 2u;
760 CheckPacketContains(contents, packet2_); 761 CheckPacketContains(contents, packet2_);
761 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 762 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
762 763
763 // FEC protection should be off in creator. 764 // FEC protection should be off in creator.
764 EXPECT_FALSE(creator_.IsFecProtected()); 765 EXPECT_FALSE(creator_->IsFecProtected());
765 } 766 }
766 767
767 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) { 768 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) {
768 delegate_.SetCanWriteAnything(); 769 delegate_.SetCanWriteAnything();
769 generator_.StartBatchOperations(); 770 generator_.StartBatchOperations();
770 771
771 // Enable FEC. 772 // Enable FEC.
772 creator_.set_max_packets_per_fec_group(2); 773 creator_->set_max_packets_per_fec_group(2);
773 EXPECT_FALSE(creator_.IsFecProtected()); 774 EXPECT_FALSE(creator_->IsFecProtected());
774 775
775 // Queue one byte of FEC protected data. 776 // Queue one byte of FEC protected data.
776 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 777 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
777 MUST_FEC_PROTECT, NULL); 778 MUST_FEC_PROTECT, NULL);
778 EXPECT_TRUE(creator_.HasPendingFrames()); 779 EXPECT_TRUE(creator_->HasPendingFrames());
779 780
780 // Add more unprotected data causing first packet to be sent, FEC protected. 781 // Add more unprotected data causing first packet to be sent, FEC protected.
781 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 782 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
782 DoAll(SaveArg<0>(&packet_), Return(true))); 783 DoAll(SaveArg<0>(&packet_), Return(true)));
783 size_t data_len = kDefaultMaxPacketSize; 784 size_t data_len = kDefaultMaxPacketSize;
784 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 785 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
785 MAY_FEC_PROTECT, NULL); 786 MAY_FEC_PROTECT, NULL);
786 EXPECT_EQ(data_len, consumed.bytes_consumed); 787 EXPECT_EQ(data_len, consumed.bytes_consumed);
787 PacketContents contents; 788 PacketContents contents;
788 contents.num_stream_frames = 2u; 789 contents.num_stream_frames = 2u;
789 contents.fec_group = 1u; 790 contents.fec_group = 1u;
790 CheckPacketContains(contents, packet_); 791 CheckPacketContains(contents, packet_);
791 792
792 // FEC group is still open in creator. 793 // FEC group is still open in creator.
793 EXPECT_TRUE(creator_.IsFecProtected()); 794 EXPECT_TRUE(creator_->IsFecProtected());
795
794 // Add data that should be protected, large enough to cause second packet to 796 // Add data that should be protected, large enough to cause second packet to
795 // be sent. Data packet should be followed by FEC packet. 797 // be sent. Data packet should be followed by FEC packet.
796 { 798 {
797 InSequence dummy; 799 InSequence dummy;
798 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 800 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
799 DoAll(SaveArg<0>(&packet2_), Return(true))); 801 DoAll(SaveArg<0>(&packet2_), Return(true)));
800 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 802 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
801 DoAll(SaveArg<0>(&packet3_), Return(true))); 803 DoAll(SaveArg<0>(&packet3_), Return(true)));
802 } 804 }
803 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 805 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
804 MUST_FEC_PROTECT, NULL); 806 MUST_FEC_PROTECT, NULL);
805 EXPECT_EQ(data_len, consumed.bytes_consumed); 807 EXPECT_EQ(data_len, consumed.bytes_consumed);
806 CheckPacketContains(contents, packet2_); 808 CheckPacketContains(contents, packet2_);
807 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 809 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
808 810
809 // FEC protection should remain on in creator. 811 // FEC protection should remain on in creator.
810 EXPECT_TRUE(creator_.IsFecProtected()); 812 EXPECT_TRUE(creator_->IsFecProtected());
811 } 813 }
812 814
813 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { 815 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) {
814 delegate_.SetCanNotWrite(); 816 delegate_.SetCanNotWrite();
815 817
816 generator_.SetShouldSendAck(true, false); 818 generator_.SetShouldSendAck(true, false);
817 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 819 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
818 EXPECT_TRUE(generator_.HasQueuedFrames()); 820 EXPECT_TRUE(generator_.HasQueuedFrames());
819 821
820 delegate_.SetCanWriteAnything(); 822 delegate_.SetCanWriteAnything();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 897
896 // The second should have the remainder of the stream data. 898 // The second should have the remainder of the stream data.
897 PacketContents contents2; 899 PacketContents contents2;
898 contents2.num_goaway_frames = 1; 900 contents2.num_goaway_frames = 1;
899 contents2.num_stream_frames = 1; 901 contents2.num_stream_frames = 1;
900 CheckPacketContains(contents2, packet2_); 902 CheckPacketContains(contents2, packet2_);
901 } 903 }
902 904
903 } // namespace test 905 } // namespace test
904 } // namespace net 906 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/test_tools/quic_connection_peer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698