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

Side by Side Diff: net/socket/transport_client_socket_pool_unittest.cc

Issue 1580903002: Convert ignore_limits from a SocketParam to a socket request argument. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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/socket/transport_client_socket_pool.h" 5 #include "net/socket/transport_client_socket_pool.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 25 matching lines...) Expand all
36 36
37 class TransportClientSocketPoolTest : public testing::Test { 37 class TransportClientSocketPoolTest : public testing::Test {
38 protected: 38 protected:
39 TransportClientSocketPoolTest() 39 TransportClientSocketPoolTest()
40 : connect_backup_jobs_enabled_( 40 : connect_backup_jobs_enabled_(
41 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)), 41 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)),
42 params_( 42 params_(
43 new TransportSocketParams( 43 new TransportSocketParams(
44 HostPortPair("www.google.com", 80), 44 HostPortPair("www.google.com", 80),
45 false, 45 false,
46 false,
47 OnHostResolutionCallback(), 46 OnHostResolutionCallback(),
48 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), 47 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)),
49 host_resolver_(new MockHostResolver), 48 host_resolver_(new MockHostResolver),
50 client_socket_factory_(&net_log_), 49 client_socket_factory_(&net_log_),
51 pool_(kMaxSockets, 50 pool_(kMaxSockets,
52 kMaxSocketsPerGroup, 51 kMaxSocketsPerGroup,
53 host_resolver_.get(), 52 host_resolver_.get(),
54 &client_socket_factory_, 53 &client_socket_factory_,
55 NULL) { 54 NULL) {
56 } 55 }
57 56
58 ~TransportClientSocketPoolTest() override { 57 ~TransportClientSocketPoolTest() override {
59 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( 58 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(
60 connect_backup_jobs_enabled_); 59 connect_backup_jobs_enabled_);
61 } 60 }
62 61
63 scoped_refptr<TransportSocketParams> CreateParamsForTCPFastOpen() { 62 scoped_refptr<TransportSocketParams> CreateParamsForTCPFastOpen() {
64 return new TransportSocketParams(HostPortPair("www.google.com", 80), 63 return new TransportSocketParams(
65 false, false, OnHostResolutionCallback(), 64 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
66 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED); 65 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED);
67 } 66 }
68 67
69 int StartRequest(const std::string& group_name, RequestPriority priority) { 68 int StartRequest(const std::string& group_name, RequestPriority priority) {
70 scoped_refptr<TransportSocketParams> params(new TransportSocketParams( 69 scoped_refptr<TransportSocketParams> params(new TransportSocketParams(
71 HostPortPair("www.google.com", 80), false, false, 70 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
72 OnHostResolutionCallback(),
73 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 71 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
74 return test_base_.StartRequestUsingPool( 72 return test_base_.StartRequestUsingPool(&pool_, group_name, priority,
75 &pool_, group_name, priority, params); 73 false /* ignore_limits */, params);
76 } 74 }
77 75
78 int GetOrderOfRequest(size_t index) { 76 int GetOrderOfRequest(size_t index) {
79 return test_base_.GetOrderOfRequest(index); 77 return test_base_.GetOrderOfRequest(index);
80 } 78 }
81 79
82 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { 80 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) {
83 return test_base_.ReleaseOneConnection(keep_alive); 81 return test_base_.ReleaseOneConnection(keep_alive);
84 } 82 }
85 83
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 ASSERT_EQ(4u, addrlist.size()); 169 ASSERT_EQ(4u, addrlist.size());
172 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily()); 170 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily());
173 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily()); 171 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily());
174 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily()); 172 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily());
175 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily()); 173 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily());
176 } 174 }
177 175
178 TEST_F(TransportClientSocketPoolTest, Basic) { 176 TEST_F(TransportClientSocketPoolTest, Basic) {
179 TestCompletionCallback callback; 177 TestCompletionCallback callback;
180 ClientSocketHandle handle; 178 ClientSocketHandle handle;
181 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 179 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_,
182 BoundNetLog()); 180 BoundNetLog());
183 EXPECT_EQ(ERR_IO_PENDING, rv); 181 EXPECT_EQ(ERR_IO_PENDING, rv);
184 EXPECT_FALSE(handle.is_initialized()); 182 EXPECT_FALSE(handle.is_initialized());
185 EXPECT_FALSE(handle.socket()); 183 EXPECT_FALSE(handle.socket());
186 184
187 EXPECT_EQ(OK, callback.WaitForResult()); 185 EXPECT_EQ(OK, callback.WaitForResult());
188 EXPECT_TRUE(handle.is_initialized()); 186 EXPECT_TRUE(handle.is_initialized());
189 EXPECT_TRUE(handle.socket()); 187 EXPECT_TRUE(handle.socket());
190 TestLoadTimingInfoConnectedNotReused(handle); 188 TestLoadTimingInfoConnectedNotReused(handle);
191 EXPECT_EQ(0u, handle.connection_attempts().size()); 189 EXPECT_EQ(0u, handle.connection_attempts().size());
192 } 190 }
193 191
194 // Make sure that TransportConnectJob passes on its priority to its 192 // Make sure that TransportConnectJob passes on its priority to its
195 // HostResolver request on Init. 193 // HostResolver request on Init.
196 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) { 194 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) {
197 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { 195 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
198 RequestPriority priority = static_cast<RequestPriority>(i); 196 RequestPriority priority = static_cast<RequestPriority>(i);
199 TestCompletionCallback callback; 197 TestCompletionCallback callback;
200 ClientSocketHandle handle; 198 ClientSocketHandle handle;
201 EXPECT_EQ(ERR_IO_PENDING, 199 EXPECT_EQ(ERR_IO_PENDING,
202 handle.Init("a", params_, priority, callback.callback(), &pool_, 200 handle.Init("a", params_, priority, false, callback.callback(),
203 BoundNetLog())); 201 &pool_, BoundNetLog()));
204 EXPECT_EQ(priority, host_resolver_->last_request_priority()); 202 EXPECT_EQ(priority, host_resolver_->last_request_priority());
205 } 203 }
206 } 204 }
207 205
208 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { 206 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) {
209 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); 207 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name");
210 TestCompletionCallback callback; 208 TestCompletionCallback callback;
211 ClientSocketHandle handle; 209 ClientSocketHandle handle;
212 HostPortPair host_port_pair("unresolvable.host.name", 80); 210 HostPortPair host_port_pair("unresolvable.host.name", 80);
213 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 211 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
214 host_port_pair, false, false, OnHostResolutionCallback(), 212 host_port_pair, false, OnHostResolutionCallback(),
215 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 213 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
216 EXPECT_EQ(ERR_IO_PENDING, 214 EXPECT_EQ(ERR_IO_PENDING,
217 handle.Init("a", dest, kDefaultPriority, callback.callback(), 215 handle.Init("a", dest, kDefaultPriority, false, callback.callback(),
218 &pool_, BoundNetLog())); 216 &pool_, BoundNetLog()));
219 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); 217 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult());
220 ASSERT_EQ(1u, handle.connection_attempts().size()); 218 ASSERT_EQ(1u, handle.connection_attempts().size());
221 EXPECT_TRUE(handle.connection_attempts()[0].endpoint.address().empty()); 219 EXPECT_TRUE(handle.connection_attempts()[0].endpoint.address().empty());
222 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, handle.connection_attempts()[0].result); 220 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, handle.connection_attempts()[0].result);
223 } 221 }
224 222
225 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { 223 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) {
226 client_socket_factory_.set_default_client_socket_type( 224 client_socket_factory_.set_default_client_socket_type(
227 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); 225 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET);
228 TestCompletionCallback callback; 226 TestCompletionCallback callback;
229 ClientSocketHandle handle; 227 ClientSocketHandle handle;
230 EXPECT_EQ(ERR_IO_PENDING, 228 EXPECT_EQ(ERR_IO_PENDING,
231 handle.Init("a", params_, kDefaultPriority, callback.callback(), 229 handle.Init("a", params_, kDefaultPriority, false,
232 &pool_, BoundNetLog())); 230 callback.callback(), &pool_, BoundNetLog()));
233 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 231 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
234 ASSERT_EQ(1u, handle.connection_attempts().size()); 232 ASSERT_EQ(1u, handle.connection_attempts().size());
235 EXPECT_EQ("127.0.0.1:80", 233 EXPECT_EQ("127.0.0.1:80",
236 handle.connection_attempts()[0].endpoint.ToString()); 234 handle.connection_attempts()[0].endpoint.ToString());
237 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); 235 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result);
238 236
239 // Make the host resolutions complete synchronously this time. 237 // Make the host resolutions complete synchronously this time.
240 host_resolver_->set_synchronous_mode(true); 238 host_resolver_->set_synchronous_mode(true);
241 EXPECT_EQ(ERR_CONNECTION_FAILED, 239 EXPECT_EQ(ERR_CONNECTION_FAILED,
242 handle.Init("a", params_, kDefaultPriority, callback.callback(), 240 handle.Init("a", params_, kDefaultPriority, false,
243 &pool_, BoundNetLog())); 241 callback.callback(), &pool_, BoundNetLog()));
244 ASSERT_EQ(1u, handle.connection_attempts().size()); 242 ASSERT_EQ(1u, handle.connection_attempts().size());
245 EXPECT_EQ("127.0.0.1:80", 243 EXPECT_EQ("127.0.0.1:80",
246 handle.connection_attempts()[0].endpoint.ToString()); 244 handle.connection_attempts()[0].endpoint.ToString());
247 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); 245 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result);
248 } 246 }
249 247
250 TEST_F(TransportClientSocketPoolTest, PendingRequests) { 248 TEST_F(TransportClientSocketPoolTest, PendingRequests) {
251 // First request finishes asynchronously. 249 // First request finishes asynchronously.
252 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 250 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
253 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); 251 EXPECT_EQ(OK, (*requests())[0]->WaitForResult());
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 EXPECT_EQ(6U, completion_count()); 341 EXPECT_EQ(6U, completion_count());
344 } 342 }
345 343
346 // This test will start up a RequestSocket() and then immediately Cancel() it. 344 // This test will start up a RequestSocket() and then immediately Cancel() it.
347 // The pending host resolution will eventually complete, and destroy the 345 // The pending host resolution will eventually complete, and destroy the
348 // ClientSocketPool which will crash if the group was not cleared properly. 346 // ClientSocketPool which will crash if the group was not cleared properly.
349 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) { 347 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) {
350 TestCompletionCallback callback; 348 TestCompletionCallback callback;
351 ClientSocketHandle handle; 349 ClientSocketHandle handle;
352 EXPECT_EQ(ERR_IO_PENDING, 350 EXPECT_EQ(ERR_IO_PENDING,
353 handle.Init("a", params_, kDefaultPriority, callback.callback(), 351 handle.Init("a", params_, kDefaultPriority, false,
354 &pool_, BoundNetLog())); 352 callback.callback(), &pool_, BoundNetLog()));
355 handle.Reset(); 353 handle.Reset();
356 } 354 }
357 355
358 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) { 356 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) {
359 ClientSocketHandle handle; 357 ClientSocketHandle handle;
360 TestCompletionCallback callback; 358 TestCompletionCallback callback;
361 ClientSocketHandle handle2; 359 ClientSocketHandle handle2;
362 TestCompletionCallback callback2; 360 TestCompletionCallback callback2;
363 361
364 EXPECT_EQ(ERR_IO_PENDING, 362 EXPECT_EQ(ERR_IO_PENDING,
365 handle.Init("a", params_, kDefaultPriority, callback.callback(), 363 handle.Init("a", params_, kDefaultPriority, false,
366 &pool_, BoundNetLog())); 364 callback.callback(), &pool_, BoundNetLog()));
367 EXPECT_EQ(ERR_IO_PENDING, 365 EXPECT_EQ(ERR_IO_PENDING,
368 handle2.Init("a", params_, kDefaultPriority, callback2.callback(), 366 handle2.Init("a", params_, kDefaultPriority, false,
369 &pool_, BoundNetLog())); 367 callback2.callback(), &pool_, BoundNetLog()));
370 368
371 handle.Reset(); 369 handle.Reset();
372 370
373 EXPECT_EQ(OK, callback2.WaitForResult()); 371 EXPECT_EQ(OK, callback2.WaitForResult());
374 handle2.Reset(); 372 handle2.Reset();
375 } 373 }
376 374
377 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) { 375 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) {
378 client_socket_factory_.set_default_client_socket_type( 376 client_socket_factory_.set_default_client_socket_type(
379 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); 377 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET);
380 ClientSocketHandle handle; 378 ClientSocketHandle handle;
381 TestCompletionCallback callback; 379 TestCompletionCallback callback;
382 EXPECT_EQ(ERR_IO_PENDING, 380 EXPECT_EQ(ERR_IO_PENDING,
383 handle.Init("a", params_, kDefaultPriority, callback.callback(), 381 handle.Init("a", params_, kDefaultPriority, false,
384 &pool_, BoundNetLog())); 382 callback.callback(), &pool_, BoundNetLog()));
385 383
386 handle.Reset(); 384 handle.Reset();
387 385
388 TestCompletionCallback callback2; 386 TestCompletionCallback callback2;
389 EXPECT_EQ(ERR_IO_PENDING, 387 EXPECT_EQ(ERR_IO_PENDING,
390 handle.Init("a", params_, kDefaultPriority, callback2.callback(), 388 handle.Init("a", params_, kDefaultPriority, false,
391 &pool_, BoundNetLog())); 389 callback2.callback(), &pool_, BoundNetLog()));
392 390
393 host_resolver_->set_synchronous_mode(true); 391 host_resolver_->set_synchronous_mode(true);
394 // At this point, handle has two ConnectingSockets out for it. Due to the 392 // At this point, handle has two ConnectingSockets out for it. Due to the
395 // setting the mock resolver into synchronous mode, the host resolution for 393 // setting the mock resolver into synchronous mode, the host resolution for
396 // both will return in the same loop of the MessageLoop. The client socket 394 // both will return in the same loop of the MessageLoop. The client socket
397 // is a pending socket, so the Connect() will asynchronously complete on the 395 // is a pending socket, so the Connect() will asynchronously complete on the
398 // next loop of the MessageLoop. That means that the first 396 // next loop of the MessageLoop. That means that the first
399 // ConnectingSocket will enter OnIOComplete, and then the second one will. 397 // ConnectingSocket will enter OnIOComplete, and then the second one will.
400 // If the first one is not cancelled, it will advance the load state, and 398 // If the first one is not cancelled, it will advance the load state, and
401 // then the second one will crash. 399 // then the second one will crash.
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 // run through the MessageLoop once to get it completely released. 488 // run through the MessageLoop once to get it completely released.
491 handle_->socket()->Disconnect(); 489 handle_->socket()->Disconnect();
492 handle_->Reset(); 490 handle_->Reset();
493 { 491 {
494 base::MessageLoop::ScopedNestableTaskAllower allow( 492 base::MessageLoop::ScopedNestableTaskAllower allow(
495 base::MessageLoop::current()); 493 base::MessageLoop::current());
496 base::MessageLoop::current()->RunUntilIdle(); 494 base::MessageLoop::current()->RunUntilIdle();
497 } 495 }
498 within_callback_ = true; 496 within_callback_ = true;
499 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 497 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
500 HostPortPair("www.google.com", 80), false, false, 498 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
501 OnHostResolutionCallback(),
502 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 499 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
503 int rv = handle_->Init("a", dest, LOWEST, callback(), pool_, 500 int rv = handle_->Init("a", dest, LOWEST, false, callback(), pool_,
504 BoundNetLog()); 501 BoundNetLog());
505 EXPECT_EQ(OK, rv); 502 EXPECT_EQ(OK, rv);
506 } 503 }
507 } 504 }
508 505
509 ClientSocketHandle* const handle_; 506 ClientSocketHandle* const handle_;
510 TransportClientSocketPool* const pool_; 507 TransportClientSocketPool* const pool_;
511 bool within_callback_; 508 bool within_callback_;
512 CompletionCallback callback_; 509 CompletionCallback callback_;
513 510
514 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); 511 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback);
515 }; 512 };
516 513
517 TEST_F(TransportClientSocketPoolTest, RequestTwice) { 514 TEST_F(TransportClientSocketPoolTest, RequestTwice) {
518 ClientSocketHandle handle; 515 ClientSocketHandle handle;
519 RequestSocketCallback callback(&handle, &pool_); 516 RequestSocketCallback callback(&handle, &pool_);
520 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 517 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
521 HostPortPair("www.google.com", 80), false, false, 518 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
522 OnHostResolutionCallback(),
523 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 519 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
524 int rv = handle.Init("a", dest, LOWEST, callback.callback(), &pool_, 520 int rv = handle.Init("a", dest, LOWEST, false, callback.callback(), &pool_,
525 BoundNetLog()); 521 BoundNetLog());
526 ASSERT_EQ(ERR_IO_PENDING, rv); 522 ASSERT_EQ(ERR_IO_PENDING, rv);
527 523
528 // The callback is going to request "www.google.com". We want it to complete 524 // The callback is going to request "www.google.com". We want it to complete
529 // synchronously this time. 525 // synchronously this time.
530 host_resolver_->set_synchronous_mode(true); 526 host_resolver_->set_synchronous_mode(true);
531 527
532 EXPECT_EQ(OK, callback.WaitForResult()); 528 EXPECT_EQ(OK, callback.WaitForResult());
533 529
534 handle.Reset(); 530 handle.Reset();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 for (int i = 0; i < kNumRequests; i++) 573 for (int i = 0; i < kNumRequests; i++)
578 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 574 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
579 575
580 for (int i = 0; i < kNumRequests; i++) 576 for (int i = 0; i < kNumRequests; i++)
581 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult()); 577 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult());
582 } 578 }
583 579
584 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) { 580 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) {
585 TestCompletionCallback callback; 581 TestCompletionCallback callback;
586 ClientSocketHandle handle; 582 ClientSocketHandle handle;
587 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 583 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_,
588 BoundNetLog()); 584 BoundNetLog());
589 EXPECT_EQ(ERR_IO_PENDING, rv); 585 EXPECT_EQ(ERR_IO_PENDING, rv);
590 EXPECT_FALSE(handle.is_initialized()); 586 EXPECT_FALSE(handle.is_initialized());
591 EXPECT_FALSE(handle.socket()); 587 EXPECT_FALSE(handle.socket());
592 588
593 EXPECT_EQ(OK, callback.WaitForResult()); 589 EXPECT_EQ(OK, callback.WaitForResult());
594 EXPECT_TRUE(handle.is_initialized()); 590 EXPECT_TRUE(handle.is_initialized());
595 EXPECT_TRUE(handle.socket()); 591 EXPECT_TRUE(handle.socket());
596 TestLoadTimingInfoConnectedNotReused(handle); 592 TestLoadTimingInfoConnectedNotReused(handle);
597 593
598 handle.Reset(); 594 handle.Reset();
599 // Need to run all pending to release the socket back to the pool. 595 // Need to run all pending to release the socket back to the pool.
600 base::MessageLoop::current()->RunUntilIdle(); 596 base::MessageLoop::current()->RunUntilIdle();
601 597
602 // Now we should have 1 idle socket. 598 // Now we should have 1 idle socket.
603 EXPECT_EQ(1, pool_.IdleSocketCount()); 599 EXPECT_EQ(1, pool_.IdleSocketCount());
604 600
605 rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 601 rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_,
606 BoundNetLog()); 602 BoundNetLog());
607 EXPECT_EQ(OK, rv); 603 EXPECT_EQ(OK, rv);
608 EXPECT_EQ(0, pool_.IdleSocketCount()); 604 EXPECT_EQ(0, pool_.IdleSocketCount());
609 TestLoadTimingInfoConnectedReused(handle); 605 TestLoadTimingInfoConnectedReused(handle);
610 } 606 }
611 607
612 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { 608 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) {
613 TestCompletionCallback callback; 609 TestCompletionCallback callback;
614 ClientSocketHandle handle; 610 ClientSocketHandle handle;
615 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 611 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_,
616 BoundNetLog()); 612 BoundNetLog());
617 EXPECT_EQ(ERR_IO_PENDING, rv); 613 EXPECT_EQ(ERR_IO_PENDING, rv);
618 EXPECT_FALSE(handle.is_initialized()); 614 EXPECT_FALSE(handle.is_initialized());
619 EXPECT_FALSE(handle.socket()); 615 EXPECT_FALSE(handle.socket());
620 616
621 EXPECT_EQ(OK, callback.WaitForResult()); 617 EXPECT_EQ(OK, callback.WaitForResult());
622 EXPECT_TRUE(handle.is_initialized()); 618 EXPECT_TRUE(handle.is_initialized());
623 EXPECT_TRUE(handle.socket()); 619 EXPECT_TRUE(handle.socket());
624 620
625 handle.Reset(); 621 handle.Reset();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 case2_types 657 case2_types
662 }; 658 };
663 659
664 for (size_t index = 0; index < arraysize(cases); ++index) { 660 for (size_t index = 0; index < arraysize(cases); ++index) {
665 client_socket_factory_.set_client_socket_types(cases[index], 2); 661 client_socket_factory_.set_client_socket_types(cases[index], 2);
666 662
667 EXPECT_EQ(0, pool_.IdleSocketCount()); 663 EXPECT_EQ(0, pool_.IdleSocketCount());
668 664
669 TestCompletionCallback callback; 665 TestCompletionCallback callback;
670 ClientSocketHandle handle; 666 ClientSocketHandle handle;
671 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 667 int rv = handle.Init("b", params_, LOW, false, callback.callback(), &pool_,
672 BoundNetLog()); 668 BoundNetLog());
673 EXPECT_EQ(ERR_IO_PENDING, rv); 669 EXPECT_EQ(ERR_IO_PENDING, rv);
674 EXPECT_FALSE(handle.is_initialized()); 670 EXPECT_FALSE(handle.is_initialized());
675 EXPECT_FALSE(handle.socket()); 671 EXPECT_FALSE(handle.socket());
676 672
677 // Create the first socket, set the timer. 673 // Create the first socket, set the timer.
678 base::MessageLoop::current()->RunUntilIdle(); 674 base::MessageLoop::current()->RunUntilIdle();
679 675
680 // Wait for the backup socket timer to fire. 676 // Wait for the backup socket timer to fire.
681 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 677 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
(...skipping 21 matching lines...) Expand all
703 client_socket_factory_.set_default_client_socket_type( 699 client_socket_factory_.set_default_client_socket_type(
704 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET); 700 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET);
705 701
706 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT }; 702 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT };
707 703
708 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) { 704 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) {
709 EXPECT_EQ(0, pool_.IdleSocketCount()); 705 EXPECT_EQ(0, pool_.IdleSocketCount());
710 706
711 TestCompletionCallback callback; 707 TestCompletionCallback callback;
712 ClientSocketHandle handle; 708 ClientSocketHandle handle;
713 int rv = handle.Init("c", params_, LOW, callback.callback(), &pool_, 709 int rv = handle.Init("c", params_, LOW, false, callback.callback(), &pool_,
714 BoundNetLog()); 710 BoundNetLog());
715 EXPECT_EQ(ERR_IO_PENDING, rv); 711 EXPECT_EQ(ERR_IO_PENDING, rv);
716 EXPECT_FALSE(handle.is_initialized()); 712 EXPECT_FALSE(handle.is_initialized());
717 EXPECT_FALSE(handle.socket()); 713 EXPECT_FALSE(handle.socket());
718 714
719 // Create the first socket, set the timer. 715 // Create the first socket, set the timer.
720 base::MessageLoop::current()->RunUntilIdle(); 716 base::MessageLoop::current()->RunUntilIdle();
721 717
722 if (index == CANCEL_AFTER_WAIT) { 718 if (index == CANCEL_AFTER_WAIT) {
723 // Wait for the backup socket timer to fire. 719 // Wait for the backup socket timer to fire.
(...skipping 25 matching lines...) Expand all
749 // The second socket will fail immediately. 745 // The second socket will fail immediately.
750 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET 746 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET
751 }; 747 };
752 748
753 client_socket_factory_.set_client_socket_types(case_types, 2); 749 client_socket_factory_.set_client_socket_types(case_types, 2);
754 750
755 EXPECT_EQ(0, pool_.IdleSocketCount()); 751 EXPECT_EQ(0, pool_.IdleSocketCount());
756 752
757 TestCompletionCallback callback; 753 TestCompletionCallback callback;
758 ClientSocketHandle handle; 754 ClientSocketHandle handle;
759 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 755 int rv = handle.Init("b", params_, LOW, false, callback.callback(), &pool_,
760 BoundNetLog()); 756 BoundNetLog());
761 EXPECT_EQ(ERR_IO_PENDING, rv); 757 EXPECT_EQ(ERR_IO_PENDING, rv);
762 EXPECT_FALSE(handle.is_initialized()); 758 EXPECT_FALSE(handle.is_initialized());
763 EXPECT_FALSE(handle.socket()); 759 EXPECT_FALSE(handle.socket());
764 760
765 // Create the first socket, set the timer. 761 // Create the first socket, set the timer.
766 base::MessageLoop::current()->RunUntilIdle(); 762 base::MessageLoop::current()->RunUntilIdle();
767 763
768 // Wait for the backup socket timer to fire. 764 // Wait for the backup socket timer to fire.
769 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 765 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
(...skipping 29 matching lines...) Expand all
799 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET 795 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET
800 }; 796 };
801 797
802 client_socket_factory_.set_client_socket_types(case_types, 2); 798 client_socket_factory_.set_client_socket_types(case_types, 2);
803 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5)); 799 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5));
804 800
805 EXPECT_EQ(0, pool_.IdleSocketCount()); 801 EXPECT_EQ(0, pool_.IdleSocketCount());
806 802
807 TestCompletionCallback callback; 803 TestCompletionCallback callback;
808 ClientSocketHandle handle; 804 ClientSocketHandle handle;
809 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 805 int rv = handle.Init("b", params_, LOW, false, callback.callback(), &pool_,
810 BoundNetLog()); 806 BoundNetLog());
811 EXPECT_EQ(ERR_IO_PENDING, rv); 807 EXPECT_EQ(ERR_IO_PENDING, rv);
812 EXPECT_FALSE(handle.is_initialized()); 808 EXPECT_FALSE(handle.is_initialized());
813 EXPECT_FALSE(handle.socket()); 809 EXPECT_FALSE(handle.socket());
814 810
815 // Create the first socket, set the timer. 811 // Create the first socket, set the timer.
816 base::MessageLoop::current()->RunUntilIdle(); 812 base::MessageLoop::current()->RunUntilIdle();
817 813
818 // Wait for the backup socket timer to fire. 814 // Wait for the backup socket timer to fire.
819 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 815 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; 852 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET};
857 853
858 client_socket_factory_.set_client_socket_types(case_types, 2); 854 client_socket_factory_.set_client_socket_types(case_types, 2);
859 855
860 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 856 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
861 host_resolver_->rules() 857 host_resolver_->rules()
862 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 858 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
863 859
864 TestCompletionCallback callback; 860 TestCompletionCallback callback;
865 ClientSocketHandle handle; 861 ClientSocketHandle handle;
866 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 862 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
867 BoundNetLog()); 863 BoundNetLog());
868 EXPECT_EQ(ERR_IO_PENDING, rv); 864 EXPECT_EQ(ERR_IO_PENDING, rv);
869 EXPECT_FALSE(handle.is_initialized()); 865 EXPECT_FALSE(handle.is_initialized());
870 EXPECT_FALSE(handle.socket()); 866 EXPECT_FALSE(handle.socket());
871 867
872 EXPECT_EQ(OK, callback.WaitForResult()); 868 EXPECT_EQ(OK, callback.WaitForResult());
873 EXPECT_TRUE(handle.is_initialized()); 869 EXPECT_TRUE(handle.is_initialized());
874 EXPECT_TRUE(handle.socket()); 870 EXPECT_TRUE(handle.socket());
875 IPEndPoint endpoint; 871 IPEndPoint endpoint;
876 handle.socket()->GetLocalAddress(&endpoint); 872 handle.socket()->GetLocalAddress(&endpoint);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 client_socket_factory_.set_client_socket_types(case_types, 2); 904 client_socket_factory_.set_client_socket_types(case_types, 2);
909 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( 905 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds(
910 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50)); 906 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50));
911 907
912 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 908 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
913 host_resolver_->rules() 909 host_resolver_->rules()
914 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 910 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
915 911
916 TestCompletionCallback callback; 912 TestCompletionCallback callback;
917 ClientSocketHandle handle; 913 ClientSocketHandle handle;
918 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 914 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
919 BoundNetLog()); 915 BoundNetLog());
920 EXPECT_EQ(ERR_IO_PENDING, rv); 916 EXPECT_EQ(ERR_IO_PENDING, rv);
921 EXPECT_FALSE(handle.is_initialized()); 917 EXPECT_FALSE(handle.is_initialized());
922 EXPECT_FALSE(handle.socket()); 918 EXPECT_FALSE(handle.socket());
923 919
924 EXPECT_EQ(OK, callback.WaitForResult()); 920 EXPECT_EQ(OK, callback.WaitForResult());
925 EXPECT_TRUE(handle.is_initialized()); 921 EXPECT_TRUE(handle.is_initialized());
926 EXPECT_TRUE(handle.socket()); 922 EXPECT_TRUE(handle.socket());
927 IPEndPoint endpoint; 923 IPEndPoint endpoint;
928 handle.socket()->GetLocalAddress(&endpoint); 924 handle.socket()->GetLocalAddress(&endpoint);
(...skipping 21 matching lines...) Expand all
950 946
951 client_socket_factory_.set_default_client_socket_type( 947 client_socket_factory_.set_default_client_socket_type(
952 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 948 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
953 949
954 // Resolve an AddressList with only IPv6 addresses. 950 // Resolve an AddressList with only IPv6 addresses.
955 host_resolver_->rules() 951 host_resolver_->rules()
956 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); 952 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string());
957 953
958 TestCompletionCallback callback; 954 TestCompletionCallback callback;
959 ClientSocketHandle handle; 955 ClientSocketHandle handle;
960 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 956 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
961 BoundNetLog()); 957 BoundNetLog());
962 EXPECT_EQ(ERR_IO_PENDING, rv); 958 EXPECT_EQ(ERR_IO_PENDING, rv);
963 EXPECT_FALSE(handle.is_initialized()); 959 EXPECT_FALSE(handle.is_initialized());
964 EXPECT_FALSE(handle.socket()); 960 EXPECT_FALSE(handle.socket());
965 961
966 EXPECT_EQ(OK, callback.WaitForResult()); 962 EXPECT_EQ(OK, callback.WaitForResult());
967 EXPECT_TRUE(handle.is_initialized()); 963 EXPECT_TRUE(handle.is_initialized());
968 EXPECT_TRUE(handle.socket()); 964 EXPECT_TRUE(handle.socket());
969 IPEndPoint endpoint; 965 IPEndPoint endpoint;
970 handle.socket()->GetLocalAddress(&endpoint); 966 handle.socket()->GetLocalAddress(&endpoint);
(...skipping 12 matching lines...) Expand all
983 NULL); 979 NULL);
984 980
985 client_socket_factory_.set_default_client_socket_type( 981 client_socket_factory_.set_default_client_socket_type(
986 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 982 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
987 983
988 // Resolve an AddressList with only IPv4 addresses. 984 // Resolve an AddressList with only IPv4 addresses.
989 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); 985 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string());
990 986
991 TestCompletionCallback callback; 987 TestCompletionCallback callback;
992 ClientSocketHandle handle; 988 ClientSocketHandle handle;
993 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 989 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
994 BoundNetLog()); 990 BoundNetLog());
995 EXPECT_EQ(ERR_IO_PENDING, rv); 991 EXPECT_EQ(ERR_IO_PENDING, rv);
996 EXPECT_FALSE(handle.is_initialized()); 992 EXPECT_FALSE(handle.is_initialized());
997 EXPECT_FALSE(handle.socket()); 993 EXPECT_FALSE(handle.socket());
998 994
999 EXPECT_EQ(OK, callback.WaitForResult()); 995 EXPECT_EQ(OK, callback.WaitForResult());
1000 EXPECT_TRUE(handle.is_initialized()); 996 EXPECT_TRUE(handle.is_initialized());
1001 EXPECT_TRUE(handle.socket()); 997 EXPECT_TRUE(handle.socket());
1002 IPEndPoint endpoint; 998 IPEndPoint endpoint;
1003 handle.socket()->GetLocalAddress(&endpoint); 999 handle.socket()->GetLocalAddress(&endpoint);
(...skipping 14 matching lines...) Expand all
1018 NULL); 1014 NULL);
1019 client_socket_factory_.set_default_client_socket_type( 1015 client_socket_factory_.set_default_client_socket_type(
1020 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 1016 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
1021 // Resolve an AddressList with only IPv4 addresses. 1017 // Resolve an AddressList with only IPv4 addresses.
1022 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); 1018 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string());
1023 1019
1024 TestCompletionCallback callback; 1020 TestCompletionCallback callback;
1025 ClientSocketHandle handle; 1021 ClientSocketHandle handle;
1026 // Enable TCP FastOpen in TransportSocketParams. 1022 // Enable TCP FastOpen in TransportSocketParams.
1027 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1023 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1028 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1024 handle.Init("a", params, LOW, false, callback.callback(), &pool,
1025 BoundNetLog());
1029 EXPECT_EQ(OK, callback.WaitForResult()); 1026 EXPECT_EQ(OK, callback.WaitForResult());
1030 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); 1027 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen());
1031 } 1028 }
1032 1029
1033 // Test that if TCP FastOpen is enabled, it is set on the socket 1030 // Test that if TCP FastOpen is enabled, it is set on the socket
1034 // when we have only IPv6 addresses. 1031 // when we have only IPv6 addresses.
1035 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) { 1032 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) {
1036 // Create a pool without backup jobs. 1033 // Create a pool without backup jobs.
1037 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); 1034 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false);
1038 TransportClientSocketPool pool(kMaxSockets, 1035 TransportClientSocketPool pool(kMaxSockets,
1039 kMaxSocketsPerGroup, 1036 kMaxSocketsPerGroup,
1040 host_resolver_.get(), 1037 host_resolver_.get(),
1041 &client_socket_factory_, 1038 &client_socket_factory_,
1042 NULL); 1039 NULL);
1043 client_socket_factory_.set_default_client_socket_type( 1040 client_socket_factory_.set_default_client_socket_type(
1044 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 1041 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
1045 // Resolve an AddressList with only IPv6 addresses. 1042 // Resolve an AddressList with only IPv6 addresses.
1046 host_resolver_->rules() 1043 host_resolver_->rules()
1047 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); 1044 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string());
1048 1045
1049 TestCompletionCallback callback; 1046 TestCompletionCallback callback;
1050 ClientSocketHandle handle; 1047 ClientSocketHandle handle;
1051 // Enable TCP FastOpen in TransportSocketParams. 1048 // Enable TCP FastOpen in TransportSocketParams.
1052 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1049 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1053 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1050 handle.Init("a", params, LOW, false, callback.callback(), &pool,
1051 BoundNetLog());
1054 EXPECT_EQ(OK, callback.WaitForResult()); 1052 EXPECT_EQ(OK, callback.WaitForResult());
1055 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); 1053 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen());
1056 } 1054 }
1057 1055
1058 // Test that if TCP FastOpen is enabled, it does not do anything when there 1056 // Test that if TCP FastOpen is enabled, it does not do anything when there
1059 // is a IPv6 address with fallback to an IPv4 address. This test tests the case 1057 // is a IPv6 address with fallback to an IPv4 address. This test tests the case
1060 // when the IPv6 connect fails and the IPv4 one succeeds. 1058 // when the IPv6 connect fails and the IPv4 one succeeds.
1061 TEST_F(TransportClientSocketPoolTest, 1059 TEST_F(TransportClientSocketPoolTest,
1062 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) { 1060 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) {
1063 // Create a pool without backup jobs. 1061 // Create a pool without backup jobs.
(...skipping 12 matching lines...) Expand all
1076 }; 1074 };
1077 client_socket_factory_.set_client_socket_types(case_types, 2); 1075 client_socket_factory_.set_client_socket_types(case_types, 2);
1078 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 1076 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
1079 host_resolver_->rules() 1077 host_resolver_->rules()
1080 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 1078 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
1081 1079
1082 TestCompletionCallback callback; 1080 TestCompletionCallback callback;
1083 ClientSocketHandle handle; 1081 ClientSocketHandle handle;
1084 // Enable TCP FastOpen in TransportSocketParams. 1082 // Enable TCP FastOpen in TransportSocketParams.
1085 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1083 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1086 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1084 handle.Init("a", params, LOW, false, callback.callback(), &pool,
1085 BoundNetLog());
1087 EXPECT_EQ(OK, callback.WaitForResult()); 1086 EXPECT_EQ(OK, callback.WaitForResult());
1088 // Verify that the socket used is connected to the fallback IPv4 address. 1087 // Verify that the socket used is connected to the fallback IPv4 address.
1089 IPEndPoint endpoint; 1088 IPEndPoint endpoint;
1090 handle.socket()->GetLocalAddress(&endpoint); 1089 handle.socket()->GetLocalAddress(&endpoint);
1091 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 1090 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
1092 EXPECT_EQ(2, client_socket_factory_.allocation_count()); 1091 EXPECT_EQ(2, client_socket_factory_.allocation_count());
1093 // Verify that TCP FastOpen was not turned on for the socket. 1092 // Verify that TCP FastOpen was not turned on for the socket.
1094 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); 1093 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen());
1095 } 1094 }
1096 1095
(...skipping 18 matching lines...) Expand all
1115 }; 1114 };
1116 client_socket_factory_.set_client_socket_types(case_types, 2); 1115 client_socket_factory_.set_client_socket_types(case_types, 2);
1117 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 1116 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
1118 host_resolver_->rules() 1117 host_resolver_->rules()
1119 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 1118 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
1120 1119
1121 TestCompletionCallback callback; 1120 TestCompletionCallback callback;
1122 ClientSocketHandle handle; 1121 ClientSocketHandle handle;
1123 // Enable TCP FastOpen in TransportSocketParams. 1122 // Enable TCP FastOpen in TransportSocketParams.
1124 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1123 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1125 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1124 handle.Init("a", params, LOW, false, callback.callback(), &pool,
1125 BoundNetLog());
1126 EXPECT_EQ(OK, callback.WaitForResult()); 1126 EXPECT_EQ(OK, callback.WaitForResult());
1127 // Verify that the socket used is connected to the IPv6 address. 1127 // Verify that the socket used is connected to the IPv6 address.
1128 IPEndPoint endpoint; 1128 IPEndPoint endpoint;
1129 handle.socket()->GetLocalAddress(&endpoint); 1129 handle.socket()->GetLocalAddress(&endpoint);
1130 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 1130 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
1131 EXPECT_EQ(1, client_socket_factory_.allocation_count()); 1131 EXPECT_EQ(1, client_socket_factory_.allocation_count());
1132 // Verify that TCP FastOpen was not turned on for the socket. 1132 // Verify that TCP FastOpen was not turned on for the socket.
1133 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); 1133 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen());
1134 } 1134 }
1135 1135
1136 } // namespace 1136 } // namespace
1137 1137
1138 } // namespace net 1138 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698