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

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

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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_connection_logger.cc ('k') | net/quic/quic_crypto_client_stream.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_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
11 #include "net/quic/congestion_control/loss_detection_interface.h" 11 #include "net/quic/congestion_control/loss_detection_interface.h"
12 #include "net/quic/congestion_control/receive_algorithm_interface.h"
13 #include "net/quic/congestion_control/send_algorithm_interface.h" 12 #include "net/quic/congestion_control/send_algorithm_interface.h"
14 #include "net/quic/crypto/null_encrypter.h" 13 #include "net/quic/crypto/null_encrypter.h"
15 #include "net/quic/crypto/quic_decrypter.h" 14 #include "net/quic/crypto/quic_decrypter.h"
16 #include "net/quic/crypto/quic_encrypter.h" 15 #include "net/quic/crypto/quic_encrypter.h"
17 #include "net/quic/quic_ack_notifier.h" 16 #include "net/quic/quic_ack_notifier.h"
18 #include "net/quic/quic_flags.h" 17 #include "net/quic/quic_flags.h"
19 #include "net/quic/quic_protocol.h" 18 #include "net/quic/quic_protocol.h"
20 #include "net/quic/quic_utils.h" 19 #include "net/quic/quic_utils.h"
21 #include "net/quic/test_tools/mock_clock.h" 20 #include "net/quic/test_tools/mock_clock.h"
22 #include "net/quic/test_tools/mock_random.h" 21 #include "net/quic/test_tools/mock_random.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 const char data1[] = "foo"; 56 const char data1[] = "foo";
58 const char data2[] = "bar"; 57 const char data2[] = "bar";
59 58
60 const bool kFin = true; 59 const bool kFin = true;
61 const bool kEntropyFlag = true; 60 const bool kEntropyFlag = true;
62 61
63 const QuicPacketEntropyHash kTestEntropyHash = 76; 62 const QuicPacketEntropyHash kTestEntropyHash = 76;
64 63
65 const int kDefaultRetransmissionTimeMs = 500; 64 const int kDefaultRetransmissionTimeMs = 500;
66 65
67 class TestReceiveAlgorithm : public ReceiveAlgorithmInterface {
68 public:
69 TestReceiveAlgorithm() {}
70
71 MOCK_METHOD3(RecordIncomingPacket,
72 void(QuicByteCount, QuicPacketSequenceNumber, QuicTime));
73
74 private:
75 DISALLOW_COPY_AND_ASSIGN(TestReceiveAlgorithm);
76 };
77
78 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message. 66 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message.
79 class TaggingEncrypter : public QuicEncrypter { 67 class TaggingEncrypter : public QuicEncrypter {
80 public: 68 public:
81 explicit TaggingEncrypter(uint8 tag) 69 explicit TaggingEncrypter(uint8 tag)
82 : tag_(tag) { 70 : tag_(tag) {
83 } 71 }
84 72
85 ~TaggingEncrypter() override {} 73 ~TaggingEncrypter() override {}
86 74
87 // QuicEncrypter interface. 75 // QuicEncrypter interface.
88 bool SetKey(StringPiece key) override { return true; } 76 bool SetKey(StringPiece key) override { return true; }
89 77
90 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } 78 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; }
91 79
92 bool Encrypt(StringPiece nonce, 80 bool Encrypt(StringPiece nonce,
93 StringPiece associated_data, 81 StringPiece associated_data,
94 StringPiece plaintext, 82 StringPiece plaintext,
95 unsigned char* output) override { 83 unsigned char* output) override {
96 memcpy(output, plaintext.data(), plaintext.size()); 84 memcpy(output, plaintext.data(), plaintext.size());
97 output += plaintext.size(); 85 output += plaintext.size();
98 memset(output, tag_, kTagSize); 86 memset(output, tag_, kTagSize);
99 return true; 87 return true;
100 } 88 }
101 89
102 QuicData* EncryptPacket(QuicPacketSequenceNumber sequence_number, 90 bool EncryptPacket(QuicPacketSequenceNumber sequence_number,
103 StringPiece associated_data, 91 StringPiece associated_data,
104 StringPiece plaintext) override { 92 StringPiece plaintext,
93 char* output,
94 size_t* output_length,
95 size_t max_output_length) override {
105 const size_t len = plaintext.size() + kTagSize; 96 const size_t len = plaintext.size() + kTagSize;
106 uint8* buffer = new uint8[len]; 97 if (max_output_length < len) {
107 Encrypt(StringPiece(), associated_data, plaintext, buffer); 98 return false;
108 return new QuicData(reinterpret_cast<char*>(buffer), len, true); 99 }
100 Encrypt(StringPiece(), associated_data, plaintext,
101 reinterpret_cast<unsigned char*>(output));
102 *output_length = len;
103 return true;
109 } 104 }
110 105
111 size_t GetKeySize() const override { return 0; } 106 size_t GetKeySize() const override { return 0; }
112 size_t GetNoncePrefixSize() const override { return 0; } 107 size_t GetNoncePrefixSize() const override { return 0; }
113 108
114 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override { 109 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override {
115 return ciphertext_size - kTagSize; 110 return ciphertext_size - kTagSize;
116 } 111 }
117 112
118 size_t GetCiphertextSize(size_t plaintext_size) const override { 113 size_t GetCiphertextSize(size_t plaintext_size) const override {
(...skipping 18 matching lines...) Expand all
137 // have the same value and then removes them. 132 // have the same value and then removes them.
138 class TaggingDecrypter : public QuicDecrypter { 133 class TaggingDecrypter : public QuicDecrypter {
139 public: 134 public:
140 ~TaggingDecrypter() override {} 135 ~TaggingDecrypter() override {}
141 136
142 // QuicDecrypter interface 137 // QuicDecrypter interface
143 bool SetKey(StringPiece key) override { return true; } 138 bool SetKey(StringPiece key) override { return true; }
144 139
145 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } 140 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; }
146 141
147 QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number, 142 bool DecryptPacket(QuicPacketSequenceNumber sequence_number,
148 StringPiece associated_data, 143 const StringPiece& associated_data,
149 StringPiece ciphertext) override { 144 const StringPiece& ciphertext,
145 char* output,
146 size_t* output_length,
147 size_t max_output_length) override {
150 if (ciphertext.size() < kTagSize) { 148 if (ciphertext.size() < kTagSize) {
151 return nullptr; 149 return false;
152 } 150 }
153 if (!CheckTag(ciphertext, GetTag(ciphertext))) { 151 if (!CheckTag(ciphertext, GetTag(ciphertext))) {
154 return nullptr; 152 return false;
155 } 153 }
156 const size_t len = ciphertext.size() - kTagSize; 154 *output_length = ciphertext.size() - kTagSize;
157 uint8* buf = new uint8[len]; 155 memcpy(output, ciphertext.data(), *output_length);
158 memcpy(buf, ciphertext.data(), len); 156 return true;
159 return new QuicData(reinterpret_cast<char*>(buf), len,
160 true /* owns buffer */);
161 } 157 }
162 158
163 StringPiece GetKey() const override { return StringPiece(); } 159 StringPiece GetKey() const override { return StringPiece(); }
164 StringPiece GetNoncePrefix() const override { return StringPiece(); } 160 StringPiece GetNoncePrefix() const override { return StringPiece(); }
165 161
166 protected: 162 protected:
167 virtual uint8 GetTag(StringPiece ciphertext) { 163 virtual uint8 GetTag(StringPiece ciphertext) {
168 return ciphertext.data()[ciphertext.size()-1]; 164 return ciphertext.data()[ciphertext.size()-1];
169 } 165 }
170 166
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 // Disable tail loss probes for most tests. 397 // Disable tail loss probes for most tests.
402 QuicSentPacketManagerPeer::SetMaxTailLossProbes( 398 QuicSentPacketManagerPeer::SetMaxTailLossProbes(
403 QuicConnectionPeer::GetSentPacketManager(this), 0); 399 QuicConnectionPeer::GetSentPacketManager(this), 0);
404 writer()->set_is_server(is_server); 400 writer()->set_is_server(is_server);
405 } 401 }
406 402
407 void SendAck() { 403 void SendAck() {
408 QuicConnectionPeer::SendAck(this); 404 QuicConnectionPeer::SendAck(this);
409 } 405 }
410 406
411 void SetReceiveAlgorithm(TestReceiveAlgorithm* receive_algorithm) {
412 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm);
413 }
414
415 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { 407 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) {
416 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); 408 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm);
417 } 409 }
418 410
419 void SetLossAlgorithm(LossDetectionInterface* loss_algorithm) { 411 void SetLossAlgorithm(LossDetectionInterface* loss_algorithm) {
420 QuicSentPacketManagerPeer::SetLossAlgorithm( 412 QuicSentPacketManagerPeer::SetLossAlgorithm(
421 QuicConnectionPeer::GetSentPacketManager(this), loss_algorithm); 413 QuicConnectionPeer::GetSentPacketManager(this), loss_algorithm);
422 } 414 }
423 415
424 void SendPacket(EncryptionLevel level, 416 void SendPacket(EncryptionLevel level,
425 QuicPacketSequenceNumber sequence_number, 417 QuicPacketSequenceNumber sequence_number,
426 QuicPacket* packet, 418 QuicPacket* packet,
427 QuicPacketEntropyHash entropy_hash, 419 QuicPacketEntropyHash entropy_hash,
428 HasRetransmittableData retransmittable) { 420 HasRetransmittableData retransmittable) {
429 RetransmittableFrames* retransmittable_frames = 421 RetransmittableFrames* retransmittable_frames =
430 retransmittable == HAS_RETRANSMITTABLE_DATA 422 retransmittable == HAS_RETRANSMITTABLE_DATA
431 ? new RetransmittableFrames() 423 ? new RetransmittableFrames()
432 : nullptr; 424 : nullptr;
433 OnSerializedPacket( 425 QuicEncryptedPacket* encrypted =
434 SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 426 QuicConnectionPeer::GetFramer(this)
435 packet, entropy_hash, retransmittable_frames)); 427 ->EncryptPacket(ENCRYPTION_NONE, sequence_number, *packet);
428 delete packet;
429 OnSerializedPacket(SerializedPacket(sequence_number,
430 PACKET_6BYTE_SEQUENCE_NUMBER, encrypted,
431 entropy_hash, retransmittable_frames));
436 } 432 }
437 433
438 QuicConsumedData SendStreamDataWithString( 434 QuicConsumedData SendStreamDataWithString(
439 QuicStreamId id, 435 QuicStreamId id,
440 StringPiece data, 436 StringPiece data,
441 QuicStreamOffset offset, 437 QuicStreamOffset offset,
442 bool fin, 438 bool fin,
443 QuicAckNotifier::DelegateInterface* delegate) { 439 QuicAckNotifier::DelegateInterface* delegate) {
444 return SendStreamDataWithStringHelper(id, data, offset, fin, 440 return SendStreamDataWithStringHelper(id, data, offset, fin,
445 MAY_FEC_PROTECT, delegate); 441 MAY_FEC_PROTECT, delegate);
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 }; 592 };
597 593
598 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { 594 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
599 protected: 595 protected:
600 QuicConnectionTest() 596 QuicConnectionTest()
601 : connection_id_(42), 597 : connection_id_(42),
602 framer_(SupportedVersions(version()), QuicTime::Zero(), false), 598 framer_(SupportedVersions(version()), QuicTime::Zero(), false),
603 peer_creator_(connection_id_, &framer_, &random_generator_), 599 peer_creator_(connection_id_, &framer_, &random_generator_),
604 send_algorithm_(new StrictMock<MockSendAlgorithm>), 600 send_algorithm_(new StrictMock<MockSendAlgorithm>),
605 loss_algorithm_(new MockLossAlgorithm()), 601 loss_algorithm_(new MockLossAlgorithm()),
606 receive_algorithm_(new TestReceiveAlgorithm),
607 helper_(new TestConnectionHelper(&clock_, &random_generator_)), 602 helper_(new TestConnectionHelper(&clock_, &random_generator_)),
608 writer_(new TestPacketWriter(version(), &clock_)), 603 writer_(new TestPacketWriter(version(), &clock_)),
609 factory_(writer_.get()), 604 factory_(writer_.get()),
610 connection_(connection_id_, 605 connection_(connection_id_,
611 IPEndPoint(), 606 IPEndPoint(),
612 helper_.get(), 607 helper_.get(),
613 factory_, 608 factory_,
614 false, 609 false,
615 version()), 610 version()),
616 creator_(QuicConnectionPeer::GetPacketCreator(&connection_)), 611 creator_(QuicConnectionPeer::GetPacketCreator(&connection_)),
617 generator_(QuicConnectionPeer::GetPacketGenerator(&connection_)), 612 generator_(QuicConnectionPeer::GetPacketGenerator(&connection_)),
618 manager_(QuicConnectionPeer::GetSentPacketManager(&connection_)), 613 manager_(QuicConnectionPeer::GetSentPacketManager(&connection_)),
619 frame1_(1, false, 0, MakeIOVector(data1)), 614 frame1_(1, false, 0, MakeIOVector(data1)),
620 frame2_(1, false, 3, MakeIOVector(data2)), 615 frame2_(1, false, 3, MakeIOVector(data2)),
621 sequence_number_length_(PACKET_6BYTE_SEQUENCE_NUMBER), 616 sequence_number_length_(PACKET_6BYTE_SEQUENCE_NUMBER),
622 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) { 617 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) {
623 connection_.set_visitor(&visitor_); 618 connection_.set_visitor(&visitor_);
624 connection_.SetSendAlgorithm(send_algorithm_); 619 connection_.SetSendAlgorithm(send_algorithm_);
625 connection_.SetLossAlgorithm(loss_algorithm_); 620 connection_.SetLossAlgorithm(loss_algorithm_);
626 framer_.set_received_entropy_calculator(&entropy_calculator_); 621 framer_.set_received_entropy_calculator(&entropy_calculator_);
627 connection_.SetReceiveAlgorithm(receive_algorithm_);
628 EXPECT_CALL( 622 EXPECT_CALL(
629 *send_algorithm_, TimeUntilSend(_, _, _)).WillRepeatedly(Return( 623 *send_algorithm_, TimeUntilSend(_, _, _)).WillRepeatedly(Return(
630 QuicTime::Delta::Zero())); 624 QuicTime::Delta::Zero()));
631 EXPECT_CALL(*receive_algorithm_,
632 RecordIncomingPacket(_, _, _)).Times(AnyNumber());
633 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 625 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
634 .Times(AnyNumber()); 626 .Times(AnyNumber());
635 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( 627 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly(
636 Return(QuicTime::Delta::Zero())); 628 Return(QuicTime::Delta::Zero()));
637 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( 629 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
638 Return(kMaxPacketSize)); 630 Return(kMaxPacketSize));
639 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 631 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
640 .WillByDefault(Return(true)); 632 .WillByDefault(Return(true));
641 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate()) 633 EXPECT_CALL(*send_algorithm_, HasReliableBandwidthEstimate())
642 .Times(AnyNumber()); 634 .Times(AnyNumber());
(...skipping 12 matching lines...) Expand all
655 .WillRepeatedly(Return(QuicTime::Zero())); 647 .WillRepeatedly(Return(QuicTime::Zero()));
656 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) 648 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
657 .WillRepeatedly(Return(SequenceNumberSet())); 649 .WillRepeatedly(Return(SequenceNumberSet()));
658 } 650 }
659 651
660 QuicVersion version() { 652 QuicVersion version() {
661 return GetParam(); 653 return GetParam();
662 } 654 }
663 655
664 QuicAckFrame* outgoing_ack() { 656 QuicAckFrame* outgoing_ack() {
665 outgoing_ack_.reset(QuicConnectionPeer::CreateAckFrame(&connection_)); 657 QuicConnectionPeer::PopulateAckFrame(&connection_, &ack_);
666 return outgoing_ack_.get(); 658 return &ack_;
667 } 659 }
668 660
669 QuicStopWaitingFrame* stop_waiting() { 661 QuicStopWaitingFrame* stop_waiting() {
670 stop_waiting_.reset( 662 QuicConnectionPeer::PopulateStopWaitingFrame(&connection_, &stop_waiting_);
671 QuicConnectionPeer::CreateStopWaitingFrame(&connection_)); 663 return &stop_waiting_;
672 return stop_waiting_.get();
673 } 664 }
674 665
675 QuicPacketSequenceNumber least_unacked() { 666 QuicPacketSequenceNumber least_unacked() {
676 if (writer_->stop_waiting_frames().empty()) { 667 if (writer_->stop_waiting_frames().empty()) {
677 return 0; 668 return 0;
678 } 669 }
679 return writer_->stop_waiting_frames()[0].least_unacked; 670 return writer_->stop_waiting_frames()[0].least_unacked;
680 } 671 }
681 672
682 void use_tagging_decrypter() { 673 void use_tagging_decrypter() {
683 writer_->use_tagging_decrypter(); 674 writer_->use_tagging_decrypter();
684 } 675 }
685 676
686 void ProcessPacket(QuicPacketSequenceNumber number) { 677 void ProcessPacket(QuicPacketSequenceNumber number) {
687 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); 678 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1);
688 ProcessDataPacket(number, 0, !kEntropyFlag); 679 ProcessDataPacket(number, 0, !kEntropyFlag);
689 } 680 }
690 681
691 QuicPacketEntropyHash ProcessFramePacket(QuicFrame frame) { 682 QuicPacketEntropyHash ProcessFramePacket(QuicFrame frame) {
692 QuicFrames frames; 683 QuicFrames frames;
693 frames.push_back(QuicFrame(frame)); 684 frames.push_back(QuicFrame(frame));
694 QuicPacketCreatorPeer::SetSendVersionInPacket(&peer_creator_, 685 QuicPacketCreatorPeer::SetSendVersionInPacket(&peer_creator_,
695 connection_.is_server()); 686 connection_.is_server());
696 SerializedPacket serialized_packet = 687 SerializedPacket serialized_packet =
697 peer_creator_.SerializeAllFrames(frames); 688 peer_creator_.SerializeAllFrames(frames);
698 scoped_ptr<QuicPacket> packet(serialized_packet.packet); 689 scoped_ptr<QuicEncryptedPacket> encrypted(serialized_packet.packet);
699 scoped_ptr<QuicEncryptedPacket> encrypted(
700 framer_.EncryptPacket(ENCRYPTION_NONE,
701 serialized_packet.sequence_number, *packet));
702 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 690 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
703 return serialized_packet.entropy_hash; 691 return serialized_packet.entropy_hash;
704 } 692 }
705 693
706 size_t ProcessDataPacket(QuicPacketSequenceNumber number, 694 size_t ProcessDataPacket(QuicPacketSequenceNumber number,
707 QuicFecGroupNumber fec_group, 695 QuicFecGroupNumber fec_group,
708 bool entropy_flag) { 696 bool entropy_flag) {
709 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag, 697 return ProcessDataPacketAtLevel(number, fec_group, entropy_flag,
710 ENCRYPTION_NONE); 698 ENCRYPTION_NONE);
711 } 699 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 header_.public_header.connection_id_length, 777 header_.public_header.connection_id_length,
790 header_.public_header.version_flag, 778 header_.public_header.version_flag,
791 header_.public_header.sequence_number_length); 779 header_.public_header.sequence_number_length);
792 i < data_packet->length(); ++i) { 780 i < data_packet->length(); ++i) {
793 data_packet->mutable_data()[i] ^= data_packet->data()[i]; 781 data_packet->mutable_data()[i] ^= data_packet->data()[i];
794 } 782 }
795 } 783 }
796 fec_data.redundancy = data_packet->FecProtectedData(); 784 fec_data.redundancy = data_packet->FecProtectedData();
797 785
798 scoped_ptr<QuicPacket> fec_packet( 786 scoped_ptr<QuicPacket> fec_packet(
799 framer_.BuildFecPacket(header_, fec_data).packet); 787 framer_.BuildFecPacket(header_, fec_data));
800 scoped_ptr<QuicEncryptedPacket> encrypted( 788 scoped_ptr<QuicEncryptedPacket> encrypted(
801 framer_.EncryptPacket(ENCRYPTION_NONE, number, *fec_packet)); 789 framer_.EncryptPacket(ENCRYPTION_NONE, number, *fec_packet));
802 790
803 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 791 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
804 return encrypted->length(); 792 return encrypted->length();
805 } 793 }
806 794
807 QuicByteCount SendStreamDataToPeer(QuicStreamId id, 795 QuicByteCount SendStreamDataToPeer(QuicStreamId id,
808 StringPiece data, 796 StringPiece data,
809 QuicStreamOffset offset, 797 QuicStreamOffset offset,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 header_.public_header.connection_id_length = connection_id_length_; 842 header_.public_header.connection_id_length = connection_id_length_;
855 header_.entropy_flag = entropy_flag; 843 header_.entropy_flag = entropy_flag;
856 header_.fec_flag = false; 844 header_.fec_flag = false;
857 header_.packet_sequence_number = number; 845 header_.packet_sequence_number = number;
858 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 846 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
859 header_.fec_group = fec_group; 847 header_.fec_group = fec_group;
860 848
861 QuicFrames frames; 849 QuicFrames frames;
862 QuicFrame frame(&frame1_); 850 QuicFrame frame(&frame1_);
863 frames.push_back(frame); 851 frames.push_back(frame);
864 QuicPacket* packet = 852 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, header_, frames);
865 BuildUnsizedDataPacket(&framer_, header_, frames).packet;
866 EXPECT_TRUE(packet != nullptr); 853 EXPECT_TRUE(packet != nullptr);
867 return packet; 854 return packet;
868 } 855 }
869 856
870 QuicPacket* ConstructPingPacket(QuicPacketSequenceNumber number) { 857 QuicPacket* ConstructPingPacket(QuicPacketSequenceNumber number) {
871 header_.public_header.connection_id = connection_id_; 858 header_.public_header.connection_id = connection_id_;
872 header_.packet_sequence_number = number; 859 header_.packet_sequence_number = number;
873 header_.public_header.reset_flag = false; 860 header_.public_header.reset_flag = false;
874 header_.public_header.version_flag = false; 861 header_.public_header.version_flag = false;
875 header_.entropy_flag = false; 862 header_.entropy_flag = false;
876 header_.fec_flag = false; 863 header_.fec_flag = false;
877 header_.is_in_fec_group = NOT_IN_FEC_GROUP; 864 header_.is_in_fec_group = NOT_IN_FEC_GROUP;
878 header_.fec_group = 0; 865 header_.fec_group = 0;
879 866
880 QuicPingFrame ping; 867 QuicPingFrame ping;
881 868
882 QuicFrames frames; 869 QuicFrames frames;
883 QuicFrame frame(&ping); 870 QuicFrame frame(&ping);
884 frames.push_back(frame); 871 frames.push_back(frame);
885 QuicPacket* packet = 872 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, header_, frames);
886 BuildUnsizedDataPacket(&framer_, header_, frames).packet;
887 EXPECT_TRUE(packet != nullptr); 873 EXPECT_TRUE(packet != nullptr);
888 return packet; 874 return packet;
889 } 875 }
890 876
891 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number, 877 QuicPacket* ConstructClosePacket(QuicPacketSequenceNumber number,
892 QuicFecGroupNumber fec_group) { 878 QuicFecGroupNumber fec_group) {
893 header_.public_header.connection_id = connection_id_; 879 header_.public_header.connection_id = connection_id_;
894 header_.packet_sequence_number = number; 880 header_.packet_sequence_number = number;
895 header_.public_header.reset_flag = false; 881 header_.public_header.reset_flag = false;
896 header_.public_header.version_flag = false; 882 header_.public_header.version_flag = false;
897 header_.entropy_flag = false; 883 header_.entropy_flag = false;
898 header_.fec_flag = false; 884 header_.fec_flag = false;
899 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 885 header_.is_in_fec_group = fec_group == 0u ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
900 header_.fec_group = fec_group; 886 header_.fec_group = fec_group;
901 887
902 QuicConnectionCloseFrame qccf; 888 QuicConnectionCloseFrame qccf;
903 qccf.error_code = QUIC_PEER_GOING_AWAY; 889 qccf.error_code = QUIC_PEER_GOING_AWAY;
904 890
905 QuicFrames frames; 891 QuicFrames frames;
906 QuicFrame frame(&qccf); 892 QuicFrame frame(&qccf);
907 frames.push_back(frame); 893 frames.push_back(frame);
908 QuicPacket* packet = 894 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, header_, frames);
909 BuildUnsizedDataPacket(&framer_, header_, frames).packet;
910 EXPECT_TRUE(packet != nullptr); 895 EXPECT_TRUE(packet != nullptr);
911 return packet; 896 return packet;
912 } 897 }
913 898
914 QuicTime::Delta DefaultRetransmissionTime() { 899 QuicTime::Delta DefaultRetransmissionTime() {
915 return QuicTime::Delta::FromMilliseconds(kDefaultRetransmissionTimeMs); 900 return QuicTime::Delta::FromMilliseconds(kDefaultRetransmissionTimeMs);
916 } 901 }
917 902
918 QuicTime::Delta DefaultDelayedAckTime() { 903 QuicTime::Delta DefaultDelayedAckTime() {
919 return QuicTime::Delta::FromMilliseconds(kMaxDelayedAckTimeMs); 904 return QuicTime::Delta::FromMilliseconds(kMaxDelayedAckTimeMs);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 testing::Return(QuicTime::Delta::Zero())); 969 testing::Return(QuicTime::Delta::Zero()));
985 } 970 }
986 971
987 QuicConnectionId connection_id_; 972 QuicConnectionId connection_id_;
988 QuicFramer framer_; 973 QuicFramer framer_;
989 QuicPacketCreator peer_creator_; 974 QuicPacketCreator peer_creator_;
990 MockEntropyCalculator entropy_calculator_; 975 MockEntropyCalculator entropy_calculator_;
991 976
992 MockSendAlgorithm* send_algorithm_; 977 MockSendAlgorithm* send_algorithm_;
993 MockLossAlgorithm* loss_algorithm_; 978 MockLossAlgorithm* loss_algorithm_;
994 TestReceiveAlgorithm* receive_algorithm_;
995 MockClock clock_; 979 MockClock clock_;
996 MockRandom random_generator_; 980 MockRandom random_generator_;
997 scoped_ptr<TestConnectionHelper> helper_; 981 scoped_ptr<TestConnectionHelper> helper_;
998 scoped_ptr<TestPacketWriter> writer_; 982 scoped_ptr<TestPacketWriter> writer_;
999 NiceMock<MockPacketWriterFactory> factory_; 983 NiceMock<MockPacketWriterFactory> factory_;
1000 TestConnection connection_; 984 TestConnection connection_;
1001 QuicPacketCreator* creator_; 985 QuicPacketCreator* creator_;
1002 QuicPacketGenerator* generator_; 986 QuicPacketGenerator* generator_;
1003 QuicSentPacketManager* manager_; 987 QuicSentPacketManager* manager_;
1004 StrictMock<MockConnectionVisitor> visitor_; 988 StrictMock<MockConnectionVisitor> visitor_;
1005 989
1006 QuicPacketHeader header_; 990 QuicPacketHeader header_;
1007 QuicStreamFrame frame1_; 991 QuicStreamFrame frame1_;
1008 QuicStreamFrame frame2_; 992 QuicStreamFrame frame2_;
1009 scoped_ptr<QuicAckFrame> outgoing_ack_; 993 QuicAckFrame ack_;
1010 scoped_ptr<QuicStopWaitingFrame> stop_waiting_; 994 QuicStopWaitingFrame stop_waiting_;
1011 QuicSequenceNumberLength sequence_number_length_; 995 QuicSequenceNumberLength sequence_number_length_;
1012 QuicConnectionIdLength connection_id_length_; 996 QuicConnectionIdLength connection_id_length_;
1013 997
1014 private: 998 private:
1015 DISALLOW_COPY_AND_ASSIGN(QuicConnectionTest); 999 DISALLOW_COPY_AND_ASSIGN(QuicConnectionTest);
1016 }; 1000 };
1017 1001
1018 // Run all end to end tests with all supported versions. 1002 // Run all end to end tests with all supported versions.
1019 INSTANTIATE_TEST_CASE_P(SupportedVersion, 1003 INSTANTIATE_TEST_CASE_P(SupportedVersion,
1020 QuicConnectionTest, 1004 QuicConnectionTest,
1021 ::testing::ValuesIn(QuicSupportedVersions())); 1005 ::testing::ValuesIn(QuicSupportedVersions()));
1022 1006
1007 TEST_P(QuicConnectionTest, MaxPacketSize) {
1008 EXPECT_FALSE(connection_.is_server());
1009 EXPECT_EQ(1350u, connection_.max_packet_length());
1010 }
1011
1012 TEST_P(QuicConnectionTest, SmallerServerMaxPacketSize) {
1013 ValueRestore<bool> old_flag(&FLAGS_quic_small_default_packet_size, true);
1014 QuicConnectionId connection_id = 42;
1015 bool kIsServer = true;
1016 TestConnection connection(connection_id, IPEndPoint(), helper_.get(),
1017 factory_, kIsServer, version());
1018 EXPECT_TRUE(connection.is_server());
1019 EXPECT_EQ(1000u, connection.max_packet_length());
1020 }
1021
1022 TEST_P(QuicConnectionTest, ServerMaxPacketSize) {
1023 ValueRestore<bool> old_flag(&FLAGS_quic_small_default_packet_size, false);
1024 QuicConnectionId connection_id = 42;
1025 bool kIsServer = true;
1026 TestConnection connection(connection_id, IPEndPoint(), helper_.get(),
1027 factory_, kIsServer, version());
1028 EXPECT_TRUE(connection.is_server());
1029 EXPECT_EQ(1350u, connection.max_packet_length());
1030 }
1031
1032 TEST_P(QuicConnectionTest, IncreaseServerMaxPacketSize) {
1033 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1034
1035 connection_.set_is_server(true);
1036 connection_.set_max_packet_length(1000);
1037
1038 QuicPacketHeader header;
1039 header.public_header.connection_id = connection_id_;
1040 header.public_header.reset_flag = false;
1041 header.public_header.version_flag = true;
1042 header.entropy_flag = false;
1043 header.fec_flag = false;
1044 header.packet_sequence_number = 1;
1045 header.fec_group = 0;
1046
1047 QuicFrames frames;
1048 QuicPaddingFrame padding;
1049 frames.push_back(QuicFrame(&frame1_));
1050 frames.push_back(QuicFrame(&padding));
1051
1052 scoped_ptr<QuicPacket> packet(
1053 BuildUnsizedDataPacket(&framer_, header, frames));
1054 scoped_ptr<QuicEncryptedPacket> encrypted(
1055 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
1056 EXPECT_EQ(kMaxPacketSize, encrypted->length());
1057
1058 framer_.set_version(version());
1059 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1);
1060 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
1061
1062 EXPECT_EQ(kMaxPacketSize, connection_.max_packet_length());
1063 }
1064
1023 TEST_P(QuicConnectionTest, PacketsInOrder) { 1065 TEST_P(QuicConnectionTest, PacketsInOrder) {
1024 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1066 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1025 1067
1026 ProcessPacket(1); 1068 ProcessPacket(1);
1027 EXPECT_EQ(1u, outgoing_ack()->largest_observed); 1069 EXPECT_EQ(1u, outgoing_ack()->largest_observed);
1028 EXPECT_EQ(0u, outgoing_ack()->missing_packets.size()); 1070 EXPECT_EQ(0u, outgoing_ack()->missing_packets.size());
1029 1071
1030 ProcessPacket(2); 1072 ProcessPacket(2);
1031 EXPECT_EQ(2u, outgoing_ack()->largest_observed); 1073 EXPECT_EQ(2u, outgoing_ack()->largest_observed);
1032 EXPECT_EQ(0u, outgoing_ack()->missing_packets.size()); 1074 EXPECT_EQ(0u, outgoing_ack()->missing_packets.size());
(...skipping 2117 matching lines...) Expand 10 before | Expand all | Expand 10 after
3150 clock_.AdvanceTime(five_ms); 3192 clock_.AdvanceTime(five_ms);
3151 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow()); 3193 EXPECT_EQ(default_timeout.Add(five_ms), clock_.ApproximateNow());
3152 connection_.GetTimeoutAlarm()->Fire(); 3194 connection_.GetTimeoutAlarm()->Fire();
3153 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); 3195 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
3154 EXPECT_FALSE(connection_.connected()); 3196 EXPECT_FALSE(connection_.connected());
3155 } 3197 }
3156 3198
3157 TEST_P(QuicConnectionTest, TimeoutAfterSendSilentClose) { 3199 TEST_P(QuicConnectionTest, TimeoutAfterSendSilentClose) {
3158 // Same test as above, but complete a handshake which enables silent close, 3200 // Same test as above, but complete a handshake which enables silent close,
3159 // causing no connection close packet to be sent. 3201 // causing no connection close packet to be sent.
3160 ValueRestore<bool> old_flag(&FLAGS_quic_allow_silent_close, true);
3161 EXPECT_TRUE(connection_.connected()); 3202 EXPECT_TRUE(connection_.connected());
3162 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)); 3203 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _));
3163 QuicConfig config; 3204 QuicConfig config;
3164 3205
3165 // Create a handshake message that also enables silent close. 3206 // Create a handshake message that also enables silent close.
3166 CryptoHandshakeMessage msg; 3207 CryptoHandshakeMessage msg;
3167 string error_details; 3208 string error_details;
3168 QuicConfig client_config; 3209 QuicConfig client_config;
3169 client_config.SetInitialStreamFlowControlWindowToSend( 3210 client_config.SetInitialStreamFlowControlWindowToSend(
3170 kInitialStreamFlowControlWindowForTest); 3211 kInitialStreamFlowControlWindowForTest);
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
3694 header.public_header.version_flag = true; 3735 header.public_header.version_flag = true;
3695 header.entropy_flag = false; 3736 header.entropy_flag = false;
3696 header.fec_flag = false; 3737 header.fec_flag = false;
3697 header.packet_sequence_number = 12; 3738 header.packet_sequence_number = 12;
3698 header.fec_group = 0; 3739 header.fec_group = 0;
3699 3740
3700 QuicFrames frames; 3741 QuicFrames frames;
3701 QuicFrame frame(&frame1_); 3742 QuicFrame frame(&frame1_);
3702 frames.push_back(frame); 3743 frames.push_back(frame);
3703 scoped_ptr<QuicPacket> packet( 3744 scoped_ptr<QuicPacket> packet(
3704 BuildUnsizedDataPacket(&framer_, header, frames).packet); 3745 BuildUnsizedDataPacket(&framer_, header, frames));
3705 scoped_ptr<QuicEncryptedPacket> encrypted( 3746 scoped_ptr<QuicEncryptedPacket> encrypted(
3706 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); 3747 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
3707 3748
3708 framer_.set_version(version()); 3749 framer_.set_version(version());
3709 connection_.set_is_server(true); 3750 connection_.set_is_server(true);
3710 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3751 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3711 EXPECT_TRUE(writer_->version_negotiation_packet() != nullptr); 3752 EXPECT_TRUE(writer_->version_negotiation_packet() != nullptr);
3712 3753
3713 size_t num_versions = arraysize(kSupportedQuicVersions); 3754 size_t num_versions = arraysize(kSupportedQuicVersions);
3714 ASSERT_EQ(num_versions, 3755 ASSERT_EQ(num_versions,
(...skipping 17 matching lines...) Expand all
3732 header.public_header.version_flag = true; 3773 header.public_header.version_flag = true;
3733 header.entropy_flag = false; 3774 header.entropy_flag = false;
3734 header.fec_flag = false; 3775 header.fec_flag = false;
3735 header.packet_sequence_number = 12; 3776 header.packet_sequence_number = 12;
3736 header.fec_group = 0; 3777 header.fec_group = 0;
3737 3778
3738 QuicFrames frames; 3779 QuicFrames frames;
3739 QuicFrame frame(&frame1_); 3780 QuicFrame frame(&frame1_);
3740 frames.push_back(frame); 3781 frames.push_back(frame);
3741 scoped_ptr<QuicPacket> packet( 3782 scoped_ptr<QuicPacket> packet(
3742 BuildUnsizedDataPacket(&framer_, header, frames).packet); 3783 BuildUnsizedDataPacket(&framer_, header, frames));
3743 scoped_ptr<QuicEncryptedPacket> encrypted( 3784 scoped_ptr<QuicEncryptedPacket> encrypted(
3744 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); 3785 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
3745 3786
3746 framer_.set_version(version()); 3787 framer_.set_version(version());
3747 connection_.set_is_server(true); 3788 connection_.set_is_server(true);
3748 BlockOnNextWrite(); 3789 BlockOnNextWrite();
3749 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3790 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3750 EXPECT_EQ(0u, writer_->last_packet_size()); 3791 EXPECT_EQ(0u, writer_->last_packet_size());
3751 EXPECT_TRUE(connection_.HasQueuedData()); 3792 EXPECT_TRUE(connection_.HasQueuedData());
3752 3793
(...skipping 24 matching lines...) Expand all
3777 header.public_header.version_flag = true; 3818 header.public_header.version_flag = true;
3778 header.entropy_flag = false; 3819 header.entropy_flag = false;
3779 header.fec_flag = false; 3820 header.fec_flag = false;
3780 header.packet_sequence_number = 12; 3821 header.packet_sequence_number = 12;
3781 header.fec_group = 0; 3822 header.fec_group = 0;
3782 3823
3783 QuicFrames frames; 3824 QuicFrames frames;
3784 QuicFrame frame(&frame1_); 3825 QuicFrame frame(&frame1_);
3785 frames.push_back(frame); 3826 frames.push_back(frame);
3786 scoped_ptr<QuicPacket> packet( 3827 scoped_ptr<QuicPacket> packet(
3787 BuildUnsizedDataPacket(&framer_, header, frames).packet); 3828 BuildUnsizedDataPacket(&framer_, header, frames));
3788 scoped_ptr<QuicEncryptedPacket> encrypted( 3829 scoped_ptr<QuicEncryptedPacket> encrypted(
3789 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); 3830 framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
3790 3831
3791 framer_.set_version(version()); 3832 framer_.set_version(version());
3792 connection_.set_is_server(true); 3833 connection_.set_is_server(true);
3793 BlockOnNextWrite(); 3834 BlockOnNextWrite();
3794 writer_->set_is_write_blocked_data_buffered(true); 3835 writer_->set_is_write_blocked_data_buffered(true);
3795 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3836 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3796 EXPECT_EQ(0u, writer_->last_packet_size()); 3837 EXPECT_EQ(0u, writer_->last_packet_size());
3797 EXPECT_FALSE(connection_.HasQueuedData()); 3838 EXPECT_FALSE(connection_.HasQueuedData());
(...skipping 24 matching lines...) Expand all
3822 header.public_header, supported_versions)); 3863 header.public_header, supported_versions));
3823 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3864 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3824 3865
3825 // Now force another packet. The connection should transition into 3866 // Now force another packet. The connection should transition into
3826 // NEGOTIATED_VERSION state and tell the packet creator to StopSendingVersion. 3867 // NEGOTIATED_VERSION state and tell the packet creator to StopSendingVersion.
3827 header.public_header.version_flag = false; 3868 header.public_header.version_flag = false;
3828 QuicFrames frames; 3869 QuicFrames frames;
3829 QuicFrame frame(&frame1_); 3870 QuicFrame frame(&frame1_);
3830 frames.push_back(frame); 3871 frames.push_back(frame);
3831 scoped_ptr<QuicPacket> packet( 3872 scoped_ptr<QuicPacket> packet(
3832 BuildUnsizedDataPacket(&framer_, header, frames).packet); 3873 BuildUnsizedDataPacket(&framer_, header, frames));
3833 encrypted.reset(framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet)); 3874 encrypted.reset(framer_.EncryptPacket(ENCRYPTION_NONE, 12, *packet));
3834 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); 3875 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1);
3835 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 3876 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3836 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 3877 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3837 3878
3838 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket(creator_)); 3879 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket(creator_));
3839 } 3880 }
3840 3881
3841 TEST_P(QuicConnectionTest, BadVersionNegotiation) { 3882 TEST_P(QuicConnectionTest, BadVersionNegotiation) {
3842 QuicPacketHeader header; 3883 QuicPacketHeader header;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
3967 4008
3968 QuicConnectionCloseFrame qccf; 4009 QuicConnectionCloseFrame qccf;
3969 qccf.error_code = QUIC_PEER_GOING_AWAY; 4010 qccf.error_code = QUIC_PEER_GOING_AWAY;
3970 QuicFrame close_frame(&qccf); 4011 QuicFrame close_frame(&qccf);
3971 QuicFrame stream_frame(&frame1_); 4012 QuicFrame stream_frame(&frame1_);
3972 4013
3973 QuicFrames frames; 4014 QuicFrames frames;
3974 frames.push_back(stream_frame); 4015 frames.push_back(stream_frame);
3975 frames.push_back(close_frame); 4016 frames.push_back(close_frame);
3976 scoped_ptr<QuicPacket> packet( 4017 scoped_ptr<QuicPacket> packet(
3977 BuildUnsizedDataPacket(&framer_, header_, frames).packet); 4018 BuildUnsizedDataPacket(&framer_, header_, frames));
3978 EXPECT_TRUE(nullptr != packet.get()); 4019 EXPECT_TRUE(nullptr != packet.get());
3979 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( 4020 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
3980 ENCRYPTION_NONE, 1, *packet)); 4021 ENCRYPTION_NONE, 1, *packet));
3981 4022
3982 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true)); 4023 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, true));
3983 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1); 4024 EXPECT_CALL(visitor_, OnStreamFrames(_)).Times(1);
3984 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 4025 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
3985 4026
3986 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted); 4027 connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), *encrypted);
3987 } 4028 }
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
4261 QuicPacketHeader ack_header; 4302 QuicPacketHeader ack_header;
4262 ack_header.public_header.connection_id = connection_id_; 4303 ack_header.public_header.connection_id = connection_id_;
4263 ack_header.public_header.reset_flag = false; 4304 ack_header.public_header.reset_flag = false;
4264 ack_header.public_header.version_flag = false; 4305 ack_header.public_header.version_flag = false;
4265 ack_header.entropy_flag = !kEntropyFlag; 4306 ack_header.entropy_flag = !kEntropyFlag;
4266 ack_header.fec_flag = true; 4307 ack_header.fec_flag = true;
4267 ack_header.packet_sequence_number = 1; 4308 ack_header.packet_sequence_number = 1;
4268 ack_header.is_in_fec_group = IN_FEC_GROUP; 4309 ack_header.is_in_fec_group = IN_FEC_GROUP;
4269 ack_header.fec_group = 1; 4310 ack_header.fec_group = 1;
4270 4311
4271 QuicPacket* packet = 4312 QuicPacket* packet = BuildUnsizedDataPacket(&framer_, ack_header, frames);
4272 BuildUnsizedDataPacket(&framer_, ack_header, frames).packet;
4273 4313
4274 // Take the packet which contains the ACK frame, and construct and deliver an 4314 // Take the packet which contains the ACK frame, and construct and deliver an
4275 // FEC packet which allows the ACK packet to be recovered. 4315 // FEC packet which allows the ACK packet to be recovered.
4276 ProcessFecPacket(2, 1, true, !kEntropyFlag, packet); 4316 ProcessFecPacket(2, 1, true, !kEntropyFlag, packet);
4277 } 4317 }
4278 4318
4279 TEST_P(QuicConnectionTest, NetworkChangeVisitorCwndCallbackChangesFecState) { 4319 TEST_P(QuicConnectionTest, NetworkChangeVisitorCwndCallbackChangesFecState) {
4280 size_t max_packets_per_fec_group = creator_->max_packets_per_fec_group(); 4320 size_t max_packets_per_fec_group = creator_->max_packets_per_fec_group();
4281 4321
4282 QuicSentPacketManager::NetworkChangeVisitor* visitor = 4322 QuicSentPacketManager::NetworkChangeVisitor* visitor =
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
4422 // Regression test for b/18594622 4462 // Regression test for b/18594622
4423 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); 4463 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
4424 EXPECT_DFATAL( 4464 EXPECT_DFATAL(
4425 connection_.SendStreamDataWithString(3, "", 0, !kFin, delegate.get()), 4465 connection_.SendStreamDataWithString(3, "", 0, !kFin, delegate.get()),
4426 "Attempt to send empty stream frame"); 4466 "Attempt to send empty stream frame");
4427 } 4467 }
4428 4468
4429 } // namespace 4469 } // namespace
4430 } // namespace test 4470 } // namespace test
4431 } // namespace net 4471 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_logger.cc ('k') | net/quic/quic_crypto_client_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698