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

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

Issue 110853010: Enable support for QUIC 13. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
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_stream_factory.h" 5 #include "net/quic/quic_stream_factory.h"
6 6
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "net/cert/cert_verifier.h" 9 #include "net/cert/cert_verifier.h"
10 #include "net/dns/mock_host_resolver.h" 10 #include "net/dns/mock_host_resolver.h"
11 #include "net/http/http_response_headers.h" 11 #include "net/http/http_response_headers.h"
12 #include "net/http/http_response_info.h" 12 #include "net/http/http_response_info.h"
13 #include "net/http/http_util.h" 13 #include "net/http/http_util.h"
14 #include "net/quic/crypto/crypto_handshake.h" 14 #include "net/quic/crypto/crypto_handshake.h"
15 #include "net/quic/crypto/quic_decrypter.h" 15 #include "net/quic/crypto/quic_decrypter.h"
16 #include "net/quic/crypto/quic_encrypter.h" 16 #include "net/quic/crypto/quic_encrypter.h"
17 #include "net/quic/quic_http_stream.h" 17 #include "net/quic/quic_http_stream.h"
18 #include "net/quic/test_tools/mock_clock.h" 18 #include "net/quic/test_tools/mock_clock.h"
19 #include "net/quic/test_tools/mock_crypto_client_stream_factory.h" 19 #include "net/quic/test_tools/mock_crypto_client_stream_factory.h"
20 #include "net/quic/test_tools/mock_random.h" 20 #include "net/quic/test_tools/mock_random.h"
21 #include "net/quic/test_tools/quic_test_packet_maker.h"
21 #include "net/quic/test_tools/quic_test_utils.h" 22 #include "net/quic/test_tools/quic_test_utils.h"
22 #include "net/socket/socket_test_util.h" 23 #include "net/socket/socket_test_util.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
25 using base::StringPiece; 26 using base::StringPiece;
26 using std::string; 27 using std::string;
27 using std::vector; 28 using std::vector;
28 29
29 namespace net { 30 namespace net {
30 namespace test { 31 namespace test {
(...skipping 28 matching lines...) Expand all
59 for (QuicStreamFactory::SessionSet::iterator it = 60 for (QuicStreamFactory::SessionSet::iterator it =
60 factory->all_sessions_.begin(); 61 factory->all_sessions_.begin();
61 it != factory->all_sessions_.end(); ++it) { 62 it != factory->all_sessions_.end(); ++it) {
62 if (*it == session) 63 if (*it == session)
63 return true; 64 return true;
64 } 65 }
65 return false; 66 return false;
66 } 67 }
67 }; 68 };
68 69
69 class QuicStreamFactoryTest : public ::testing::Test { 70 class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> {
70 protected: 71 protected:
71 QuicStreamFactoryTest() 72 QuicStreamFactoryTest()
72 : random_generator_(0), 73 : random_generator_(0),
74 maker_(GetParam(), 0),
73 clock_(new MockClock()), 75 clock_(new MockClock()),
74 factory_(&host_resolver_, &socket_factory_, 76 factory_(&host_resolver_, &socket_factory_,
75 base::WeakPtr<HttpServerProperties>(), 77 base::WeakPtr<HttpServerProperties>(),
76 &crypto_client_stream_factory_, 78 &crypto_client_stream_factory_,
77 &random_generator_, clock_, kDefaultMaxPacketSize), 79 &random_generator_, clock_, kDefaultMaxPacketSize,
80 SupportedVersions(GetParam())),
78 host_port_proxy_pair_(HostPortPair(kDefaultServerHostName, 81 host_port_proxy_pair_(HostPortPair(kDefaultServerHostName,
79 kDefaultServerPort), 82 kDefaultServerPort),
80 ProxyServer::Direct()), 83 ProxyServer::Direct()),
81 is_https_(false), 84 is_https_(false),
82 cert_verifier_(CertVerifier::CreateDefault()) { 85 cert_verifier_(CertVerifier::CreateDefault()) {
83 factory_.set_require_confirmation(false); 86 factory_.set_require_confirmation(false);
84 } 87 }
85 88
86 scoped_ptr<QuicEncryptedPacket> ConstructRstPacket(
87 QuicPacketSequenceNumber num,
88 QuicStreamId stream_id) {
89 QuicPacketHeader header;
90 header.public_header.guid = random_generator_.RandUint64();
91 header.public_header.reset_flag = false;
92 header.public_header.version_flag = true;
93 header.packet_sequence_number = num;
94 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
95 header.entropy_flag = false;
96 header.fec_flag = false;
97 header.fec_group = 0;
98
99 QuicRstStreamFrame rst(stream_id, QUIC_STREAM_CANCELLED);
100 return scoped_ptr<QuicEncryptedPacket>(
101 ConstructPacket(header, QuicFrame(&rst)));
102 }
103
104 scoped_ptr<QuicEncryptedPacket> ConstructAckPacket(
105 QuicPacketSequenceNumber largest_received,
106 QuicPacketSequenceNumber least_unacked) {
107 QuicPacketHeader header;
108 header.public_header.guid = random_generator_.RandUint64();
109 header.public_header.reset_flag = false;
110 header.public_header.version_flag = false;
111 header.packet_sequence_number = 2;
112 header.entropy_flag = false;
113 header.fec_flag = false;
114 header.fec_group = 0;
115
116 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked);
117 QuicCongestionFeedbackFrame feedback;
118 feedback.type = kTCP;
119 feedback.tcp.accumulated_number_of_lost_packets = 0;
120 feedback.tcp.receive_window = 16000;
121
122 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false);
123 QuicFrames frames;
124 frames.push_back(QuicFrame(&ack));
125 frames.push_back(QuicFrame(&feedback));
126 scoped_ptr<QuicPacket> packet(
127 framer.BuildUnsizedDataPacket(header, frames).packet);
128 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket(
129 ENCRYPTION_NONE, header.packet_sequence_number, *packet));
130 }
131
132 // Returns a newly created packet to send congestion feedback data.
133 scoped_ptr<QuicEncryptedPacket> ConstructFeedbackPacket(
134 QuicPacketSequenceNumber sequence_number) {
135 QuicPacketHeader header;
136 header.public_header.guid = random_generator_.RandUint64();
137 header.public_header.reset_flag = false;
138 header.public_header.version_flag = false;
139 header.packet_sequence_number = sequence_number;
140 header.entropy_flag = false;
141 header.fec_flag = false;
142 header.fec_group = 0;
143
144 QuicCongestionFeedbackFrame frame;
145 frame.type = kTCP;
146 frame.tcp.accumulated_number_of_lost_packets = 0;
147 frame.tcp.receive_window = 16000;
148
149 return scoped_ptr<QuicEncryptedPacket>(
150 ConstructPacket(header, QuicFrame(&frame)));
151 }
152
153 scoped_ptr<QuicEncryptedPacket> ConstructPacket(
154 const QuicPacketHeader& header,
155 const QuicFrame& frame) {
156 QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), false);
157 QuicFrames frames;
158 frames.push_back(frame);
159 scoped_ptr<QuicPacket> packet(
160 framer.BuildUnsizedDataPacket(header, frames).packet);
161 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket(
162 ENCRYPTION_NONE, header.packet_sequence_number, *packet));
163 }
164 89
165 int GetSourcePortForNewSession(const HostPortProxyPair& destination) { 90 int GetSourcePortForNewSession(const HostPortProxyPair& destination) {
166 // Should only be called if there is no active session for this destination. 91 // Should only be called if there is no active session for this destination.
167 EXPECT_EQ(NULL, factory_.CreateIfSessionExists(destination, 92 EXPECT_EQ(NULL, factory_.CreateIfSessionExists(destination,
168 net_log_).get()); 93 net_log_).get());
169 size_t socket_count = socket_factory_.udp_client_sockets().size(); 94 size_t socket_count = socket_factory_.udp_client_sockets().size();
170 95
171 MockRead reads[] = { 96 MockRead reads[] = {
172 MockRead(ASYNC, OK, 0) // EOF 97 MockRead(ASYNC, OK, 0) // EOF
173 }; 98 };
(...skipping 29 matching lines...) Expand all
203 net_log_).get()); 128 net_log_).get());
204 EXPECT_TRUE(socket_data.at_read_eof()); 129 EXPECT_TRUE(socket_data.at_read_eof());
205 EXPECT_TRUE(socket_data.at_write_eof()); 130 EXPECT_TRUE(socket_data.at_write_eof());
206 return port; 131 return port;
207 } 132 }
208 133
209 MockHostResolver host_resolver_; 134 MockHostResolver host_resolver_;
210 DeterministicMockClientSocketFactory socket_factory_; 135 DeterministicMockClientSocketFactory socket_factory_;
211 MockCryptoClientStreamFactory crypto_client_stream_factory_; 136 MockCryptoClientStreamFactory crypto_client_stream_factory_;
212 MockRandom random_generator_; 137 MockRandom random_generator_;
138 QuicTestPacketMaker maker_;
213 MockClock* clock_; // Owned by factory_. 139 MockClock* clock_; // Owned by factory_.
214 QuicStreamFactory factory_; 140 QuicStreamFactory factory_;
215 HostPortProxyPair host_port_proxy_pair_; 141 HostPortProxyPair host_port_proxy_pair_;
216 bool is_https_; 142 bool is_https_;
217 scoped_ptr<CertVerifier> cert_verifier_; 143 scoped_ptr<CertVerifier> cert_verifier_;
218 BoundNetLog net_log_; 144 BoundNetLog net_log_;
219 TestCompletionCallback callback_; 145 TestCompletionCallback callback_;
220 }; 146 };
221 147
222 TEST_F(QuicStreamFactoryTest, CreateIfSessionExists) { 148 INSTANTIATE_TEST_CASE_P(Version, QuicStreamFactoryTest,
149 ::testing::ValuesIn(QuicSupportedVersions()));
150
151 TEST_P(QuicStreamFactoryTest, CreateIfSessionExists) {
223 EXPECT_EQ(NULL, factory_.CreateIfSessionExists(host_port_proxy_pair_, 152 EXPECT_EQ(NULL, factory_.CreateIfSessionExists(host_port_proxy_pair_,
224 net_log_).get()); 153 net_log_).get());
225 } 154 }
226 155
227 TEST_F(QuicStreamFactoryTest, Create) { 156 TEST_P(QuicStreamFactoryTest, Create) {
228 MockRead reads[] = { 157 MockRead reads[] = {
229 MockRead(ASYNC, OK, 0) // EOF 158 MockRead(ASYNC, OK, 0) // EOF
230 }; 159 };
231 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 160 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
232 socket_factory_.AddSocketDataProvider(&socket_data); 161 socket_factory_.AddSocketDataProvider(&socket_data);
233 socket_data.StopAfter(1); 162 socket_data.StopAfter(1);
234 163
235 QuicStreamRequest request(&factory_); 164 QuicStreamRequest request(&factory_);
236 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_, 165 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_,
237 cert_verifier_.get(), net_log_, 166 cert_verifier_.get(), net_log_,
(...skipping 13 matching lines...) Expand all
251 EXPECT_EQ(OK, request2.Request(host_port_proxy_pair_, is_https_, 180 EXPECT_EQ(OK, request2.Request(host_port_proxy_pair_, is_https_,
252 cert_verifier_.get(), net_log_, 181 cert_verifier_.get(), net_log_,
253 callback_.callback())); 182 callback_.callback()));
254 stream = request2.ReleaseStream(); // Will reset stream 5. 183 stream = request2.ReleaseStream(); // Will reset stream 5.
255 stream.reset(); // Will reset stream 7. 184 stream.reset(); // Will reset stream 7.
256 185
257 EXPECT_TRUE(socket_data.at_read_eof()); 186 EXPECT_TRUE(socket_data.at_read_eof());
258 EXPECT_TRUE(socket_data.at_write_eof()); 187 EXPECT_TRUE(socket_data.at_write_eof());
259 } 188 }
260 189
261 TEST_F(QuicStreamFactoryTest, Goaway) { 190 TEST_P(QuicStreamFactoryTest, FailedCreate) {
jar (doing other things) 2013/12/20 00:53:12 nuke since it comes later.
Ryan Hamilton 2013/12/20 01:55:02 Done.
191 MockConnect connect(SYNCHRONOUS, ERR_ADDRESS_IN_USE);
192 DeterministicSocketData socket_data(NULL, 0, NULL, 0);
193 socket_data.set_connect_data(connect);
194 socket_factory_.AddSocketDataProvider(&socket_data);
195 socket_data.StopAfter(1);
196
197 QuicStreamRequest request(&factory_);
198 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_,
199 cert_verifier_.get(), net_log_,
200 callback_.callback()));
201
202 EXPECT_EQ(ERR_ADDRESS_IN_USE, callback_.WaitForResult());
203 }
204
205 TEST_P(QuicStreamFactoryTest, Goaway) {
262 MockRead reads[] = { 206 MockRead reads[] = {
263 MockRead(ASYNC, OK, 0) // EOF 207 MockRead(ASYNC, OK, 0) // EOF
264 }; 208 };
265 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 209 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
266 socket_data.StopAfter(1); 210 socket_data.StopAfter(1);
267 socket_factory_.AddSocketDataProvider(&socket_data); 211 socket_factory_.AddSocketDataProvider(&socket_data);
268 DeterministicSocketData socket_data2(reads, arraysize(reads), NULL, 0); 212 DeterministicSocketData socket_data2(reads, arraysize(reads), NULL, 0);
269 socket_data2.StopAfter(1); 213 socket_data2.StopAfter(1);
270 socket_factory_.AddSocketDataProvider(&socket_data2); 214 socket_factory_.AddSocketDataProvider(&socket_data2);
271 215
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 252
309 stream2.reset(); 253 stream2.reset();
310 stream.reset(); 254 stream.reset();
311 255
312 EXPECT_TRUE(socket_data.at_read_eof()); 256 EXPECT_TRUE(socket_data.at_read_eof());
313 EXPECT_TRUE(socket_data.at_write_eof()); 257 EXPECT_TRUE(socket_data.at_write_eof());
314 EXPECT_TRUE(socket_data2.at_read_eof()); 258 EXPECT_TRUE(socket_data2.at_read_eof());
315 EXPECT_TRUE(socket_data2.at_write_eof()); 259 EXPECT_TRUE(socket_data2.at_write_eof());
316 } 260 }
317 261
318 TEST_F(QuicStreamFactoryTest, MaxOpenStream) { 262 TEST_P(QuicStreamFactoryTest, MaxOpenStream) {
319 MockRead reads[] = { 263 MockRead reads[] = {
320 MockRead(ASYNC, OK, 0) // EOF 264 MockRead(ASYNC, OK, 0) // EOF
321 }; 265 };
322 scoped_ptr<QuicEncryptedPacket> rst(ConstructRstPacket(1, 3)); 266 QuicStreamId stream_id = GetParam() > QUIC_VERSION_12 ? 5 : 3;
267 scoped_ptr<QuicEncryptedPacket> rst(
268 maker_.MakeRstPacket(1, true, stream_id, QUIC_STREAM_CANCELLED));
323 MockWrite writes[] = { 269 MockWrite writes[] = {
324 MockWrite(ASYNC, rst->data(), rst->length(), 1), 270 MockWrite(ASYNC, rst->data(), rst->length(), 1),
325 }; 271 };
326 DeterministicSocketData socket_data(reads, arraysize(reads), 272 DeterministicSocketData socket_data(reads, arraysize(reads),
327 writes, arraysize(writes)); 273 writes, arraysize(writes));
328 socket_factory_.AddSocketDataProvider(&socket_data); 274 socket_factory_.AddSocketDataProvider(&socket_data);
329 socket_data.StopAfter(1); 275 socket_data.StopAfter(1);
330 276
331 HttpRequestInfo request_info; 277 HttpRequestInfo request_info;
332 std::vector<QuicHttpStream*> streams; 278 std::vector<QuicHttpStream*> streams;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 310
365 ASSERT_TRUE(callback_.have_result()); 311 ASSERT_TRUE(callback_.have_result());
366 312
367 EXPECT_EQ(OK, callback_.WaitForResult()); 313 EXPECT_EQ(OK, callback_.WaitForResult());
368 314
369 EXPECT_TRUE(socket_data.at_read_eof()); 315 EXPECT_TRUE(socket_data.at_read_eof());
370 EXPECT_TRUE(socket_data.at_write_eof()); 316 EXPECT_TRUE(socket_data.at_write_eof());
371 STLDeleteElements(&streams); 317 STLDeleteElements(&streams);
372 } 318 }
373 319
374 TEST_F(QuicStreamFactoryTest, ResolutionErrorInCreate) { 320 TEST_P(QuicStreamFactoryTest, ResolutionErrorInCreate) {
375 DeterministicSocketData socket_data(NULL, 0, NULL, 0); 321 DeterministicSocketData socket_data(NULL, 0, NULL, 0);
376 socket_factory_.AddSocketDataProvider(&socket_data); 322 socket_factory_.AddSocketDataProvider(&socket_data);
377 323
378 host_resolver_.rules()->AddSimulatedFailure(kDefaultServerHostName); 324 host_resolver_.rules()->AddSimulatedFailure(kDefaultServerHostName);
379 325
380 QuicStreamRequest request(&factory_); 326 QuicStreamRequest request(&factory_);
381 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_, 327 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_,
382 cert_verifier_.get(), net_log_, 328 cert_verifier_.get(), net_log_,
383 callback_.callback())); 329 callback_.callback()));
384 330
385 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult()); 331 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult());
386 332
387 EXPECT_TRUE(socket_data.at_read_eof()); 333 EXPECT_TRUE(socket_data.at_read_eof());
388 EXPECT_TRUE(socket_data.at_write_eof()); 334 EXPECT_TRUE(socket_data.at_write_eof());
389 } 335 }
390 336
391 TEST_F(QuicStreamFactoryTest, ConnectErrorInCreate) { 337 TEST_P(QuicStreamFactoryTest, ConnectErrorInCreate) {
392 MockConnect connect(SYNCHRONOUS, ERR_ADDRESS_IN_USE); 338 MockConnect connect(SYNCHRONOUS, ERR_ADDRESS_IN_USE);
393 DeterministicSocketData socket_data(NULL, 0, NULL, 0); 339 DeterministicSocketData socket_data(NULL, 0, NULL, 0);
394 socket_data.set_connect_data(connect); 340 socket_data.set_connect_data(connect);
395 socket_factory_.AddSocketDataProvider(&socket_data); 341 socket_factory_.AddSocketDataProvider(&socket_data);
396 socket_data.StopAfter(1); 342 socket_data.StopAfter(1);
397 343
398 QuicStreamRequest request(&factory_); 344 QuicStreamRequest request(&factory_);
399 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_, 345 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_,
400 cert_verifier_.get(), net_log_, 346 cert_verifier_.get(), net_log_,
401 callback_.callback())); 347 callback_.callback()));
402 348
403 EXPECT_EQ(ERR_ADDRESS_IN_USE, callback_.WaitForResult()); 349 EXPECT_EQ(ERR_ADDRESS_IN_USE, callback_.WaitForResult());
404 350
405 EXPECT_TRUE(socket_data.at_read_eof()); 351 EXPECT_TRUE(socket_data.at_read_eof());
406 EXPECT_TRUE(socket_data.at_write_eof()); 352 EXPECT_TRUE(socket_data.at_write_eof());
407 } 353 }
408 354
409 TEST_F(QuicStreamFactoryTest, CancelCreate) { 355 TEST_P(QuicStreamFactoryTest, CancelCreate) {
410 MockRead reads[] = { 356 MockRead reads[] = {
411 MockRead(ASYNC, OK, 0) // EOF 357 MockRead(ASYNC, OK, 0) // EOF
412 }; 358 };
413 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 359 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
414 socket_factory_.AddSocketDataProvider(&socket_data); 360 socket_factory_.AddSocketDataProvider(&socket_data);
415 { 361 {
416 QuicStreamRequest request(&factory_); 362 QuicStreamRequest request(&factory_);
417 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_, 363 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, is_https_,
418 cert_verifier_.get(), net_log_, 364 cert_verifier_.get(), net_log_,
419 callback_.callback())); 365 callback_.callback()));
420 } 366 }
421 367
422 socket_data.StopAfter(1); 368 socket_data.StopAfter(1);
423 base::RunLoop run_loop; 369 base::RunLoop run_loop;
424 run_loop.RunUntilIdle(); 370 run_loop.RunUntilIdle();
425 371
426 scoped_ptr<QuicHttpStream> stream( 372 scoped_ptr<QuicHttpStream> stream(
427 factory_.CreateIfSessionExists(host_port_proxy_pair_, net_log_)); 373 factory_.CreateIfSessionExists(host_port_proxy_pair_, net_log_));
428 EXPECT_TRUE(stream.get()); 374 EXPECT_TRUE(stream.get());
429 stream.reset(); 375 stream.reset();
430 376
431 EXPECT_TRUE(socket_data.at_read_eof()); 377 EXPECT_TRUE(socket_data.at_read_eof());
432 EXPECT_TRUE(socket_data.at_write_eof()); 378 EXPECT_TRUE(socket_data.at_write_eof());
433 } 379 }
434 380
435 TEST_F(QuicStreamFactoryTest, CreateConsistentEphemeralPort) { 381 TEST_P(QuicStreamFactoryTest, CreateConsistentEphemeralPort) {
436 // Sequentially connect to the default host, then another host, and then the 382 // Sequentially connect to the default host, then another host, and then the
437 // default host. Verify that the default host gets a consistent ephemeral 383 // default host. Verify that the default host gets a consistent ephemeral
438 // port, that is different from the other host's connection. 384 // port, that is different from the other host's connection.
439 385
440 std::string other_server_name = "other.google.com"; 386 std::string other_server_name = "other.google.com";
441 EXPECT_NE(kDefaultServerHostName, other_server_name); 387 EXPECT_NE(kDefaultServerHostName, other_server_name);
442 HostPortPair host_port_pair2(other_server_name, kDefaultServerPort); 388 HostPortPair host_port_pair2(other_server_name, kDefaultServerPort);
443 HostPortProxyPair host_port_proxy_pair2(host_port_pair2, 389 HostPortProxyPair host_port_proxy_pair2(host_port_pair2,
444 host_port_proxy_pair_.second); 390 host_port_proxy_pair_.second);
445 391
446 int original_port = GetSourcePortForNewSession(host_port_proxy_pair_); 392 int original_port = GetSourcePortForNewSession(host_port_proxy_pair_);
447 EXPECT_NE(original_port, GetSourcePortForNewSession(host_port_proxy_pair2)); 393 EXPECT_NE(original_port, GetSourcePortForNewSession(host_port_proxy_pair2));
448 EXPECT_EQ(original_port, GetSourcePortForNewSession(host_port_proxy_pair_)); 394 EXPECT_EQ(original_port, GetSourcePortForNewSession(host_port_proxy_pair_));
449 } 395 }
450 396
451 TEST_F(QuicStreamFactoryTest, CloseAllSessions) { 397 TEST_P(QuicStreamFactoryTest, CloseAllSessions) {
452 MockRead reads[] = { 398 MockRead reads[] = {
453 MockRead(ASYNC, 0, 0) // EOF 399 MockRead(ASYNC, 0, 0) // EOF
454 }; 400 };
455 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 401 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
456 socket_factory_.AddSocketDataProvider(&socket_data); 402 socket_factory_.AddSocketDataProvider(&socket_data);
457 socket_data.StopAfter(1); 403 socket_data.StopAfter(1);
458 404
459 MockRead reads2[] = { 405 MockRead reads2[] = {
460 MockRead(ASYNC, 0, 0) // EOF 406 MockRead(ASYNC, 0, 0) // EOF
461 }; 407 };
(...skipping 29 matching lines...) Expand all
491 EXPECT_EQ(OK, callback_.WaitForResult()); 437 EXPECT_EQ(OK, callback_.WaitForResult());
492 stream = request2.ReleaseStream(); 438 stream = request2.ReleaseStream();
493 stream.reset(); // Will reset stream 3. 439 stream.reset(); // Will reset stream 3.
494 440
495 EXPECT_TRUE(socket_data.at_read_eof()); 441 EXPECT_TRUE(socket_data.at_read_eof());
496 EXPECT_TRUE(socket_data.at_write_eof()); 442 EXPECT_TRUE(socket_data.at_write_eof());
497 EXPECT_TRUE(socket_data2.at_read_eof()); 443 EXPECT_TRUE(socket_data2.at_read_eof());
498 EXPECT_TRUE(socket_data2.at_write_eof()); 444 EXPECT_TRUE(socket_data2.at_write_eof());
499 } 445 }
500 446
501 TEST_F(QuicStreamFactoryTest, OnIPAddressChanged) { 447 TEST_P(QuicStreamFactoryTest, OnIPAddressChanged) {
502 MockRead reads[] = { 448 MockRead reads[] = {
503 MockRead(ASYNC, 0, 0) // EOF 449 MockRead(ASYNC, 0, 0) // EOF
504 }; 450 };
505 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 451 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
506 socket_factory_.AddSocketDataProvider(&socket_data); 452 socket_factory_.AddSocketDataProvider(&socket_data);
507 socket_data.StopAfter(1); 453 socket_data.StopAfter(1);
508 454
509 MockRead reads2[] = { 455 MockRead reads2[] = {
510 MockRead(ASYNC, 0, 0) // EOF 456 MockRead(ASYNC, 0, 0) // EOF
511 }; 457 };
(...skipping 30 matching lines...) Expand all
542 EXPECT_EQ(OK, callback_.WaitForResult()); 488 EXPECT_EQ(OK, callback_.WaitForResult());
543 stream = request2.ReleaseStream(); 489 stream = request2.ReleaseStream();
544 stream.reset(); // Will reset stream 3. 490 stream.reset(); // Will reset stream 3.
545 491
546 EXPECT_TRUE(socket_data.at_read_eof()); 492 EXPECT_TRUE(socket_data.at_read_eof());
547 EXPECT_TRUE(socket_data.at_write_eof()); 493 EXPECT_TRUE(socket_data.at_write_eof());
548 EXPECT_TRUE(socket_data2.at_read_eof()); 494 EXPECT_TRUE(socket_data2.at_read_eof());
549 EXPECT_TRUE(socket_data2.at_write_eof()); 495 EXPECT_TRUE(socket_data2.at_write_eof());
550 } 496 }
551 497
552 TEST_F(QuicStreamFactoryTest, OnCertAdded) { 498 TEST_P(QuicStreamFactoryTest, OnCertAdded) {
553 MockRead reads[] = { 499 MockRead reads[] = {
554 MockRead(ASYNC, 0, 0) // EOF 500 MockRead(ASYNC, 0, 0) // EOF
555 }; 501 };
556 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 502 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
557 socket_factory_.AddSocketDataProvider(&socket_data); 503 socket_factory_.AddSocketDataProvider(&socket_data);
558 socket_data.StopAfter(1); 504 socket_data.StopAfter(1);
559 505
560 MockRead reads2[] = { 506 MockRead reads2[] = {
561 MockRead(ASYNC, 0, 0) // EOF 507 MockRead(ASYNC, 0, 0) // EOF
562 }; 508 };
(...skipping 30 matching lines...) Expand all
593 EXPECT_EQ(OK, callback_.WaitForResult()); 539 EXPECT_EQ(OK, callback_.WaitForResult());
594 stream = request2.ReleaseStream(); 540 stream = request2.ReleaseStream();
595 stream.reset(); // Will reset stream 3. 541 stream.reset(); // Will reset stream 3.
596 542
597 EXPECT_TRUE(socket_data.at_read_eof()); 543 EXPECT_TRUE(socket_data.at_read_eof());
598 EXPECT_TRUE(socket_data.at_write_eof()); 544 EXPECT_TRUE(socket_data.at_write_eof());
599 EXPECT_TRUE(socket_data2.at_read_eof()); 545 EXPECT_TRUE(socket_data2.at_read_eof());
600 EXPECT_TRUE(socket_data2.at_write_eof()); 546 EXPECT_TRUE(socket_data2.at_write_eof());
601 } 547 }
602 548
603 TEST_F(QuicStreamFactoryTest, OnCACertChanged) { 549 TEST_P(QuicStreamFactoryTest, OnCACertChanged) {
604 MockRead reads[] = { 550 MockRead reads[] = {
605 MockRead(ASYNC, 0, 0) // EOF 551 MockRead(ASYNC, 0, 0) // EOF
606 }; 552 };
607 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 553 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
608 socket_factory_.AddSocketDataProvider(&socket_data); 554 socket_factory_.AddSocketDataProvider(&socket_data);
609 socket_data.StopAfter(1); 555 socket_data.StopAfter(1);
610 556
611 MockRead reads2[] = { 557 MockRead reads2[] = {
612 MockRead(ASYNC, 0, 0) // EOF 558 MockRead(ASYNC, 0, 0) // EOF
613 }; 559 };
(...skipping 30 matching lines...) Expand all
644 EXPECT_EQ(OK, callback_.WaitForResult()); 590 EXPECT_EQ(OK, callback_.WaitForResult());
645 stream = request2.ReleaseStream(); 591 stream = request2.ReleaseStream();
646 stream.reset(); // Will reset stream 3. 592 stream.reset(); // Will reset stream 3.
647 593
648 EXPECT_TRUE(socket_data.at_read_eof()); 594 EXPECT_TRUE(socket_data.at_read_eof());
649 EXPECT_TRUE(socket_data.at_write_eof()); 595 EXPECT_TRUE(socket_data.at_write_eof());
650 EXPECT_TRUE(socket_data2.at_read_eof()); 596 EXPECT_TRUE(socket_data2.at_read_eof());
651 EXPECT_TRUE(socket_data2.at_write_eof()); 597 EXPECT_TRUE(socket_data2.at_write_eof());
652 } 598 }
653 599
654 TEST_F(QuicStreamFactoryTest, SharedCryptoConfig) { 600 TEST_P(QuicStreamFactoryTest, SharedCryptoConfig) {
655 vector<string> cannoncial_suffixes; 601 vector<string> cannoncial_suffixes;
656 cannoncial_suffixes.push_back(string(".c.youtube.com")); 602 cannoncial_suffixes.push_back(string(".c.youtube.com"));
657 cannoncial_suffixes.push_back(string(".googlevideo.com")); 603 cannoncial_suffixes.push_back(string(".googlevideo.com"));
658 604
659 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) { 605 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) {
660 string r1_host_name("r1"); 606 string r1_host_name("r1");
661 string r2_host_name("r2"); 607 string r2_host_name("r2");
662 r1_host_name.append(cannoncial_suffixes[i]); 608 r1_host_name.append(cannoncial_suffixes[i]);
663 r2_host_name.append(cannoncial_suffixes[i]); 609 r2_host_name.append(cannoncial_suffixes[i]);
664 610
(...skipping 20 matching lines...) Expand all
685 QuicStreamFactoryPeer::GetOrCreateCryptoConfig(&factory_, 631 QuicStreamFactoryPeer::GetOrCreateCryptoConfig(&factory_,
686 host_port_proxy_pair2); 632 host_port_proxy_pair2);
687 DCHECK(crypto_config2); 633 DCHECK(crypto_config2);
688 QuicCryptoClientConfig::CachedState* cached2 = 634 QuicCryptoClientConfig::CachedState* cached2 =
689 crypto_config2->LookupOrCreate(host_port_proxy_pair2.first.host()); 635 crypto_config2->LookupOrCreate(host_port_proxy_pair2.first.host());
690 EXPECT_EQ(cached1->source_address_token(), cached2->source_address_token()); 636 EXPECT_EQ(cached1->source_address_token(), cached2->source_address_token());
691 EXPECT_TRUE(cached2->proof_valid()); 637 EXPECT_TRUE(cached2->proof_valid());
692 } 638 }
693 } 639 }
694 640
695 TEST_F(QuicStreamFactoryTest, CryptoConfigWhenProofIsInvalid) { 641 TEST_P(QuicStreamFactoryTest, CryptoConfigWhenProofIsInvalid) {
696 vector<string> cannoncial_suffixes; 642 vector<string> cannoncial_suffixes;
697 cannoncial_suffixes.push_back(string(".c.youtube.com")); 643 cannoncial_suffixes.push_back(string(".c.youtube.com"));
698 cannoncial_suffixes.push_back(string(".googlevideo.com")); 644 cannoncial_suffixes.push_back(string(".googlevideo.com"));
699 645
700 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) { 646 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) {
701 string r3_host_name("r3"); 647 string r3_host_name("r3");
702 string r4_host_name("r4"); 648 string r4_host_name("r4");
703 r3_host_name.append(cannoncial_suffixes[i]); 649 r3_host_name.append(cannoncial_suffixes[i]);
704 r4_host_name.append(cannoncial_suffixes[i]); 650 r4_host_name.append(cannoncial_suffixes[i]);
705 651
(...skipping 23 matching lines...) Expand all
729 QuicCryptoClientConfig::CachedState* cached2 = 675 QuicCryptoClientConfig::CachedState* cached2 =
730 crypto_config2->LookupOrCreate(host_port_proxy_pair2.first.host()); 676 crypto_config2->LookupOrCreate(host_port_proxy_pair2.first.host());
731 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token()); 677 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token());
732 EXPECT_TRUE(cached2->source_address_token().empty()); 678 EXPECT_TRUE(cached2->source_address_token().empty());
733 EXPECT_FALSE(cached2->proof_valid()); 679 EXPECT_FALSE(cached2->proof_valid());
734 } 680 }
735 } 681 }
736 682
737 } // namespace test 683 } // namespace test
738 } // namespace net 684 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698