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

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

Issue 326403006: Enables PacketGenerator's use of PacketCreator's FEC primitives. (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.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"
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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 creator_(42, &framer_, &random_, false),
109 generator_(&delegate_, NULL, &creator_), 110 generator_(&delegate_, NULL, &creator_),
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),
116 packet6_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL),
117 packet7_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) {
115 } 118 }
116 119
117 ~QuicPacketGeneratorTest() { 120 ~QuicPacketGeneratorTest() {
118 delete packet_.packet; 121 delete packet_.packet;
119 delete packet_.retransmittable_frames; 122 delete packet_.retransmittable_frames;
120 delete packet2_.packet; 123 delete packet2_.packet;
121 delete packet2_.retransmittable_frames; 124 delete packet2_.retransmittable_frames;
122 delete packet3_.packet; 125 delete packet3_.packet;
123 delete packet3_.retransmittable_frames; 126 delete packet3_.retransmittable_frames;
124 delete packet4_.packet; 127 delete packet4_.packet;
125 delete packet4_.retransmittable_frames; 128 delete packet4_.retransmittable_frames;
126 delete packet5_.packet; 129 delete packet5_.packet;
127 delete packet5_.retransmittable_frames; 130 delete packet5_.retransmittable_frames;
131 delete packet6_.packet;
132 delete packet6_.retransmittable_frames;
133 delete packet7_.packet;
134 delete packet7_.retransmittable_frames;
128 } 135 }
129 136
130 QuicAckFrame* CreateAckFrame() { 137 QuicAckFrame* CreateAckFrame() {
131 // TODO(rch): Initialize this so it can be verified later. 138 // TODO(rch): Initialize this so it can be verified later.
132 return new QuicAckFrame(MakeAckFrame(0, 0)); 139 return new QuicAckFrame(MakeAckFrame(0, 0));
133 } 140 }
134 141
135 QuicCongestionFeedbackFrame* CreateFeedbackFrame() { 142 QuicCongestionFeedbackFrame* CreateFeedbackFrame() {
136 QuicCongestionFeedbackFrame* frame = new QuicCongestionFeedbackFrame; 143 QuicCongestionFeedbackFrame* frame = new QuicCongestionFeedbackFrame;
137 frame->type = kFixRate; 144 frame->type = kFixRate;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 MockRandom random_; 226 MockRandom random_;
220 QuicPacketCreator creator_; 227 QuicPacketCreator creator_;
221 StrictMock<MockDelegate> delegate_; 228 StrictMock<MockDelegate> delegate_;
222 QuicPacketGenerator generator_; 229 QuicPacketGenerator generator_;
223 SimpleQuicFramer simple_framer_; 230 SimpleQuicFramer simple_framer_;
224 SerializedPacket packet_; 231 SerializedPacket packet_;
225 SerializedPacket packet2_; 232 SerializedPacket packet2_;
226 SerializedPacket packet3_; 233 SerializedPacket packet3_;
227 SerializedPacket packet4_; 234 SerializedPacket packet4_;
228 SerializedPacket packet5_; 235 SerializedPacket packet5_;
236 SerializedPacket packet6_;
237 SerializedPacket packet7_;
229 238
230 private: 239 private:
231 scoped_ptr<char[]> data_array_; 240 scoped_ptr<char[]> data_array_;
232 }; 241 };
233 242
234 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegate { 243 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegate {
235 public: 244 public:
236 MOCK_METHOD1(OnFrameAddedToPacket, 245 MOCK_METHOD1(OnFrameAddedToPacket,
237 void(const QuicFrame&)); 246 void(const QuicFrame&));
238 }; 247 };
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 442
434 PacketContents contents; 443 PacketContents contents;
435 contents.num_stream_frames = 2; 444 contents.num_stream_frames = 2;
436 CheckPacketContains(contents, packet_); 445 CheckPacketContains(contents, packet_);
437 } 446 }
438 447
439 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { 448 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) {
440 delegate_.SetCanWriteAnything(); 449 delegate_.SetCanWriteAnything();
441 450
442 // Send FEC every two packets. 451 // Send FEC every two packets.
443 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(&creator_, 2)); 452 creator_.set_max_packets_per_fec_group(2);
453 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
444 454
445 { 455 {
446 InSequence dummy; 456 InSequence dummy;
447 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 457 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
448 DoAll(SaveArg<0>(&packet_), Return(true))); 458 DoAll(SaveArg<0>(&packet_), Return(true)));
449 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 459 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
450 DoAll(SaveArg<0>(&packet2_), Return(true))); 460 DoAll(SaveArg<0>(&packet2_), Return(true)));
451 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 461 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
452 DoAll(SaveArg<0>(&packet3_), Return(true))); 462 DoAll(SaveArg<0>(&packet3_), Return(true)));
453 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 463 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
(...skipping 15 matching lines...) Expand all
469 CheckPacketIsFec(packet3_, 1); 479 CheckPacketIsFec(packet3_, 1);
470 480
471 CheckPacketHasSingleStreamFrame(packet4_); 481 CheckPacketHasSingleStreamFrame(packet4_);
472 CheckPacketIsFec(packet5_, 4); 482 CheckPacketIsFec(packet5_, 4);
473 } 483 }
474 484
475 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { 485 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) {
476 delegate_.SetCanWriteAnything(); 486 delegate_.SetCanWriteAnything();
477 487
478 // Send FEC every six packets. 488 // Send FEC every six packets.
479 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(&creator_, 6)); 489 creator_.set_max_packets_per_fec_group(6);
490 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
480 { 491 {
481 InSequence dummy; 492 InSequence dummy;
482 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 493 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
483 DoAll(SaveArg<0>(&packet_), Return(true))); 494 DoAll(SaveArg<0>(&packet_), Return(true)));
484 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 495 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
485 DoAll(SaveArg<0>(&packet2_), Return(true))); 496 DoAll(SaveArg<0>(&packet2_), Return(true)));
486 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 497 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
487 DoAll(SaveArg<0>(&packet3_), Return(true))); 498 DoAll(SaveArg<0>(&packet3_), Return(true)));
488 } 499 }
489 500
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 EXPECT_EQ(3u, consumed.bytes_consumed); 551 EXPECT_EQ(3u, consumed.bytes_consumed);
541 EXPECT_TRUE(consumed.fin_consumed); 552 EXPECT_TRUE(consumed.fin_consumed);
542 EXPECT_FALSE(generator_.HasQueuedFrames()); 553 EXPECT_FALSE(generator_.HasQueuedFrames());
543 554
544 PacketContents contents; 555 PacketContents contents;
545 contents.num_stream_frames = 1; 556 contents.num_stream_frames = 1;
546 CheckPacketContains(contents, packet_); 557 CheckPacketContains(contents, packet_);
547 CheckPacketContains(contents, packet2_); 558 CheckPacketContains(contents, packet2_);
548 } 559 }
549 560
561 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) {
562 delegate_.SetCanWriteAnything();
563 // Enable FEC.
564 creator_.set_max_packets_per_fec_group(2);
565 EXPECT_FALSE(creator_.IsFecProtected());
566
567 // Send one unprotected data packet.
568 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
569 DoAll(SaveArg<0>(&packet_), Return(true)));
570 QuicConsumedData consumed =
571 generator_.ConsumeData(5, CreateData(1u), 0, true, NULL);
572 EXPECT_EQ(1u, consumed.bytes_consumed);
573 EXPECT_FALSE(generator_.HasQueuedFrames());
574 EXPECT_FALSE(creator_.IsFecProtected());
575 // Verify that one data packet was sent.
576 PacketContents contents;
577 contents.num_stream_frames = 1;
578 CheckPacketContains(contents, packet_);
579
580 // Turn on FEC protection.
581 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
582 EXPECT_TRUE(creator_.IsFecProtected());
583 {
584 InSequence dummy;
585 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
586 DoAll(SaveArg<0>(&packet2_), Return(true)));
587 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
588 DoAll(SaveArg<0>(&packet3_), Return(true)));
589 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
590 DoAll(SaveArg<0>(&packet4_), Return(true)));
591 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
592 DoAll(SaveArg<0>(&packet5_), Return(true)));
593 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
594 DoAll(SaveArg<0>(&packet6_), Return(true)));
595 }
596 // Send enough data to create 3 packets.
597 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
598 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true, NULL);
599 EXPECT_EQ(data_len, consumed.bytes_consumed);
600 EXPECT_FALSE(generator_.HasQueuedFrames());
601 EXPECT_TRUE(creator_.IsFecProtected());
602
603 // Verify that two FEC packets were sent.
604 CheckPacketHasSingleStreamFrame(packet2_);
605 CheckPacketHasSingleStreamFrame(packet3_);
606 CheckPacketIsFec(packet4_, /*fec_group=*/2u);
607 CheckPacketHasSingleStreamFrame(packet5_);
608 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream.
609
610 // Turn off FEC protection and send one unprotected data packet.
611 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, false);
612 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
613 DoAll(SaveArg<0>(&packet7_), Return(true)));
614 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, NULL);
615 EXPECT_EQ(1u, consumed.bytes_consumed);
616 EXPECT_FALSE(generator_.HasQueuedFrames());
617 EXPECT_FALSE(creator_.IsFecProtected());
618 // Verify that one unprotected data packet was sent.
619 CheckPacketContains(contents, packet7_);
620 }
621
622 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) {
623 delegate_.SetCanWriteAnything();
624 // Enable FEC.
625 creator_.set_max_packets_per_fec_group(2);
626
627 generator_.StartBatchOperations();
628 // Queue enough data to prevent a stream frame with a non-zero offset from
629 // fitting.
630 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0,
631 true, NULL);
632 EXPECT_EQ(1u, consumed.bytes_consumed);
633 EXPECT_TRUE(creator_.HasPendingFrames());
634
635 // Turn on FEC protection. Should cause queued frames to be flushed.
636 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
637 DoAll(SaveArg<0>(&packet_), Return(true)));
638 EXPECT_FALSE(creator_.IsFecProtected());
639 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
640 CheckPacketHasSingleStreamFrame(packet_);
641 EXPECT_TRUE(creator_.IsFecProtected());
642 }
643
644 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFramesInGenerator) {
645 // Enable FEC.
646 creator_.set_max_packets_per_fec_group(2);
647
648 // Queue control frames in generator.
649 delegate_.SetCanNotWrite();
650 generator_.SetShouldSendAck(true, true);
651 delegate_.SetCanWriteAnything();
652
653 // Set up frames to write into the creator when control frames are written.
654 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
655 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
656 Return(CreateFeedbackFrame()));
657 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce(
658 Return(CreateStopWaitingFrame()));
659
660 // Generator should have queued control frames, and creator should be empty.
661 EXPECT_TRUE(generator_.HasQueuedFrames());
662 EXPECT_FALSE(creator_.HasPendingFrames());
663 EXPECT_FALSE(creator_.IsFecProtected());
664
665 // Turn on FEC protection. Should cause queued control frames to be flushed.
666 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
667 DoAll(SaveArg<0>(&packet_), Return(true)));
668 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
669 PacketContents contents;
670 contents.num_ack_frames = 1;
671 contents.num_feedback_frames = 1;
672 contents.num_stop_waiting_frames = 1;
673 CheckPacketContains(contents, packet_);
674
675 // FEC protection should be on in creator.
676 EXPECT_TRUE(creator_.IsFecProtected());
677 }
678
679 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentFramesProtected) {
680 delegate_.SetCanWriteAnything();
681
682 // Enable and start FEC protection.
683 creator_.set_max_packets_per_fec_group(2);
684 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
685 EXPECT_TRUE(creator_.IsFecProtected());
686
687 // Queue stream frame to be protected in creator.
688 generator_.StartBatchOperations();
689 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
690 NULL);
691 EXPECT_EQ(1u, consumed.bytes_consumed);
692 // Turn FEC protection off in generator.
693 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, /*force=*/false);
694 // Creator has a pending protected frame.
695 EXPECT_TRUE(creator_.HasPendingFrames());
696 EXPECT_TRUE(creator_.IsFecProtected());
697
698 // Add enough data to exceed size of current packet, so that current packet
699 // is sent. Both frames will be sent out in a single packet.
700 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
701 DoAll(SaveArg<0>(&packet_), Return(true)));
702 size_t data_len = kDefaultMaxPacketSize;
703 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL);
704 EXPECT_EQ(data_len, consumed.bytes_consumed);
705 PacketContents contents;
706 contents.num_stream_frames = 2u;
707 contents.fec_group = 1u;
708 CheckPacketContains(contents, packet_);
709 // FEC protection should still be on in creator.
710 EXPECT_TRUE(creator_.IsFecProtected());
711 }
712
713 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) {
714 delegate_.SetCanWriteAnything();
715
716 // Enable and start FEC protection.
717 creator_.set_max_packets_per_fec_group(2);
718 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
719 EXPECT_TRUE(creator_.IsFecProtected());
720
721 generator_.StartBatchOperations();
722 // Send first packet, FEC protected.
723 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
724 DoAll(SaveArg<0>(&packet_), Return(true)));
725 // Write enough data to cause a packet to be emitted.
726 size_t data_len = kDefaultMaxPacketSize;
727 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(data_len),
728 0, true, NULL);
729 EXPECT_EQ(data_len, consumed.bytes_consumed);
730 PacketContents contents;
731 contents.num_stream_frames = 1u;
732 contents.fec_group = 1u;
733 CheckPacketContains(contents, packet_);
734
735 // Turn FEC protection off in generator.
736 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, /*force=*/false);
737 // FEC group is still open in creator.
738 EXPECT_TRUE(creator_.IsFecProtected());
739
740 // Send second packet, which is protected because it happens to fall within an
741 // open FEC group. Data packet will be followed by FEC packet.
742 {
743 InSequence dummy;
744 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
745 DoAll(SaveArg<0>(&packet2_), Return(true)));
746 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
747 DoAll(SaveArg<0>(&packet3_), Return(true)));
748 }
749 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL);
750 EXPECT_EQ(data_len, consumed.bytes_consumed);
751 contents.num_stream_frames = 2u;
752 CheckPacketContains(contents, packet2_);
753 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
754
755 // FEC protection should be off in creator.
756 EXPECT_FALSE(creator_.IsFecProtected());
757 }
758
759 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) {
760 delegate_.SetCanWriteAnything();
761 generator_.StartBatchOperations();
762
763 // Enable and start FEC protection.
764 creator_.set_max_packets_per_fec_group(2);
765 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
766 EXPECT_TRUE(creator_.IsFecProtected());
767
768 // Queue one byte of FEC protected data and turn FEC off in generator.
769 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
770 NULL);
771 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, /*force=*/false);
772 EXPECT_TRUE(creator_.HasPendingFrames());
773
774 // Add more data causing first packet to be sent, FEC protected.
775 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
776 DoAll(SaveArg<0>(&packet_), Return(true)));
777 // Write enough data to cause a packet to be emitted.
778 size_t data_len = kDefaultMaxPacketSize;
779 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL);
780 EXPECT_EQ(data_len, consumed.bytes_consumed);
781 PacketContents contents;
782 contents.num_stream_frames = 2u;
783 contents.fec_group = 1u;
784 CheckPacketContains(contents, packet_);
785
786 // FEC group is still open in creator.
787 EXPECT_TRUE(creator_.IsFecProtected());
788 // Turn FEC on again in generator, for the next data.
789 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
790
791 // Add data that should be protected, large enough to cause second packet to
792 // be sent. Data packet should be followed by FEC packet.
793 {
794 InSequence dummy;
795 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
796 DoAll(SaveArg<0>(&packet2_), Return(true)));
797 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
798 DoAll(SaveArg<0>(&packet3_), Return(true)));
799 }
800 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL);
801 EXPECT_EQ(data_len, consumed.bytes_consumed);
802 CheckPacketContains(contents, packet2_);
803 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
804
805 // FEC protection should be on in creator.
806 EXPECT_TRUE(creator_.IsFecProtected());
807 }
808
550 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { 809 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) {
551 delegate_.SetCanNotWrite(); 810 delegate_.SetCanNotWrite();
552 811
553 generator_.SetShouldSendAck(true, false); 812 generator_.SetShouldSendAck(true, false);
554 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 813 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
555 EXPECT_TRUE(generator_.HasQueuedFrames()); 814 EXPECT_TRUE(generator_.HasQueuedFrames());
556 815
557 delegate_.SetCanWriteAnything(); 816 delegate_.SetCanWriteAnything();
558 817
559 generator_.StartBatchOperations(); 818 generator_.StartBatchOperations();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 889
631 // The second should have the remainder of the stream data. 890 // The second should have the remainder of the stream data.
632 PacketContents contents2; 891 PacketContents contents2;
633 contents2.num_goaway_frames = 1; 892 contents2.num_goaway_frames = 1;
634 contents2.num_stream_frames = 1; 893 contents2.num_stream_frames = 1;
635 CheckPacketContains(contents2, packet2_); 894 CheckPacketContains(contents2, packet2_);
636 } 895 }
637 896
638 } // namespace test 897 } // namespace test
639 } // namespace net 898 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/test_tools/quic_connection_peer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698