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

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

Issue 839163003: Adds an alarm for sending a QUIC FEC packet. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Tell_QUIC_AckNotifierManager_83525991
Patch Set: Created 5 years, 11 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.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"
(...skipping 14 matching lines...) Expand all
25 using testing::InSequence; 25 using testing::InSequence;
26 using testing::Return; 26 using testing::Return;
27 using testing::SaveArg; 27 using testing::SaveArg;
28 using testing::StrictMock; 28 using testing::StrictMock;
29 using testing::_; 29 using testing::_;
30 30
31 namespace net { 31 namespace net {
32 namespace test { 32 namespace test {
33 namespace { 33 namespace {
34 34
35 const int64 kMinFecTimeoutMs = 5u;
36
35 class MockDelegate : public QuicPacketGenerator::DelegateInterface { 37 class MockDelegate : public QuicPacketGenerator::DelegateInterface {
36 public: 38 public:
37 MockDelegate() {} 39 MockDelegate() {}
38 ~MockDelegate() override {} 40 ~MockDelegate() override {}
39 41
40 MOCK_METHOD3(ShouldGeneratePacket, 42 MOCK_METHOD3(ShouldGeneratePacket,
41 bool(TransmissionType transmission_type, 43 bool(TransmissionType transmission_type,
42 HasRetransmittableData retransmittable, 44 HasRetransmittableData retransmittable,
43 IsHandshake handshake)); 45 IsHandshake handshake));
44 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); 46 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*());
(...skipping 25 matching lines...) Expand all
70 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, 72 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION,
71 NO_RETRANSMITTABLE_DATA, _)) 73 NO_RETRANSMITTABLE_DATA, _))
72 .WillRepeatedly(Return(true)); 74 .WillRepeatedly(Return(true));
73 } 75 }
74 76
75 private: 77 private:
76 DISALLOW_COPY_AND_ASSIGN(MockDelegate); 78 DISALLOW_COPY_AND_ASSIGN(MockDelegate);
77 }; 79 };
78 80
79 // Simple struct for describing the contents of a packet. 81 // Simple struct for describing the contents of a packet.
80 // Useful in conjunction with a SimpleQuicFrame for validating 82 // Useful in conjunction with a SimpleQuicFrame for validating that a packet
81 // that a packet contains the expected frames. 83 // contains the expected frames.
82 struct PacketContents { 84 struct PacketContents {
83 PacketContents() 85 PacketContents()
84 : num_ack_frames(0), 86 : num_ack_frames(0),
85 num_connection_close_frames(0), 87 num_connection_close_frames(0),
86 num_feedback_frames(0), 88 num_feedback_frames(0),
87 num_goaway_frames(0), 89 num_goaway_frames(0),
88 num_rst_stream_frames(0), 90 num_rst_stream_frames(0),
89 num_stop_waiting_frames(0), 91 num_stop_waiting_frames(0),
90 num_stream_frames(0), 92 num_stream_frames(0),
91 fec_group(0) { 93 fec_group(0) {
(...skipping 17 matching lines...) Expand all
109 QuicPacketGeneratorTest() 111 QuicPacketGeneratorTest()
110 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false), 112 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false),
111 generator_(42, &framer_, &random_, &delegate_), 113 generator_(42, &framer_, &random_, &delegate_),
112 creator_(QuicPacketGeneratorPeer::GetPacketCreator(&generator_)), 114 creator_(QuicPacketGeneratorPeer::GetPacketCreator(&generator_)),
113 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr), 115 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
114 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr), 116 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
115 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr), 117 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
116 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr), 118 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
117 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr), 119 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
118 packet6_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr), 120 packet6_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
119 packet7_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr) {} 121 packet7_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
122 packet8_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr) {}
120 123
121 ~QuicPacketGeneratorTest() override { 124 ~QuicPacketGeneratorTest() override {
122 delete packet_.packet; 125 delete packet_.packet;
123 delete packet_.retransmittable_frames; 126 delete packet_.retransmittable_frames;
124 delete packet2_.packet; 127 delete packet2_.packet;
125 delete packet2_.retransmittable_frames; 128 delete packet2_.retransmittable_frames;
126 delete packet3_.packet; 129 delete packet3_.packet;
127 delete packet3_.retransmittable_frames; 130 delete packet3_.retransmittable_frames;
128 delete packet4_.packet; 131 delete packet4_.packet;
129 delete packet4_.retransmittable_frames; 132 delete packet4_.retransmittable_frames;
130 delete packet5_.packet; 133 delete packet5_.packet;
131 delete packet5_.retransmittable_frames; 134 delete packet5_.retransmittable_frames;
132 delete packet6_.packet; 135 delete packet6_.packet;
133 delete packet6_.retransmittable_frames; 136 delete packet6_.retransmittable_frames;
134 delete packet7_.packet; 137 delete packet7_.packet;
135 delete packet7_.retransmittable_frames; 138 delete packet7_.retransmittable_frames;
139 delete packet8_.packet;
140 delete packet8_.retransmittable_frames;
136 } 141 }
137 142
138 QuicAckFrame* CreateAckFrame() { 143 QuicAckFrame* CreateAckFrame() {
139 // TODO(rch): Initialize this so it can be verified later. 144 // TODO(rch): Initialize this so it can be verified later.
140 return new QuicAckFrame(MakeAckFrame(0)); 145 return new QuicAckFrame(MakeAckFrame(0));
141 } 146 }
142 147
143 QuicCongestionFeedbackFrame* CreateFeedbackFrame() { 148 QuicCongestionFeedbackFrame* CreateFeedbackFrame() {
144 QuicCongestionFeedbackFrame* frame = new QuicCongestionFeedbackFrame; 149 QuicCongestionFeedbackFrame* frame = new QuicCongestionFeedbackFrame;
145 frame->type = kTCP; 150 frame->type = kTCP;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 QuicPacketGenerator generator_; 234 QuicPacketGenerator generator_;
230 QuicPacketCreator* creator_; 235 QuicPacketCreator* creator_;
231 SimpleQuicFramer simple_framer_; 236 SimpleQuicFramer simple_framer_;
232 SerializedPacket packet_; 237 SerializedPacket packet_;
233 SerializedPacket packet2_; 238 SerializedPacket packet2_;
234 SerializedPacket packet3_; 239 SerializedPacket packet3_;
235 SerializedPacket packet4_; 240 SerializedPacket packet4_;
236 SerializedPacket packet5_; 241 SerializedPacket packet5_;
237 SerializedPacket packet6_; 242 SerializedPacket packet6_;
238 SerializedPacket packet7_; 243 SerializedPacket packet7_;
244 SerializedPacket packet8_;
239 245
240 private: 246 private:
241 scoped_ptr<char[]> data_array_; 247 scoped_ptr<char[]> data_array_;
242 }; 248 };
243 249
244 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegate { 250 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegate {
245 public: 251 public:
246 MOCK_METHOD1(OnFrameAddedToPacket, 252 MOCK_METHOD1(OnFrameAddedToPacket,
247 void(const QuicFrame&)); 253 void(const QuicFrame&));
248 }; 254 };
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 // Now both frames will be flushed out. 472 // Now both frames will be flushed out.
467 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_)); 473 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
468 generator_.FinishBatchOperations(); 474 generator_.FinishBatchOperations();
469 EXPECT_FALSE(generator_.HasQueuedFrames()); 475 EXPECT_FALSE(generator_.HasQueuedFrames());
470 476
471 PacketContents contents; 477 PacketContents contents;
472 contents.num_stream_frames = 2; 478 contents.num_stream_frames = 2;
473 CheckPacketContains(contents, packet_); 479 CheckPacketContains(contents, packet_);
474 } 480 }
475 481
476 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { 482 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecOnMaxGroupSize) {
477 delegate_.SetCanWriteAnything(); 483 delegate_.SetCanWriteAnything();
478 484
479 // Send FEC every two packets. 485 // Send FEC every two packets.
480 creator_->set_max_packets_per_fec_group(2); 486 creator_->set_max_packets_per_fec_group(2);
481 487
482 { 488 {
483 InSequence dummy; 489 InSequence dummy;
484 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 490 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
485 SaveArg<0>(&packet_)); 491 SaveArg<0>(&packet_));
486 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 492 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
487 SaveArg<0>(&packet2_)); 493 SaveArg<0>(&packet2_));
488 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 494 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
489 SaveArg<0>(&packet3_)); 495 SaveArg<0>(&packet3_));
490 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 496 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
491 SaveArg<0>(&packet4_)); 497 SaveArg<0>(&packet4_));
492 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
493 SaveArg<0>(&packet5_));
494 } 498 }
495 499
496 // Send enough data to create 3 packets: two full and one partial. Send 500 // Send enough data to create 3 packets: two full and one partial. Send with
497 // with MUST_FEC_PROTECT flag. 501 // MUST_FEC_PROTECT flag.
498 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 502 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
499 QuicConsumedData consumed = generator_.ConsumeData( 503 QuicConsumedData consumed = generator_.ConsumeData(
500 3, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr); 504 3, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
501 EXPECT_EQ(data_len, consumed.bytes_consumed); 505 EXPECT_EQ(data_len, consumed.bytes_consumed);
502 EXPECT_TRUE(consumed.fin_consumed); 506 EXPECT_TRUE(consumed.fin_consumed);
503 EXPECT_FALSE(generator_.HasQueuedFrames()); 507 EXPECT_FALSE(generator_.HasQueuedFrames());
504 508
505 CheckPacketHasSingleStreamFrame(packet_); 509 CheckPacketHasSingleStreamFrame(packet_);
506 CheckPacketHasSingleStreamFrame(packet2_); 510 CheckPacketHasSingleStreamFrame(packet2_);
507 CheckPacketIsFec(packet3_, 1); 511 CheckPacketIsFec(packet3_, 1);
512 CheckPacketHasSingleStreamFrame(packet4_);
513 EXPECT_TRUE(creator_->IsFecProtected());
508 514
509 CheckPacketHasSingleStreamFrame(packet4_); 515 // The FEC packet under construction will be sent when one more packet is sent
510 CheckPacketIsFec(packet5_, 4); 516 // (since FEC group size is 2), or when OnFecTimeout is called. Send more data
517 // with MAY_FEC_PROTECT. This packet should also be protected, and FEC packet
518 // is sent since FEC group size is reached.
519 {
520 InSequence dummy;
521 EXPECT_CALL(delegate_, OnSerializedPacket(_))
522 .WillOnce(SaveArg<0>(&packet5_));
523 EXPECT_CALL(delegate_, OnSerializedPacket(_))
524 .WillOnce(SaveArg<0>(&packet6_));
525 }
526 consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT,
527 nullptr);
528 EXPECT_EQ(1u, consumed.bytes_consumed);
529 CheckPacketHasSingleStreamFrame(packet5_);
530 CheckPacketIsFec(packet6_, 4);
531 EXPECT_FALSE(creator_->IsFecProtected());
511 } 532 }
512 533
513 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { 534 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecOnTimeout) {
514 delegate_.SetCanWriteAnything(); 535 delegate_.SetCanWriteAnything();
536 creator_->set_max_packets_per_fec_group(1000);
515 537
516 // Enable FEC. 538 // Send data with MUST_FEC_PROTECT flag. No FEC packet is emitted, but the
539 // creator FEC protects all data.
540 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
541 QuicConsumedData consumed = generator_.ConsumeData(3, CreateData(1u), 0, true,
542 MUST_FEC_PROTECT, nullptr);
543 EXPECT_EQ(1u, consumed.bytes_consumed);
544 EXPECT_TRUE(consumed.fin_consumed);
545 CheckPacketHasSingleStreamFrame(packet_);
546 EXPECT_TRUE(creator_->IsFecProtected());
547
548 // Send more data with MAY_FEC_PROTECT. This packet should also be protected,
549 // and FEC packet is not yet sent.
550 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet2_));
551 consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT,
552 nullptr);
553 EXPECT_EQ(1u, consumed.bytes_consumed);
554 CheckPacketHasSingleStreamFrame(packet2_);
555 EXPECT_TRUE(creator_->IsFecProtected());
556
557 // Calling OnFecTimeout should cause the FEC packet to be emitted.
558 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet3_));
559 generator_.OnFecTimeout();
560 CheckPacketIsFec(packet3_, 1);
561 EXPECT_FALSE(creator_->IsFecProtected());
562
563 // Subsequent data is protected under the next FEC group. Send enough data to
564 // create 2 more packets: one full and one partial.
565 {
566 InSequence dummy;
567 EXPECT_CALL(delegate_, OnSerializedPacket(_))
568 .WillOnce(SaveArg<0>(&packet4_));
569 EXPECT_CALL(delegate_, OnSerializedPacket(_))
570 .WillOnce(SaveArg<0>(&packet5_));
571 }
572 size_t data_len = kDefaultMaxPacketSize + 1;
573 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true,
574 MUST_FEC_PROTECT, nullptr);
575 EXPECT_EQ(data_len, consumed.bytes_consumed);
576 EXPECT_TRUE(consumed.fin_consumed);
577 CheckPacketHasSingleStreamFrame(packet4_);
578 CheckPacketHasSingleStreamFrame(packet5_);
579 EXPECT_TRUE(creator_->IsFecProtected());
580
581 // Calling OnFecTimeout should cause the FEC packet to be emitted.
582 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet6_));
583 generator_.OnFecTimeout();
584 CheckPacketIsFec(packet6_, 4);
585 EXPECT_FALSE(creator_->IsFecProtected());
586 }
587
588 TEST_F(QuicPacketGeneratorTest, GetFecTimeoutFiniteOnlyOnFirstPacketInGroup) {
589 delegate_.SetCanWriteAnything();
517 creator_->set_max_packets_per_fec_group(6); 590 creator_->set_max_packets_per_fec_group(6);
591
592 // Send enough data to create 2 packets: one full and one partial. Send with
593 // MUST_FEC_PROTECT flag. No FEC packet is emitted yet, but the creator FEC
594 // protects all data.
518 { 595 {
519 InSequence dummy; 596 InSequence dummy;
520 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 597 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
521 SaveArg<0>(&packet_)); 598 SaveArg<0>(&packet_));
522 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 599 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
523 SaveArg<0>(&packet2_)); 600 SaveArg<0>(&packet2_));
524 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
525 SaveArg<0>(&packet3_));
526 } 601 }
527
528 // Send enough data to create 2 packets: one full and one partial. Send
529 // with MUST_FEC_PROTECT flag.
530 size_t data_len = 1 * kDefaultMaxPacketSize + 100; 602 size_t data_len = 1 * kDefaultMaxPacketSize + 100;
531 QuicConsumedData consumed = generator_.ConsumeData( 603 QuicConsumedData consumed = generator_.ConsumeData(
532 3, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr); 604 3, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
533 EXPECT_EQ(data_len, consumed.bytes_consumed); 605 EXPECT_EQ(data_len, consumed.bytes_consumed);
534 EXPECT_TRUE(consumed.fin_consumed); 606 EXPECT_TRUE(consumed.fin_consumed);
535 EXPECT_FALSE(generator_.HasQueuedFrames()); 607 EXPECT_FALSE(generator_.HasQueuedFrames());
536
537 CheckPacketHasSingleStreamFrame(packet_); 608 CheckPacketHasSingleStreamFrame(packet_);
538 CheckPacketHasSingleStreamFrame(packet2_); 609 CheckPacketHasSingleStreamFrame(packet2_);
539 CheckPacketIsFec(packet3_, 1); 610 EXPECT_TRUE(creator_->IsFecProtected());
611
612 // GetFecTimeout returns finite timeout only for first packet in group.
613 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(kMinFecTimeoutMs),
614 generator_.GetFecTimeout(/*sequence_number=*/1u));
615 EXPECT_EQ(QuicTime::Delta::Infinite(),
616 generator_.GetFecTimeout(/*sequence_number=*/2u));
617
618 // Send more data with MAY_FEC_PROTECT. This packet should also be protected,
619 // and FEC packet is not yet sent.
620 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet3_));
621 consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT,
622 nullptr);
623 CheckPacketHasSingleStreamFrame(packet3_);
624 EXPECT_TRUE(creator_->IsFecProtected());
625
626 // GetFecTimeout returns finite timeout only for first packet in group.
627 EXPECT_EQ(QuicTime::Delta::Infinite(),
628 generator_.GetFecTimeout(/*sequence_number=*/3u));
629
630 // Calling OnFecTimeout should cause the FEC packet to be emitted.
631 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet4_));
632 generator_.OnFecTimeout();
633 CheckPacketIsFec(packet4_, /*fec_group=*/1u);
634 EXPECT_FALSE(creator_->IsFecProtected());
635
636 // Subsequent data is protected under the next FEC group. Send enough data to
637 // create 2 more packets: one full and one partial.
638 {
639 InSequence dummy;
640 EXPECT_CALL(delegate_, OnSerializedPacket(_))
641 .WillOnce(SaveArg<0>(&packet5_));
642 EXPECT_CALL(delegate_, OnSerializedPacket(_))
643 .WillOnce(SaveArg<0>(&packet6_));
644 }
645 data_len = kDefaultMaxPacketSize + 1u;
646 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true,
647 MUST_FEC_PROTECT, nullptr);
648 EXPECT_EQ(data_len, consumed.bytes_consumed);
649 EXPECT_TRUE(consumed.fin_consumed);
650 CheckPacketHasSingleStreamFrame(packet5_);
651 CheckPacketHasSingleStreamFrame(packet6_);
652 EXPECT_TRUE(creator_->IsFecProtected());
653
654 // GetFecTimeout returns finite timeout for first packet in the new group.
655 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(kMinFecTimeoutMs),
656 generator_.GetFecTimeout(/*sequence_number=*/5u));
657 EXPECT_EQ(QuicTime::Delta::Infinite(),
658 generator_.GetFecTimeout(/*sequence_number=*/6u));
659
660 // Calling OnFecTimeout should cause the FEC packet to be emitted.
661 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet7_));
662 generator_.OnFecTimeout();
663 CheckPacketIsFec(packet7_, /*fec_group=*/5u);
664 EXPECT_FALSE(creator_->IsFecProtected());
665
666 // Send more data with MAY_FEC_PROTECT. No FEC protection, so GetFecTimeout
667 // returns infinite.
668 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet8_));
669 consumed = generator_.ConsumeData(9, CreateData(1u), 0, true, MAY_FEC_PROTECT,
670 nullptr);
671 CheckPacketHasSingleStreamFrame(packet8_);
672 EXPECT_FALSE(creator_->IsFecProtected());
673 EXPECT_EQ(QuicTime::Delta::Infinite(),
674 generator_.GetFecTimeout(/*sequence_number=*/8u));
540 } 675 }
541 676
542 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { 677 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) {
543 // Set the packet size be enough for two stream frames with 0 stream offset, 678 // Set the packet size be enough for two stream frames with 0 stream offset,
544 // but not enough for a stream frame of 0 offset and one with non-zero offset. 679 // but not enough for a stream frame of 0 offset and one with non-zero offset.
545 size_t length = 680 size_t length =
546 NullEncrypter().GetCiphertextSize(0) + 681 NullEncrypter().GetCiphertextSize(0) +
547 GetPacketHeaderSize(creator_->connection_id_length(), 682 GetPacketHeaderSize(creator_->connection_id_length(), true,
548 true,
549 creator_->next_sequence_number_length(), 683 creator_->next_sequence_number_length(),
550 NOT_IN_FEC_GROUP) + 684 NOT_IN_FEC_GROUP) +
551 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger 685 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger
552 // than the GetMinStreamFrameSize. 686 // than the GetMinStreamFrameSize.
553 QuicFramer::GetMinStreamFrameSize(1, 0, false, NOT_IN_FEC_GROUP) + 3 + 687 QuicFramer::GetMinStreamFrameSize(1, 0, false, NOT_IN_FEC_GROUP) + 3 +
554 QuicFramer::GetMinStreamFrameSize(1, 0, true, NOT_IN_FEC_GROUP) + 1; 688 QuicFramer::GetMinStreamFrameSize(1, 0, true, NOT_IN_FEC_GROUP) + 1;
555 creator_->set_max_packet_length(length); 689 creator_->set_max_packet_length(length);
556 delegate_.SetCanWriteAnything(); 690 delegate_.SetCanWriteAnything();
557 { 691 {
558 InSequence dummy; 692 InSequence dummy;
(...skipping 20 matching lines...) Expand all
579 EXPECT_EQ(3u, consumed.bytes_consumed); 713 EXPECT_EQ(3u, consumed.bytes_consumed);
580 EXPECT_TRUE(consumed.fin_consumed); 714 EXPECT_TRUE(consumed.fin_consumed);
581 EXPECT_FALSE(generator_.HasQueuedFrames()); 715 EXPECT_FALSE(generator_.HasQueuedFrames());
582 716
583 PacketContents contents; 717 PacketContents contents;
584 contents.num_stream_frames = 1; 718 contents.num_stream_frames = 1;
585 CheckPacketContains(contents, packet_); 719 CheckPacketContains(contents, packet_);
586 CheckPacketContains(contents, packet2_); 720 CheckPacketContains(contents, packet2_);
587 } 721 }
588 722
723 TEST_F(QuicPacketGeneratorTest, NoFecPacketSentWhenBatchEnds) {
724 delegate_.SetCanWriteAnything();
725 creator_->set_max_packets_per_fec_group(6);
726
727 generator_.StartBatchOperations();
728
729 generator_.ConsumeData(3, MakeIOVector("foo"), 2, true, MUST_FEC_PROTECT,
730 nullptr);
731 QuicConsumedData consumed = generator_.ConsumeData(
732 5, MakeIOVector("quux"), 7, false, MUST_FEC_PROTECT, nullptr);
733 EXPECT_EQ(4u, consumed.bytes_consumed);
734 EXPECT_FALSE(consumed.fin_consumed);
735 EXPECT_TRUE(generator_.HasQueuedFrames());
736
737 // Now both frames will be flushed out, but FEC packet is not yet sent.
738 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
739 generator_.FinishBatchOperations();
740 EXPECT_FALSE(generator_.HasQueuedFrames());
741
742 PacketContents contents;
743 contents.num_stream_frames = 2u;
744 contents.fec_group = 1u;
745 CheckPacketContains(contents, packet_);
746
747 // Forcing FEC timeout causes FEC packet to be emitted.
748 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet2_));
749 generator_.OnFecTimeout();
750 CheckPacketIsFec(packet2_, /*fec_group=*/1u);
751 }
752
589 TEST_F(QuicPacketGeneratorTest, FecTimeoutOnRttChange) { 753 TEST_F(QuicPacketGeneratorTest, FecTimeoutOnRttChange) {
590 EXPECT_EQ(QuicTime::Delta::Zero(), generator_.fec_timeout()); 754 EXPECT_EQ(QuicTime::Delta::Zero(),
755 QuicPacketGeneratorPeer::GetFecTimeout(&generator_));
591 generator_.OnRttChange(QuicTime::Delta::FromMilliseconds(300)); 756 generator_.OnRttChange(QuicTime::Delta::FromMilliseconds(300));
592 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(150), generator_.fec_timeout()); 757 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(150),
758 QuicPacketGeneratorPeer::GetFecTimeout(&generator_));
593 } 759 }
594 760
595 TEST_F(QuicPacketGeneratorTest, FecGroupSizeOnCongestionWindowChange) { 761 TEST_F(QuicPacketGeneratorTest, FecGroupSizeOnCongestionWindowChange) {
596 delegate_.SetCanWriteAnything(); 762 delegate_.SetCanWriteAnything();
597 creator_->set_max_packets_per_fec_group(50); 763 creator_->set_max_packets_per_fec_group(50);
598 EXPECT_EQ(50u, creator_->max_packets_per_fec_group()); 764 EXPECT_EQ(50u, creator_->max_packets_per_fec_group());
599 EXPECT_FALSE(creator_->IsFecGroupOpen()); 765 EXPECT_FALSE(creator_->IsFecGroupOpen());
600 766
601 // On reduced cwnd. 767 // On reduced cwnd.
602 generator_.OnCongestionWindowChange(7); 768 generator_.OnCongestionWindowChange(7);
603 EXPECT_EQ(3u, creator_->max_packets_per_fec_group()); 769 EXPECT_EQ(3u, creator_->max_packets_per_fec_group());
604 770
605 // On increased cwnd. 771 // On increased cwnd.
606 generator_.OnCongestionWindowChange(100); 772 generator_.OnCongestionWindowChange(100);
607 EXPECT_EQ(50u, creator_->max_packets_per_fec_group()); 773 EXPECT_EQ(50u, creator_->max_packets_per_fec_group());
608 774
609 // On collapsed cwnd. 775 // On collapsed cwnd.
610 generator_.OnCongestionWindowChange(1); 776 generator_.OnCongestionWindowChange(1);
611 EXPECT_EQ(2u, creator_->max_packets_per_fec_group()); 777 EXPECT_EQ(2u, creator_->max_packets_per_fec_group());
612 } 778 }
613 779
614 TEST_F(QuicPacketGeneratorTest, FecGroupSizeChangeWithOpenGroup) { 780 TEST_F(QuicPacketGeneratorTest, FecGroupSizeChangeWithOpenGroup) {
615 delegate_.SetCanWriteAnything(); 781 delegate_.SetCanWriteAnything();
616 // TODO(jri): This starting of batch mode should not be required when
617 // FEC sending is separated from batching operations.
618 generator_.StartBatchOperations(); 782 generator_.StartBatchOperations();
619 creator_->set_max_packets_per_fec_group(50); 783 creator_->set_max_packets_per_fec_group(50);
620 EXPECT_EQ(50u, creator_->max_packets_per_fec_group()); 784 EXPECT_EQ(50u, creator_->max_packets_per_fec_group());
621 EXPECT_FALSE(creator_->IsFecGroupOpen()); 785 EXPECT_FALSE(creator_->IsFecGroupOpen());
622 786
623 // Send enough data to create 4 packets with MUST_FEC_PROTECT flag. 787 // Send enough data to create 4 packets with MUST_FEC_PROTECT flag. 3 packets
624 // 3 packets are sent, one is queued in the creator. 788 // are sent, one is queued in the creator.
625 { 789 {
626 InSequence dummy; 790 InSequence dummy;
627 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 791 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
628 SaveArg<0>(&packet_)); 792 SaveArg<0>(&packet_));
629 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 793 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
630 SaveArg<0>(&packet2_)); 794 SaveArg<0>(&packet2_));
631 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 795 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
632 SaveArg<0>(&packet3_)); 796 SaveArg<0>(&packet3_));
633 } 797 }
634 size_t data_len = 3 * kDefaultMaxPacketSize + 1; 798 size_t data_len = 3 * kDefaultMaxPacketSize + 1;
635 QuicConsumedData consumed = generator_.ConsumeData( 799 QuicConsumedData consumed = generator_.ConsumeData(
636 7, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr); 800 7, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
637 EXPECT_EQ(data_len, consumed.bytes_consumed); 801 EXPECT_EQ(data_len, consumed.bytes_consumed);
638 EXPECT_TRUE(creator_->IsFecGroupOpen()); 802 EXPECT_TRUE(creator_->IsFecGroupOpen());
639 803
640 // Change FEC groupsize. 804 // Change FEC groupsize.
641 generator_.OnCongestionWindowChange(2); 805 generator_.OnCongestionWindowChange(2);
642 EXPECT_EQ(2u, creator_->max_packets_per_fec_group()); 806 EXPECT_EQ(2u, creator_->max_packets_per_fec_group());
643 807
644 // Send enough data to trigger one unprotected data packet, 808 // Send enough data to trigger one unprotected data packet, causing the FEC
645 // causing the FEC packet to also be sent. 809 // packet to also be sent.
646 { 810 {
647 InSequence dummy; 811 InSequence dummy;
648 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 812 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
649 SaveArg<0>(&packet4_)); 813 SaveArg<0>(&packet4_));
650 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 814 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
651 SaveArg<0>(&packet5_)); 815 SaveArg<0>(&packet5_));
652 } 816 }
653 consumed = generator_.ConsumeData(7, CreateData(kDefaultMaxPacketSize), 0, 817 consumed = generator_.ConsumeData(7, CreateData(kDefaultMaxPacketSize), 0,
654 true, MAY_FEC_PROTECT, nullptr); 818 true, MAY_FEC_PROTECT, nullptr);
655 EXPECT_EQ(kDefaultMaxPacketSize, consumed.bytes_consumed); 819 EXPECT_EQ(kDefaultMaxPacketSize, consumed.bytes_consumed);
(...skipping 24 matching lines...) Expand all
680 { 844 {
681 InSequence dummy; 845 InSequence dummy;
682 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 846 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
683 SaveArg<0>(&packet2_)); 847 SaveArg<0>(&packet2_));
684 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 848 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
685 SaveArg<0>(&packet3_)); 849 SaveArg<0>(&packet3_));
686 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 850 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
687 SaveArg<0>(&packet4_)); 851 SaveArg<0>(&packet4_));
688 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 852 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
689 SaveArg<0>(&packet5_)); 853 SaveArg<0>(&packet5_));
690 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
691 SaveArg<0>(&packet6_));
692 } 854 }
693 // Send enough data to create 3 packets with MUST_FEC_PROTECT flag. 855 // Send enough data to create 3 packets with MUST_FEC_PROTECT flag.
694 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 856 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
695 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true, 857 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true,
696 MUST_FEC_PROTECT, nullptr); 858 MUST_FEC_PROTECT, nullptr);
697 EXPECT_EQ(data_len, consumed.bytes_consumed); 859 EXPECT_EQ(data_len, consumed.bytes_consumed);
698 EXPECT_FALSE(generator_.HasQueuedFrames()); 860 EXPECT_FALSE(generator_.HasQueuedFrames());
699 861
700 // Verify that two FEC packets were sent. 862 // Verify that packets sent were 3 data and 1 FEC.
701 CheckPacketHasSingleStreamFrame(packet2_); 863 CheckPacketHasSingleStreamFrame(packet2_);
702 CheckPacketHasSingleStreamFrame(packet3_); 864 CheckPacketHasSingleStreamFrame(packet3_);
703 CheckPacketIsFec(packet4_, /*fec_group=*/2u); 865 CheckPacketIsFec(packet4_, /*fec_group=*/2u);
704 CheckPacketHasSingleStreamFrame(packet5_); 866 CheckPacketHasSingleStreamFrame(packet5_);
705 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream. 867
868 // Calling OnFecTimeout should emit the pending FEC packet.
869 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet6_));
870 generator_.OnFecTimeout();
871 CheckPacketIsFec(packet6_, /*fec_group=*/5u);
706 872
707 // Send one unprotected data packet. 873 // Send one unprotected data packet.
708 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 874 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
709 SaveArg<0>(&packet7_)); 875 SaveArg<0>(&packet7_));
710 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, MAY_FEC_PROTECT, 876 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, MAY_FEC_PROTECT,
711 nullptr); 877 nullptr);
712 EXPECT_EQ(1u, consumed.bytes_consumed); 878 EXPECT_EQ(1u, consumed.bytes_consumed);
713 EXPECT_FALSE(generator_.HasQueuedFrames()); 879 EXPECT_FALSE(generator_.HasQueuedFrames());
714 EXPECT_FALSE(creator_->IsFecProtected()); 880 EXPECT_FALSE(creator_->IsFecProtected());
715 // Verify that one unprotected data packet was sent. 881 // Verify that one unprotected data packet was sent.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 EXPECT_TRUE(creator_->IsFecProtected()); 979 EXPECT_TRUE(creator_->IsFecProtected());
814 } 980 }
815 981
816 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) { 982 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) {
817 delegate_.SetCanWriteAnything(); 983 delegate_.SetCanWriteAnything();
818 984
819 // Enable FEC. 985 // Enable FEC.
820 creator_->set_max_packets_per_fec_group(2); 986 creator_->set_max_packets_per_fec_group(2);
821 EXPECT_FALSE(creator_->IsFecProtected()); 987 EXPECT_FALSE(creator_->IsFecProtected());
822 988
823 generator_.StartBatchOperations();
824 // Send first packet, FEC protected. 989 // Send first packet, FEC protected.
825 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_)); 990 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
826 // Write enough data to cause a packet to be emitted. 991 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
827 size_t data_len = kDefaultMaxPacketSize; 992 MUST_FEC_PROTECT, nullptr);
828 QuicConsumedData consumed = generator_.ConsumeData( 993 EXPECT_EQ(1u, consumed.bytes_consumed);
829 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
830 EXPECT_EQ(data_len, consumed.bytes_consumed);
831 PacketContents contents; 994 PacketContents contents;
832 contents.num_stream_frames = 1u; 995 contents.num_stream_frames = 1u;
833 contents.fec_group = 1u; 996 contents.fec_group = 1u;
834 CheckPacketContains(contents, packet_); 997 CheckPacketContains(contents, packet_);
835 998
836 // FEC should still be on in creator. 999 // FEC should still be on in creator.
837 EXPECT_TRUE(creator_->IsFecProtected()); 1000 EXPECT_TRUE(creator_->IsFecProtected());
838 1001
839 // Send enough unprotected data to cause second packet to be sent, which gets 1002 // Send unprotected data to cause second packet to be sent, which gets
840 // protected because it happens to fall within an open FEC group. Data packet 1003 // protected because it happens to fall within an open FEC group. Data packet
841 // will be followed by FEC packet. 1004 // will be followed by FEC packet.
842 { 1005 {
843 InSequence dummy; 1006 InSequence dummy;
844 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 1007 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
845 SaveArg<0>(&packet2_)); 1008 SaveArg<0>(&packet2_));
846 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 1009 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
847 SaveArg<0>(&packet3_)); 1010 SaveArg<0>(&packet3_));
848 } 1011 }
849 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 1012 consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT,
850 MAY_FEC_PROTECT, nullptr); 1013 nullptr);
851 EXPECT_EQ(data_len, consumed.bytes_consumed); 1014 EXPECT_EQ(1u, consumed.bytes_consumed);
852 contents.num_stream_frames = 2u; 1015 contents.num_stream_frames = 1u;
853 CheckPacketContains(contents, packet2_); 1016 CheckPacketContains(contents, packet2_);
854 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 1017 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
855 1018
856 // FEC protection should be off in creator. 1019 // FEC protection should be off in creator.
857 EXPECT_FALSE(creator_->IsFecProtected()); 1020 EXPECT_FALSE(creator_->IsFecProtected());
858 } 1021 }
859 1022
860 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) { 1023 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) {
861 delegate_.SetCanWriteAnything(); 1024 delegate_.SetCanWriteAnything();
862 generator_.StartBatchOperations(); 1025 generator_.StartBatchOperations();
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 delegate_.SetCanNotWrite(); 1071 delegate_.SetCanNotWrite();
909 1072
910 generator_.SetShouldSendAck(true, false); 1073 generator_.SetShouldSendAck(true, false);
911 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 1074 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
912 EXPECT_TRUE(generator_.HasQueuedFrames()); 1075 EXPECT_TRUE(generator_.HasQueuedFrames());
913 1076
914 delegate_.SetCanWriteAnything(); 1077 delegate_.SetCanWriteAnything();
915 1078
916 generator_.StartBatchOperations(); 1079 generator_.StartBatchOperations();
917 1080
918 // When the first write operation is invoked, the ack and feedback 1081 // When the first write operation is invoked, the ack and feedback frames will
919 // frames will be returned. 1082 // be returned.
920 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 1083 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
921 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 1084 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
922 Return(CreateFeedbackFrame())); 1085 Return(CreateFeedbackFrame()));
923 1086
924 // Send some data and a control frame 1087 // Send some data and a control frame
925 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, 1088 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT,
926 nullptr); 1089 nullptr);
927 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 1090 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
928 1091
929 // All five frames will be flushed out in a single packet. 1092 // All five frames will be flushed out in a single packet.
(...skipping 14 matching lines...) Expand all
944 delegate_.SetCanNotWrite(); 1107 delegate_.SetCanNotWrite();
945 1108
946 generator_.SetShouldSendAck(true, false); 1109 generator_.SetShouldSendAck(true, false);
947 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 1110 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
948 EXPECT_TRUE(generator_.HasQueuedFrames()); 1111 EXPECT_TRUE(generator_.HasQueuedFrames());
949 1112
950 delegate_.SetCanWriteAnything(); 1113 delegate_.SetCanWriteAnything();
951 1114
952 generator_.StartBatchOperations(); 1115 generator_.StartBatchOperations();
953 1116
954 // When the first write operation is invoked, the ack and feedback 1117 // When the first write operation is invoked, the ack and feedback frames will
955 // frames will be returned. 1118 // be returned.
956 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 1119 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
957 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 1120 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
958 Return(CreateFeedbackFrame())); 1121 Return(CreateFeedbackFrame()));
959 1122
960 { 1123 {
961 InSequence dummy; 1124 InSequence dummy;
962 // All five frames will be flushed out in a single packet 1125 // All five frames will be flushed out in a single packet
963 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 1126 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
964 SaveArg<0>(&packet_)); 1127 SaveArg<0>(&packet_));
965 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 1128 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 generator_.SetConnectionIdLength(7); 1173 generator_.SetConnectionIdLength(7);
1011 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, creator_->connection_id_length()); 1174 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, creator_->connection_id_length());
1012 generator_.SetConnectionIdLength(8); 1175 generator_.SetConnectionIdLength(8);
1013 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, creator_->connection_id_length()); 1176 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, creator_->connection_id_length());
1014 generator_.SetConnectionIdLength(9); 1177 generator_.SetConnectionIdLength(9);
1015 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, creator_->connection_id_length()); 1178 EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID, creator_->connection_id_length());
1016 } 1179 }
1017 1180
1018 } // namespace test 1181 } // namespace test
1019 } // namespace net 1182 } // 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