OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |