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

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

Issue 2740453006: Add QuicStringPiece which is actually StringPiece. (Closed)
Patch Set: fix compile error and rebase Created 3 years, 9 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
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/core/quic_connection.h" 5 #include "net/quic/core/quic_connection.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <memory> 8 #include <memory>
9 #include <ostream> 9 #include <ostream>
10 #include <utility> 10 #include <utility>
(...skipping 20 matching lines...) Expand all
31 #include "net/quic/test_tools/quic_framer_peer.h" 31 #include "net/quic/test_tools/quic_framer_peer.h"
32 #include "net/quic/test_tools/quic_packet_creator_peer.h" 32 #include "net/quic/test_tools/quic_packet_creator_peer.h"
33 #include "net/quic/test_tools/quic_packet_generator_peer.h" 33 #include "net/quic/test_tools/quic_packet_generator_peer.h"
34 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 34 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
35 #include "net/quic/test_tools/quic_test_utils.h" 35 #include "net/quic/test_tools/quic_test_utils.h"
36 #include "net/quic/test_tools/simple_quic_framer.h" 36 #include "net/quic/test_tools/simple_quic_framer.h"
37 #include "net/test/gtest_util.h" 37 #include "net/test/gtest_util.h"
38 #include "testing/gmock/include/gmock/gmock.h" 38 #include "testing/gmock/include/gmock/gmock.h"
39 #include "testing/gtest/include/gtest/gtest.h" 39 #include "testing/gtest/include/gtest/gtest.h"
40 40
41 using base::StringPiece;
42 using std::string; 41 using std::string;
43 using testing::AnyNumber; 42 using testing::AnyNumber;
44 using testing::AtLeast; 43 using testing::AtLeast;
45 using testing::DoAll; 44 using testing::DoAll;
46 using testing::InSequence; 45 using testing::InSequence;
47 using testing::InvokeWithoutArgs; 46 using testing::InvokeWithoutArgs;
48 using testing::NiceMock; 47 using testing::NiceMock;
49 using testing::Ref; 48 using testing::Ref;
50 using testing::Return; 49 using testing::Return;
51 using testing::SaveArg; 50 using testing::SaveArg;
(...skipping 26 matching lines...) Expand all
78 } 77 }
79 78
80 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message. 79 // TaggingEncrypter appends kTagSize bytes of |tag| to the end of each message.
81 class TaggingEncrypter : public QuicEncrypter { 80 class TaggingEncrypter : public QuicEncrypter {
82 public: 81 public:
83 explicit TaggingEncrypter(uint8_t tag) : tag_(tag) {} 82 explicit TaggingEncrypter(uint8_t tag) : tag_(tag) {}
84 83
85 ~TaggingEncrypter() override {} 84 ~TaggingEncrypter() override {}
86 85
87 // QuicEncrypter interface. 86 // QuicEncrypter interface.
88 bool SetKey(StringPiece key) override { return true; } 87 bool SetKey(QuicStringPiece key) override { return true; }
89 88
90 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } 89 bool SetNoncePrefix(QuicStringPiece nonce_prefix) override { return true; }
91 90
92 bool EncryptPacket(QuicVersion /*version*/, 91 bool EncryptPacket(QuicVersion /*version*/,
93 QuicPacketNumber packet_number, 92 QuicPacketNumber packet_number,
94 StringPiece associated_data, 93 QuicStringPiece associated_data,
95 StringPiece plaintext, 94 QuicStringPiece plaintext,
96 char* output, 95 char* output,
97 size_t* output_length, 96 size_t* output_length,
98 size_t max_output_length) override { 97 size_t max_output_length) override {
99 const size_t len = plaintext.size() + kTagSize; 98 const size_t len = plaintext.size() + kTagSize;
100 if (max_output_length < len) { 99 if (max_output_length < len) {
101 return false; 100 return false;
102 } 101 }
103 // Memmove is safe for inplace encryption. 102 // Memmove is safe for inplace encryption.
104 memmove(output, plaintext.data(), plaintext.size()); 103 memmove(output, plaintext.data(), plaintext.size());
105 output += plaintext.size(); 104 output += plaintext.size();
106 memset(output, tag_, kTagSize); 105 memset(output, tag_, kTagSize);
107 *output_length = len; 106 *output_length = len;
108 return true; 107 return true;
109 } 108 }
110 109
111 size_t GetKeySize() const override { return 0; } 110 size_t GetKeySize() const override { return 0; }
112 size_t GetNoncePrefixSize() const override { return 0; } 111 size_t GetNoncePrefixSize() const override { return 0; }
113 112
114 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override { 113 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override {
115 return ciphertext_size - kTagSize; 114 return ciphertext_size - kTagSize;
116 } 115 }
117 116
118 size_t GetCiphertextSize(size_t plaintext_size) const override { 117 size_t GetCiphertextSize(size_t plaintext_size) const override {
119 return plaintext_size + kTagSize; 118 return plaintext_size + kTagSize;
120 } 119 }
121 120
122 StringPiece GetKey() const override { return StringPiece(); } 121 QuicStringPiece GetKey() const override { return QuicStringPiece(); }
123 122
124 StringPiece GetNoncePrefix() const override { return StringPiece(); } 123 QuicStringPiece GetNoncePrefix() const override { return QuicStringPiece(); }
125 124
126 private: 125 private:
127 enum { 126 enum {
128 kTagSize = 12, 127 kTagSize = 12,
129 }; 128 };
130 129
131 const uint8_t tag_; 130 const uint8_t tag_;
132 131
133 DISALLOW_COPY_AND_ASSIGN(TaggingEncrypter); 132 DISALLOW_COPY_AND_ASSIGN(TaggingEncrypter);
134 }; 133 };
135 134
136 // TaggingDecrypter ensures that the final kTagSize bytes of the message all 135 // TaggingDecrypter ensures that the final kTagSize bytes of the message all
137 // have the same value and then removes them. 136 // have the same value and then removes them.
138 class TaggingDecrypter : public QuicDecrypter { 137 class TaggingDecrypter : public QuicDecrypter {
139 public: 138 public:
140 ~TaggingDecrypter() override {} 139 ~TaggingDecrypter() override {}
141 140
142 // QuicDecrypter interface 141 // QuicDecrypter interface
143 bool SetKey(StringPiece key) override { return true; } 142 bool SetKey(QuicStringPiece key) override { return true; }
144 143
145 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } 144 bool SetNoncePrefix(QuicStringPiece nonce_prefix) override { return true; }
146 145
147 bool SetPreliminaryKey(StringPiece key) override { 146 bool SetPreliminaryKey(QuicStringPiece key) override {
148 QUIC_BUG << "should not be called"; 147 QUIC_BUG << "should not be called";
149 return false; 148 return false;
150 } 149 }
151 150
152 bool SetDiversificationNonce(const DiversificationNonce& key) override { 151 bool SetDiversificationNonce(const DiversificationNonce& key) override {
153 return true; 152 return true;
154 } 153 }
155 154
156 bool DecryptPacket(QuicVersion /*version*/, 155 bool DecryptPacket(QuicVersion /*version*/,
157 QuicPacketNumber packet_number, 156 QuicPacketNumber packet_number,
158 StringPiece associated_data, 157 QuicStringPiece associated_data,
159 StringPiece ciphertext, 158 QuicStringPiece ciphertext,
160 char* output, 159 char* output,
161 size_t* output_length, 160 size_t* output_length,
162 size_t max_output_length) override { 161 size_t max_output_length) override {
163 if (ciphertext.size() < kTagSize) { 162 if (ciphertext.size() < kTagSize) {
164 return false; 163 return false;
165 } 164 }
166 if (!CheckTag(ciphertext, GetTag(ciphertext))) { 165 if (!CheckTag(ciphertext, GetTag(ciphertext))) {
167 return false; 166 return false;
168 } 167 }
169 *output_length = ciphertext.size() - kTagSize; 168 *output_length = ciphertext.size() - kTagSize;
170 memcpy(output, ciphertext.data(), *output_length); 169 memcpy(output, ciphertext.data(), *output_length);
171 return true; 170 return true;
172 } 171 }
173 172
174 StringPiece GetKey() const override { return StringPiece(); } 173 QuicStringPiece GetKey() const override { return QuicStringPiece(); }
175 StringPiece GetNoncePrefix() const override { return StringPiece(); } 174 QuicStringPiece GetNoncePrefix() const override { return QuicStringPiece(); }
176 const char* cipher_name() const override { return "Tagging"; } 175 const char* cipher_name() const override { return "Tagging"; }
177 // Use a distinct value starting with 0xFFFFFF, which is never used by TLS. 176 // Use a distinct value starting with 0xFFFFFF, which is never used by TLS.
178 uint32_t cipher_id() const override { return 0xFFFFFFF0; } 177 uint32_t cipher_id() const override { return 0xFFFFFFF0; }
179 178
180 protected: 179 protected:
181 virtual uint8_t GetTag(StringPiece ciphertext) { 180 virtual uint8_t GetTag(QuicStringPiece ciphertext) {
182 return ciphertext.data()[ciphertext.size() - 1]; 181 return ciphertext.data()[ciphertext.size() - 1];
183 } 182 }
184 183
185 private: 184 private:
186 enum { 185 enum {
187 kTagSize = 12, 186 kTagSize = 12,
188 }; 187 };
189 188
190 bool CheckTag(StringPiece ciphertext, uint8_t tag) { 189 bool CheckTag(QuicStringPiece ciphertext, uint8_t tag) {
191 for (size_t i = ciphertext.size() - kTagSize; i < ciphertext.size(); i++) { 190 for (size_t i = ciphertext.size() - kTagSize; i < ciphertext.size(); i++) {
192 if (ciphertext.data()[i] != tag) { 191 if (ciphertext.data()[i] != tag) {
193 return false; 192 return false;
194 } 193 }
195 } 194 }
196 195
197 return true; 196 return true;
198 } 197 }
199 }; 198 };
200 199
201 // StringTaggingDecrypter ensures that the final kTagSize bytes of the message 200 // StringTaggingDecrypter ensures that the final kTagSize bytes of the message
202 // match the expected value. 201 // match the expected value.
203 class StrictTaggingDecrypter : public TaggingDecrypter { 202 class StrictTaggingDecrypter : public TaggingDecrypter {
204 public: 203 public:
205 explicit StrictTaggingDecrypter(uint8_t tag) : tag_(tag) {} 204 explicit StrictTaggingDecrypter(uint8_t tag) : tag_(tag) {}
206 ~StrictTaggingDecrypter() override {} 205 ~StrictTaggingDecrypter() override {}
207 206
208 // TaggingQuicDecrypter 207 // TaggingQuicDecrypter
209 uint8_t GetTag(StringPiece ciphertext) override { return tag_; } 208 uint8_t GetTag(QuicStringPiece ciphertext) override { return tag_; }
210 209
211 const char* cipher_name() const override { return "StrictTagging"; } 210 const char* cipher_name() const override { return "StrictTagging"; }
212 // Use a distinct value starting with 0xFFFFFF, which is never used by TLS. 211 // Use a distinct value starting with 0xFFFFFF, which is never used by TLS.
213 uint32_t cipher_id() const override { return 0xFFFFFFF1; } 212 uint32_t cipher_id() const override { return 0xFFFFFFF1; }
214 213
215 private: 214 private:
216 const uint8_t tag_; 215 const uint8_t tag_;
217 }; 216 };
218 217
219 class TestConnectionHelper : public QuicConnectionHelperInterface { 218 class TestConnectionHelper : public QuicConnectionHelperInterface {
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 has_ack, has_pending_frames); 502 has_ack, has_pending_frames);
504 if (retransmittable == HAS_RETRANSMITTABLE_DATA) { 503 if (retransmittable == HAS_RETRANSMITTABLE_DATA) {
505 serialized_packet.retransmittable_frames.push_back( 504 serialized_packet.retransmittable_frames.push_back(
506 QuicFrame(new QuicStreamFrame())); 505 QuicFrame(new QuicStreamFrame()));
507 } 506 }
508 OnSerializedPacket(&serialized_packet); 507 OnSerializedPacket(&serialized_packet);
509 } 508 }
510 509
511 QuicConsumedData SendStreamDataWithString( 510 QuicConsumedData SendStreamDataWithString(
512 QuicStreamId id, 511 QuicStreamId id,
513 StringPiece data, 512 QuicStringPiece data,
514 QuicStreamOffset offset, 513 QuicStreamOffset offset,
515 bool fin, 514 bool fin,
516 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) { 515 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
517 if (id != kCryptoStreamId && this->encryption_level() == ENCRYPTION_NONE) { 516 if (id != kCryptoStreamId && this->encryption_level() == ENCRYPTION_NONE) {
518 this->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); 517 this->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
519 } 518 }
520 struct iovec iov; 519 struct iovec iov;
521 QuicIOVector data_iov(MakeIOVector(data, &iov)); 520 QuicIOVector data_iov(MakeIOVector(data, &iov));
522 return QuicConnection::SendStreamData(id, data_iov, offset, fin, 521 return QuicConnection::SendStreamData(id, data_iov, offset, fin,
523 std::move(ack_listener)); 522 std::move(ack_listener));
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 connection_(connection_id_, 698 connection_(connection_id_,
700 kPeerAddress, 699 kPeerAddress,
701 helper_.get(), 700 helper_.get(),
702 alarm_factory_.get(), 701 alarm_factory_.get(),
703 writer_.get(), 702 writer_.get(),
704 Perspective::IS_CLIENT, 703 Perspective::IS_CLIENT,
705 version()), 704 version()),
706 creator_(QuicConnectionPeer::GetPacketCreator(&connection_)), 705 creator_(QuicConnectionPeer::GetPacketCreator(&connection_)),
707 generator_(QuicConnectionPeer::GetPacketGenerator(&connection_)), 706 generator_(QuicConnectionPeer::GetPacketGenerator(&connection_)),
708 manager_(QuicConnectionPeer::GetSentPacketManager(&connection_)), 707 manager_(QuicConnectionPeer::GetSentPacketManager(&connection_)),
709 frame1_(1, false, 0, StringPiece(data1)), 708 frame1_(1, false, 0, QuicStringPiece(data1)),
710 frame2_(1, false, 3, StringPiece(data2)), 709 frame2_(1, false, 3, QuicStringPiece(data2)),
711 packet_number_length_(PACKET_6BYTE_PACKET_NUMBER), 710 packet_number_length_(PACKET_6BYTE_PACKET_NUMBER),
712 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) { 711 connection_id_length_(PACKET_8BYTE_CONNECTION_ID) {
713 connection_.set_defer_send_in_response_to_packets(GetParam().ack_response == 712 connection_.set_defer_send_in_response_to_packets(GetParam().ack_response ==
714 AckResponse::kDefer); 713 AckResponse::kDefer);
715 QuicConnectionPeer::SetNoStopWaitingFrames(&connection_, 714 QuicConnectionPeer::SetNoStopWaitingFrames(&connection_,
716 GetParam().no_stop_waiting); 715 GetParam().no_stop_waiting);
717 connection_.set_visitor(&visitor_); 716 connection_.set_visitor(&visitor_);
718 connection_.SetSendAlgorithm(send_algorithm_); 717 connection_.SetSendAlgorithm(send_algorithm_);
719 connection_.SetLossAlgorithm(loss_algorithm_.get()); 718 connection_.SetLossAlgorithm(loss_algorithm_.get());
720 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) 719 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 std::unique_ptr<QuicPacket> packet(ConstructClosePacket(number)); 875 std::unique_ptr<QuicPacket> packet(ConstructClosePacket(number));
877 char buffer[kMaxPacketSize]; 876 char buffer[kMaxPacketSize];
878 size_t encrypted_length = peer_framer_.EncryptPayload( 877 size_t encrypted_length = peer_framer_.EncryptPayload(
879 ENCRYPTION_NONE, number, *packet, buffer, kMaxPacketSize); 878 ENCRYPTION_NONE, number, *packet, buffer, kMaxPacketSize);
880 connection_.ProcessUdpPacket( 879 connection_.ProcessUdpPacket(
881 kSelfAddress, kPeerAddress, 880 kSelfAddress, kPeerAddress,
882 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); 881 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
883 } 882 }
884 883
885 QuicByteCount SendStreamDataToPeer(QuicStreamId id, 884 QuicByteCount SendStreamDataToPeer(QuicStreamId id,
886 StringPiece data, 885 QuicStringPiece data,
887 QuicStreamOffset offset, 886 QuicStreamOffset offset,
888 bool fin, 887 bool fin,
889 QuicPacketNumber* last_packet) { 888 QuicPacketNumber* last_packet) {
890 QuicByteCount packet_size; 889 QuicByteCount packet_size;
891 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 890 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
892 .WillOnce(DoAll(SaveArg<3>(&packet_size), Return(true))); 891 .WillOnce(DoAll(SaveArg<3>(&packet_size), Return(true)));
893 connection_.SendStreamDataWithString(id, data, offset, fin, nullptr); 892 connection_.SendStreamDataWithString(id, data, offset, fin, nullptr);
894 if (last_packet != nullptr) { 893 if (last_packet != nullptr) {
895 *last_packet = creator_->packet_number(); 894 *last_packet = creator_->packet_number();
896 } 895 }
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 INSTANTIATE_TEST_CASE_P(SupportedVersion, 1084 INSTANTIATE_TEST_CASE_P(SupportedVersion,
1086 QuicConnectionTest, 1085 QuicConnectionTest,
1087 ::testing::ValuesIn(GetTestParams())); 1086 ::testing::ValuesIn(GetTestParams()));
1088 1087
1089 TEST_P(QuicConnectionTest, SelfAddressChangeAtClient) { 1088 TEST_P(QuicConnectionTest, SelfAddressChangeAtClient) {
1090 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1089 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1091 1090
1092 EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective()); 1091 EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
1093 EXPECT_TRUE(connection_.connected()); 1092 EXPECT_TRUE(connection_.connected());
1094 1093
1095 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece()); 1094 QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
1096 EXPECT_CALL(visitor_, OnStreamFrame(_)); 1095 EXPECT_CALL(visitor_, OnStreamFrame(_));
1097 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress, 1096 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
1098 kPeerAddress); 1097 kPeerAddress);
1099 // Cause change in self_address. 1098 // Cause change in self_address.
1100 QuicIpAddress host; 1099 QuicIpAddress host;
1101 host.FromString("1.1.1.1"); 1100 host.FromString("1.1.1.1");
1102 QuicSocketAddress self_address(host, 123); 1101 QuicSocketAddress self_address(host, 123);
1103 EXPECT_CALL(visitor_, OnStreamFrame(_)); 1102 EXPECT_CALL(visitor_, OnStreamFrame(_));
1104 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address, 1103 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address,
1105 kPeerAddress); 1104 kPeerAddress);
1106 EXPECT_TRUE(connection_.connected()); 1105 EXPECT_TRUE(connection_.connected());
1107 } 1106 }
1108 1107
1109 TEST_P(QuicConnectionTest, SelfAddressChangeAtServer) { 1108 TEST_P(QuicConnectionTest, SelfAddressChangeAtServer) {
1110 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1109 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1111 1110
1112 set_perspective(Perspective::IS_SERVER); 1111 set_perspective(Perspective::IS_SERVER);
1113 QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false); 1112 QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
1114 1113
1115 EXPECT_EQ(Perspective::IS_SERVER, connection_.perspective()); 1114 EXPECT_EQ(Perspective::IS_SERVER, connection_.perspective());
1116 EXPECT_TRUE(connection_.connected()); 1115 EXPECT_TRUE(connection_.connected());
1117 1116
1118 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece()); 1117 QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
1119 EXPECT_CALL(visitor_, OnStreamFrame(_)); 1118 EXPECT_CALL(visitor_, OnStreamFrame(_));
1120 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress, 1119 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
1121 kPeerAddress); 1120 kPeerAddress);
1122 // Cause change in self_address. 1121 // Cause change in self_address.
1123 QuicIpAddress host; 1122 QuicIpAddress host;
1124 host.FromString("1.1.1.1"); 1123 host.FromString("1.1.1.1");
1125 QuicSocketAddress self_address(host, 123); 1124 QuicSocketAddress self_address(host, 123);
1126 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_ERROR_MIGRATING_ADDRESS, _, _)); 1125 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_ERROR_MIGRATING_ADDRESS, _, _));
1127 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address, 1126 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address,
1128 kPeerAddress); 1127 kPeerAddress);
1129 EXPECT_FALSE(connection_.connected()); 1128 EXPECT_FALSE(connection_.connected());
1130 } 1129 }
1131 1130
1132 TEST_P(QuicConnectionTest, AllowSelfAddressChangeToMappedIpv4AddressAtServer) { 1131 TEST_P(QuicConnectionTest, AllowSelfAddressChangeToMappedIpv4AddressAtServer) {
1133 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1132 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1134 1133
1135 set_perspective(Perspective::IS_SERVER); 1134 set_perspective(Perspective::IS_SERVER);
1136 QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false); 1135 QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
1137 1136
1138 EXPECT_EQ(Perspective::IS_SERVER, connection_.perspective()); 1137 EXPECT_EQ(Perspective::IS_SERVER, connection_.perspective());
1139 EXPECT_TRUE(connection_.connected()); 1138 EXPECT_TRUE(connection_.connected());
1140 1139
1141 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece()); 1140 QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
1142 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(3); 1141 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(3);
1143 QuicIpAddress host; 1142 QuicIpAddress host;
1144 host.FromString("1.1.1.1"); 1143 host.FromString("1.1.1.1");
1145 QuicSocketAddress self_address1(host, 443); 1144 QuicSocketAddress self_address1(host, 443);
1146 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address1, 1145 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address1,
1147 kPeerAddress); 1146 kPeerAddress);
1148 // Cause self_address change to mapped Ipv4 address. 1147 // Cause self_address change to mapped Ipv4 address.
1149 QuicIpAddress host2; 1148 QuicIpAddress host2;
1150 host2.FromString( 1149 host2.FromString(
1151 QuicStrCat("::ffff:", connection_.self_address().host().ToString())); 1150 QuicStrCat("::ffff:", connection_.self_address().host().ToString()));
1152 QuicSocketAddress self_address2(host2, connection_.self_address().port()); 1151 QuicSocketAddress self_address2(host2, connection_.self_address().port());
1153 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address2, 1152 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address2,
1154 kPeerAddress); 1153 kPeerAddress);
1155 EXPECT_TRUE(connection_.connected()); 1154 EXPECT_TRUE(connection_.connected());
1156 // self_address change back to Ipv4 address. 1155 // self_address change back to Ipv4 address.
1157 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address1, 1156 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), self_address1,
1158 kPeerAddress); 1157 kPeerAddress);
1159 EXPECT_TRUE(connection_.connected()); 1158 EXPECT_TRUE(connection_.connected());
1160 } 1159 }
1161 1160
1162 TEST_P(QuicConnectionTest, ClientAddressChangeAndPacketReordered) { 1161 TEST_P(QuicConnectionTest, ClientAddressChangeAndPacketReordered) {
1163 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1162 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1164 set_perspective(Perspective::IS_SERVER); 1163 set_perspective(Perspective::IS_SERVER);
1165 QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false); 1164 QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
1166 // Clear peer address. 1165 // Clear peer address.
1167 QuicConnectionPeer::SetPeerAddress(&connection_, QuicSocketAddress()); 1166 QuicConnectionPeer::SetPeerAddress(&connection_, QuicSocketAddress());
1168 1167
1169 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 5); 1168 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 5);
1170 QuicStreamFrame stream_frame(1u, false, 0u, StringPiece()); 1169 QuicStreamFrame stream_frame(1u, false, 0u, QuicStringPiece());
1171 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber()); 1170 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
1172 const QuicSocketAddress kNewPeerAddress = 1171 const QuicSocketAddress kNewPeerAddress =
1173 QuicSocketAddress(QuicIpAddress::Loopback6(), 1172 QuicSocketAddress(QuicIpAddress::Loopback6(),
1174 /*port=*/23456); 1173 /*port=*/23456);
1175 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress, 1174 ProcessFramePacketWithAddresses(QuicFrame(&stream_frame), kSelfAddress,
1176 kNewPeerAddress); 1175 kNewPeerAddress);
1177 1176
1178 // Decrease packet number to simulate out-of-order packets. 1177 // Decrease packet number to simulate out-of-order packets.
1179 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4); 1178 QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 4);
1180 // This is an old packet, do not migrate. 1179 // This is an old packet, do not migrate.
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
1847 1846
1848 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 1847 EXPECT_EQ(0u, connection_.NumQueuedPackets());
1849 EXPECT_FALSE(connection_.HasQueuedData()); 1848 EXPECT_FALSE(connection_.HasQueuedData());
1850 1849
1851 // Parse the last packet and ensure multiple iovector blocks have 1850 // Parse the last packet and ensure multiple iovector blocks have
1852 // been packed into a single stream frame from one stream. 1851 // been packed into a single stream frame from one stream.
1853 EXPECT_EQ(1u, writer_->frame_count()); 1852 EXPECT_EQ(1u, writer_->frame_count());
1854 EXPECT_EQ(1u, writer_->stream_frames().size()); 1853 EXPECT_EQ(1u, writer_->stream_frames().size());
1855 QuicStreamFrame* frame = writer_->stream_frames()[0].get(); 1854 QuicStreamFrame* frame = writer_->stream_frames()[0].get();
1856 EXPECT_EQ(1u, frame->stream_id); 1855 EXPECT_EQ(1u, frame->stream_id);
1857 EXPECT_EQ("ABCD", StringPiece(frame->data_buffer, frame->data_length)); 1856 EXPECT_EQ("ABCD", QuicStringPiece(frame->data_buffer, frame->data_length));
1858 } 1857 }
1859 1858
1860 TEST_P(QuicConnectionTest, FramePackingSendvQueued) { 1859 TEST_P(QuicConnectionTest, FramePackingSendvQueued) {
1861 // Try to send two stream frames in 1 packet by using writev. 1860 // Try to send two stream frames in 1 packet by using writev.
1862 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 1861 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
1863 1862
1864 BlockOnNextWrite(); 1863 BlockOnNextWrite();
1865 char data[] = "ABCD"; 1864 char data[] = "ABCD";
1866 struct iovec iov[2]; 1865 struct iovec iov[2];
1867 iov[0].iov_base = data; 1866 iov[0].iov_base = data;
(...skipping 3295 matching lines...) Expand 10 before | Expand all | Expand 10 after
5163 error_details, ConnectionCloseSource::FROM_PEER)); 5162 error_details, ConnectionCloseSource::FROM_PEER));
5164 connection_.set_perspective(Perspective::IS_CLIENT); 5163 connection_.set_perspective(Perspective::IS_CLIENT);
5165 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, 5164 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT,
5166 error_details, 5165 error_details,
5167 ConnectionCloseBehavior::SILENT_CLOSE); 5166 ConnectionCloseBehavior::SILENT_CLOSE);
5168 } 5167 }
5169 5168
5170 } // namespace 5169 } // namespace
5171 } // namespace test 5170 } // namespace test
5172 } // namespace net 5171 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_connection.cc ('k') | net/quic/core/quic_crypto_framer_parse_message_fuzzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698