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

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: RespectLimits Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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(
75 &pool_, group_name, priority, params); 73 &pool_, group_name, priority, ClientSocketPool::RespectLimits::ENABLED,
74 params);
76 } 75 }
77 76
78 int GetOrderOfRequest(size_t index) { 77 int GetOrderOfRequest(size_t index) {
79 return test_base_.GetOrderOfRequest(index); 78 return test_base_.GetOrderOfRequest(index);
80 } 79 }
81 80
82 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { 81 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) {
83 return test_base_.ReleaseOneConnection(keep_alive); 82 return test_base_.ReleaseOneConnection(keep_alive);
84 } 83 }
85 84
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 ASSERT_EQ(4u, addrlist.size()); 170 ASSERT_EQ(4u, addrlist.size());
172 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily()); 171 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily());
173 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily()); 172 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily());
174 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily()); 173 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily());
175 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily()); 174 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily());
176 } 175 }
177 176
178 TEST_F(TransportClientSocketPoolTest, Basic) { 177 TEST_F(TransportClientSocketPoolTest, Basic) {
179 TestCompletionCallback callback; 178 TestCompletionCallback callback;
180 ClientSocketHandle handle; 179 ClientSocketHandle handle;
181 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 180 int rv =
182 BoundNetLog()); 181 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
182 callback.callback(), &pool_, BoundNetLog());
183 EXPECT_EQ(ERR_IO_PENDING, rv); 183 EXPECT_EQ(ERR_IO_PENDING, rv);
184 EXPECT_FALSE(handle.is_initialized()); 184 EXPECT_FALSE(handle.is_initialized());
185 EXPECT_FALSE(handle.socket()); 185 EXPECT_FALSE(handle.socket());
186 186
187 EXPECT_EQ(OK, callback.WaitForResult()); 187 EXPECT_EQ(OK, callback.WaitForResult());
188 EXPECT_TRUE(handle.is_initialized()); 188 EXPECT_TRUE(handle.is_initialized());
189 EXPECT_TRUE(handle.socket()); 189 EXPECT_TRUE(handle.socket());
190 TestLoadTimingInfoConnectedNotReused(handle); 190 TestLoadTimingInfoConnectedNotReused(handle);
191 EXPECT_EQ(0u, handle.connection_attempts().size()); 191 EXPECT_EQ(0u, handle.connection_attempts().size());
192 } 192 }
193 193
194 // Make sure that TransportConnectJob passes on its priority to its 194 // Make sure that TransportConnectJob passes on its priority to its
195 // HostResolver request on Init. 195 // HostResolver request on Init.
196 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) { 196 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) {
197 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { 197 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
198 RequestPriority priority = static_cast<RequestPriority>(i); 198 RequestPriority priority = static_cast<RequestPriority>(i);
199 TestCompletionCallback callback; 199 TestCompletionCallback callback;
200 ClientSocketHandle handle; 200 ClientSocketHandle handle;
201 EXPECT_EQ(ERR_IO_PENDING, 201 EXPECT_EQ(ERR_IO_PENDING,
202 handle.Init("a", params_, priority, callback.callback(), &pool_, 202 handle.Init("a", params_, priority,
203 BoundNetLog())); 203 ClientSocketPool::RespectLimits::ENABLED,
204 callback.callback(), &pool_, BoundNetLog()));
204 EXPECT_EQ(priority, host_resolver_->last_request_priority()); 205 EXPECT_EQ(priority, host_resolver_->last_request_priority());
205 } 206 }
206 } 207 }
207 208
208 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { 209 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) {
209 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); 210 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name");
210 TestCompletionCallback callback; 211 TestCompletionCallback callback;
211 ClientSocketHandle handle; 212 ClientSocketHandle handle;
212 HostPortPair host_port_pair("unresolvable.host.name", 80); 213 HostPortPair host_port_pair("unresolvable.host.name", 80);
213 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 214 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
214 host_port_pair, false, false, OnHostResolutionCallback(), 215 host_port_pair, false, OnHostResolutionCallback(),
215 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 216 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
216 EXPECT_EQ(ERR_IO_PENDING, 217 EXPECT_EQ(ERR_IO_PENDING,
217 handle.Init("a", dest, kDefaultPriority, callback.callback(), 218 handle.Init("a", dest, kDefaultPriority,
218 &pool_, BoundNetLog())); 219 ClientSocketPool::RespectLimits::ENABLED,
220 callback.callback(), &pool_, BoundNetLog()));
219 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); 221 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult());
220 ASSERT_EQ(1u, handle.connection_attempts().size()); 222 ASSERT_EQ(1u, handle.connection_attempts().size());
221 EXPECT_TRUE(handle.connection_attempts()[0].endpoint.address().empty()); 223 EXPECT_TRUE(handle.connection_attempts()[0].endpoint.address().empty());
222 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, handle.connection_attempts()[0].result); 224 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, handle.connection_attempts()[0].result);
223 } 225 }
224 226
225 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { 227 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) {
226 client_socket_factory_.set_default_client_socket_type( 228 client_socket_factory_.set_default_client_socket_type(
227 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); 229 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET);
228 TestCompletionCallback callback; 230 TestCompletionCallback callback;
229 ClientSocketHandle handle; 231 ClientSocketHandle handle;
230 EXPECT_EQ(ERR_IO_PENDING, 232 EXPECT_EQ(ERR_IO_PENDING,
231 handle.Init("a", params_, kDefaultPriority, callback.callback(), 233 handle.Init("a", params_, kDefaultPriority,
232 &pool_, BoundNetLog())); 234 ClientSocketPool::RespectLimits::ENABLED,
235 callback.callback(), &pool_, BoundNetLog()));
233 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 236 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
234 ASSERT_EQ(1u, handle.connection_attempts().size()); 237 ASSERT_EQ(1u, handle.connection_attempts().size());
235 EXPECT_EQ("127.0.0.1:80", 238 EXPECT_EQ("127.0.0.1:80",
236 handle.connection_attempts()[0].endpoint.ToString()); 239 handle.connection_attempts()[0].endpoint.ToString());
237 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); 240 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result);
238 241
239 // Make the host resolutions complete synchronously this time. 242 // Make the host resolutions complete synchronously this time.
240 host_resolver_->set_synchronous_mode(true); 243 host_resolver_->set_synchronous_mode(true);
241 EXPECT_EQ(ERR_CONNECTION_FAILED, 244 EXPECT_EQ(ERR_CONNECTION_FAILED,
242 handle.Init("a", params_, kDefaultPriority, callback.callback(), 245 handle.Init("a", params_, kDefaultPriority,
243 &pool_, BoundNetLog())); 246 ClientSocketPool::RespectLimits::ENABLED,
247 callback.callback(), &pool_, BoundNetLog()));
244 ASSERT_EQ(1u, handle.connection_attempts().size()); 248 ASSERT_EQ(1u, handle.connection_attempts().size());
245 EXPECT_EQ("127.0.0.1:80", 249 EXPECT_EQ("127.0.0.1:80",
246 handle.connection_attempts()[0].endpoint.ToString()); 250 handle.connection_attempts()[0].endpoint.ToString());
247 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); 251 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result);
248 } 252 }
249 253
250 TEST_F(TransportClientSocketPoolTest, PendingRequests) { 254 TEST_F(TransportClientSocketPoolTest, PendingRequests) {
251 // First request finishes asynchronously. 255 // First request finishes asynchronously.
252 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 256 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
253 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); 257 EXPECT_EQ(OK, (*requests())[0]->WaitForResult());
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 EXPECT_EQ(6U, completion_count()); 347 EXPECT_EQ(6U, completion_count());
344 } 348 }
345 349
346 // This test will start up a RequestSocket() and then immediately Cancel() it. 350 // This test will start up a RequestSocket() and then immediately Cancel() it.
347 // The pending host resolution will eventually complete, and destroy the 351 // The pending host resolution will eventually complete, and destroy the
348 // ClientSocketPool which will crash if the group was not cleared properly. 352 // ClientSocketPool which will crash if the group was not cleared properly.
349 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) { 353 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) {
350 TestCompletionCallback callback; 354 TestCompletionCallback callback;
351 ClientSocketHandle handle; 355 ClientSocketHandle handle;
352 EXPECT_EQ(ERR_IO_PENDING, 356 EXPECT_EQ(ERR_IO_PENDING,
353 handle.Init("a", params_, kDefaultPriority, callback.callback(), 357 handle.Init("a", params_, kDefaultPriority,
354 &pool_, BoundNetLog())); 358 ClientSocketPool::RespectLimits::ENABLED,
359 callback.callback(), &pool_, BoundNetLog()));
355 handle.Reset(); 360 handle.Reset();
356 } 361 }
357 362
358 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) { 363 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) {
359 ClientSocketHandle handle; 364 ClientSocketHandle handle;
360 TestCompletionCallback callback; 365 TestCompletionCallback callback;
361 ClientSocketHandle handle2; 366 ClientSocketHandle handle2;
362 TestCompletionCallback callback2; 367 TestCompletionCallback callback2;
363 368
364 EXPECT_EQ(ERR_IO_PENDING, 369 EXPECT_EQ(ERR_IO_PENDING,
365 handle.Init("a", params_, kDefaultPriority, callback.callback(), 370 handle.Init("a", params_, kDefaultPriority,
366 &pool_, BoundNetLog())); 371 ClientSocketPool::RespectLimits::ENABLED,
372 callback.callback(), &pool_, BoundNetLog()));
367 EXPECT_EQ(ERR_IO_PENDING, 373 EXPECT_EQ(ERR_IO_PENDING,
368 handle2.Init("a", params_, kDefaultPriority, callback2.callback(), 374 handle2.Init("a", params_, kDefaultPriority,
369 &pool_, BoundNetLog())); 375 ClientSocketPool::RespectLimits::ENABLED,
376 callback2.callback(), &pool_, BoundNetLog()));
370 377
371 handle.Reset(); 378 handle.Reset();
372 379
373 EXPECT_EQ(OK, callback2.WaitForResult()); 380 EXPECT_EQ(OK, callback2.WaitForResult());
374 handle2.Reset(); 381 handle2.Reset();
375 } 382 }
376 383
377 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) { 384 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) {
378 client_socket_factory_.set_default_client_socket_type( 385 client_socket_factory_.set_default_client_socket_type(
379 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); 386 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET);
380 ClientSocketHandle handle; 387 ClientSocketHandle handle;
381 TestCompletionCallback callback; 388 TestCompletionCallback callback;
382 EXPECT_EQ(ERR_IO_PENDING, 389 EXPECT_EQ(ERR_IO_PENDING,
383 handle.Init("a", params_, kDefaultPriority, callback.callback(), 390 handle.Init("a", params_, kDefaultPriority,
384 &pool_, BoundNetLog())); 391 ClientSocketPool::RespectLimits::ENABLED,
392 callback.callback(), &pool_, BoundNetLog()));
385 393
386 handle.Reset(); 394 handle.Reset();
387 395
388 TestCompletionCallback callback2; 396 TestCompletionCallback callback2;
389 EXPECT_EQ(ERR_IO_PENDING, 397 EXPECT_EQ(ERR_IO_PENDING,
390 handle.Init("a", params_, kDefaultPriority, callback2.callback(), 398 handle.Init("a", params_, kDefaultPriority,
391 &pool_, BoundNetLog())); 399 ClientSocketPool::RespectLimits::ENABLED,
400 callback2.callback(), &pool_, BoundNetLog()));
392 401
393 host_resolver_->set_synchronous_mode(true); 402 host_resolver_->set_synchronous_mode(true);
394 // At this point, handle has two ConnectingSockets out for it. Due to the 403 // 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 404 // 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 405 // 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 406 // is a pending socket, so the Connect() will asynchronously complete on the
398 // next loop of the MessageLoop. That means that the first 407 // next loop of the MessageLoop. That means that the first
399 // ConnectingSocket will enter OnIOComplete, and then the second one will. 408 // 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 409 // If the first one is not cancelled, it will advance the load state, and
401 // then the second one will crash. 410 // 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. 499 // run through the MessageLoop once to get it completely released.
491 handle_->socket()->Disconnect(); 500 handle_->socket()->Disconnect();
492 handle_->Reset(); 501 handle_->Reset();
493 { 502 {
494 base::MessageLoop::ScopedNestableTaskAllower allow( 503 base::MessageLoop::ScopedNestableTaskAllower allow(
495 base::MessageLoop::current()); 504 base::MessageLoop::current());
496 base::MessageLoop::current()->RunUntilIdle(); 505 base::MessageLoop::current()->RunUntilIdle();
497 } 506 }
498 within_callback_ = true; 507 within_callback_ = true;
499 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 508 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
500 HostPortPair("www.google.com", 80), false, false, 509 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
501 OnHostResolutionCallback(),
502 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 510 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
503 int rv = handle_->Init("a", dest, LOWEST, callback(), pool_, 511 int rv = handle_->Init("a", dest, LOWEST,
504 BoundNetLog()); 512 ClientSocketPool::RespectLimits::ENABLED,
513 callback(), pool_, BoundNetLog());
505 EXPECT_EQ(OK, rv); 514 EXPECT_EQ(OK, rv);
506 } 515 }
507 } 516 }
508 517
509 ClientSocketHandle* const handle_; 518 ClientSocketHandle* const handle_;
510 TransportClientSocketPool* const pool_; 519 TransportClientSocketPool* const pool_;
511 bool within_callback_; 520 bool within_callback_;
512 CompletionCallback callback_; 521 CompletionCallback callback_;
513 522
514 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); 523 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback);
515 }; 524 };
516 525
517 TEST_F(TransportClientSocketPoolTest, RequestTwice) { 526 TEST_F(TransportClientSocketPoolTest, RequestTwice) {
518 ClientSocketHandle handle; 527 ClientSocketHandle handle;
519 RequestSocketCallback callback(&handle, &pool_); 528 RequestSocketCallback callback(&handle, &pool_);
520 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 529 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
521 HostPortPair("www.google.com", 80), false, false, 530 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
522 OnHostResolutionCallback(),
523 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 531 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
524 int rv = handle.Init("a", dest, LOWEST, callback.callback(), &pool_, 532 int rv =
525 BoundNetLog()); 533 handle.Init("a", dest, LOWEST, ClientSocketPool::RespectLimits::ENABLED,
534 callback.callback(), &pool_, BoundNetLog());
526 ASSERT_EQ(ERR_IO_PENDING, rv); 535 ASSERT_EQ(ERR_IO_PENDING, rv);
527 536
528 // The callback is going to request "www.google.com". We want it to complete 537 // The callback is going to request "www.google.com". We want it to complete
529 // synchronously this time. 538 // synchronously this time.
530 host_resolver_->set_synchronous_mode(true); 539 host_resolver_->set_synchronous_mode(true);
531 540
532 EXPECT_EQ(OK, callback.WaitForResult()); 541 EXPECT_EQ(OK, callback.WaitForResult());
533 542
534 handle.Reset(); 543 handle.Reset();
535 } 544 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 for (int i = 0; i < kNumRequests; i++) 586 for (int i = 0; i < kNumRequests; i++)
578 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 587 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
579 588
580 for (int i = 0; i < kNumRequests; i++) 589 for (int i = 0; i < kNumRequests; i++)
581 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult()); 590 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult());
582 } 591 }
583 592
584 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) { 593 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) {
585 TestCompletionCallback callback; 594 TestCompletionCallback callback;
586 ClientSocketHandle handle; 595 ClientSocketHandle handle;
587 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 596 int rv =
588 BoundNetLog()); 597 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
598 callback.callback(), &pool_, BoundNetLog());
589 EXPECT_EQ(ERR_IO_PENDING, rv); 599 EXPECT_EQ(ERR_IO_PENDING, rv);
590 EXPECT_FALSE(handle.is_initialized()); 600 EXPECT_FALSE(handle.is_initialized());
591 EXPECT_FALSE(handle.socket()); 601 EXPECT_FALSE(handle.socket());
592 602
593 EXPECT_EQ(OK, callback.WaitForResult()); 603 EXPECT_EQ(OK, callback.WaitForResult());
594 EXPECT_TRUE(handle.is_initialized()); 604 EXPECT_TRUE(handle.is_initialized());
595 EXPECT_TRUE(handle.socket()); 605 EXPECT_TRUE(handle.socket());
596 TestLoadTimingInfoConnectedNotReused(handle); 606 TestLoadTimingInfoConnectedNotReused(handle);
597 607
598 handle.Reset(); 608 handle.Reset();
599 // Need to run all pending to release the socket back to the pool. 609 // Need to run all pending to release the socket back to the pool.
600 base::MessageLoop::current()->RunUntilIdle(); 610 base::MessageLoop::current()->RunUntilIdle();
601 611
602 // Now we should have 1 idle socket. 612 // Now we should have 1 idle socket.
603 EXPECT_EQ(1, pool_.IdleSocketCount()); 613 EXPECT_EQ(1, pool_.IdleSocketCount());
604 614
605 rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 615 rv = handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
606 BoundNetLog()); 616 callback.callback(), &pool_, BoundNetLog());
607 EXPECT_EQ(OK, rv); 617 EXPECT_EQ(OK, rv);
608 EXPECT_EQ(0, pool_.IdleSocketCount()); 618 EXPECT_EQ(0, pool_.IdleSocketCount());
609 TestLoadTimingInfoConnectedReused(handle); 619 TestLoadTimingInfoConnectedReused(handle);
610 } 620 }
611 621
612 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { 622 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) {
613 TestCompletionCallback callback; 623 TestCompletionCallback callback;
614 ClientSocketHandle handle; 624 ClientSocketHandle handle;
615 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 625 int rv =
616 BoundNetLog()); 626 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
627 callback.callback(), &pool_, BoundNetLog());
617 EXPECT_EQ(ERR_IO_PENDING, rv); 628 EXPECT_EQ(ERR_IO_PENDING, rv);
618 EXPECT_FALSE(handle.is_initialized()); 629 EXPECT_FALSE(handle.is_initialized());
619 EXPECT_FALSE(handle.socket()); 630 EXPECT_FALSE(handle.socket());
620 631
621 EXPECT_EQ(OK, callback.WaitForResult()); 632 EXPECT_EQ(OK, callback.WaitForResult());
622 EXPECT_TRUE(handle.is_initialized()); 633 EXPECT_TRUE(handle.is_initialized());
623 EXPECT_TRUE(handle.socket()); 634 EXPECT_TRUE(handle.socket());
624 635
625 handle.Reset(); 636 handle.Reset();
626 637
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 case2_types 672 case2_types
662 }; 673 };
663 674
664 for (size_t index = 0; index < arraysize(cases); ++index) { 675 for (size_t index = 0; index < arraysize(cases); ++index) {
665 client_socket_factory_.set_client_socket_types(cases[index], 2); 676 client_socket_factory_.set_client_socket_types(cases[index], 2);
666 677
667 EXPECT_EQ(0, pool_.IdleSocketCount()); 678 EXPECT_EQ(0, pool_.IdleSocketCount());
668 679
669 TestCompletionCallback callback; 680 TestCompletionCallback callback;
670 ClientSocketHandle handle; 681 ClientSocketHandle handle;
671 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 682 int rv =
672 BoundNetLog()); 683 handle.Init("b", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
684 callback.callback(), &pool_, BoundNetLog());
673 EXPECT_EQ(ERR_IO_PENDING, rv); 685 EXPECT_EQ(ERR_IO_PENDING, rv);
674 EXPECT_FALSE(handle.is_initialized()); 686 EXPECT_FALSE(handle.is_initialized());
675 EXPECT_FALSE(handle.socket()); 687 EXPECT_FALSE(handle.socket());
676 688
677 // Create the first socket, set the timer. 689 // Create the first socket, set the timer.
678 base::MessageLoop::current()->RunUntilIdle(); 690 base::MessageLoop::current()->RunUntilIdle();
679 691
680 // Wait for the backup socket timer to fire. 692 // Wait for the backup socket timer to fire.
681 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 693 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
682 ClientSocketPool::kMaxConnectRetryIntervalMs + 50)); 694 ClientSocketPool::kMaxConnectRetryIntervalMs + 50));
(...skipping 20 matching lines...) Expand all
703 client_socket_factory_.set_default_client_socket_type( 715 client_socket_factory_.set_default_client_socket_type(
704 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET); 716 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET);
705 717
706 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT }; 718 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT };
707 719
708 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) { 720 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) {
709 EXPECT_EQ(0, pool_.IdleSocketCount()); 721 EXPECT_EQ(0, pool_.IdleSocketCount());
710 722
711 TestCompletionCallback callback; 723 TestCompletionCallback callback;
712 ClientSocketHandle handle; 724 ClientSocketHandle handle;
713 int rv = handle.Init("c", params_, LOW, callback.callback(), &pool_, 725 int rv =
714 BoundNetLog()); 726 handle.Init("c", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
727 callback.callback(), &pool_, BoundNetLog());
715 EXPECT_EQ(ERR_IO_PENDING, rv); 728 EXPECT_EQ(ERR_IO_PENDING, rv);
716 EXPECT_FALSE(handle.is_initialized()); 729 EXPECT_FALSE(handle.is_initialized());
717 EXPECT_FALSE(handle.socket()); 730 EXPECT_FALSE(handle.socket());
718 731
719 // Create the first socket, set the timer. 732 // Create the first socket, set the timer.
720 base::MessageLoop::current()->RunUntilIdle(); 733 base::MessageLoop::current()->RunUntilIdle();
721 734
722 if (index == CANCEL_AFTER_WAIT) { 735 if (index == CANCEL_AFTER_WAIT) {
723 // Wait for the backup socket timer to fire. 736 // Wait for the backup socket timer to fire.
724 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 737 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
(...skipping 24 matching lines...) Expand all
749 // The second socket will fail immediately. 762 // The second socket will fail immediately.
750 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET 763 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET
751 }; 764 };
752 765
753 client_socket_factory_.set_client_socket_types(case_types, 2); 766 client_socket_factory_.set_client_socket_types(case_types, 2);
754 767
755 EXPECT_EQ(0, pool_.IdleSocketCount()); 768 EXPECT_EQ(0, pool_.IdleSocketCount());
756 769
757 TestCompletionCallback callback; 770 TestCompletionCallback callback;
758 ClientSocketHandle handle; 771 ClientSocketHandle handle;
759 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 772 int rv =
760 BoundNetLog()); 773 handle.Init("b", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
774 callback.callback(), &pool_, BoundNetLog());
761 EXPECT_EQ(ERR_IO_PENDING, rv); 775 EXPECT_EQ(ERR_IO_PENDING, rv);
762 EXPECT_FALSE(handle.is_initialized()); 776 EXPECT_FALSE(handle.is_initialized());
763 EXPECT_FALSE(handle.socket()); 777 EXPECT_FALSE(handle.socket());
764 778
765 // Create the first socket, set the timer. 779 // Create the first socket, set the timer.
766 base::MessageLoop::current()->RunUntilIdle(); 780 base::MessageLoop::current()->RunUntilIdle();
767 781
768 // Wait for the backup socket timer to fire. 782 // Wait for the backup socket timer to fire.
769 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 783 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
770 ClientSocketPool::kMaxConnectRetryIntervalMs)); 784 ClientSocketPool::kMaxConnectRetryIntervalMs));
(...skipping 28 matching lines...) Expand all
799 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET 813 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET
800 }; 814 };
801 815
802 client_socket_factory_.set_client_socket_types(case_types, 2); 816 client_socket_factory_.set_client_socket_types(case_types, 2);
803 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5)); 817 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5));
804 818
805 EXPECT_EQ(0, pool_.IdleSocketCount()); 819 EXPECT_EQ(0, pool_.IdleSocketCount());
806 820
807 TestCompletionCallback callback; 821 TestCompletionCallback callback;
808 ClientSocketHandle handle; 822 ClientSocketHandle handle;
809 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 823 int rv =
810 BoundNetLog()); 824 handle.Init("b", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
825 callback.callback(), &pool_, BoundNetLog());
811 EXPECT_EQ(ERR_IO_PENDING, rv); 826 EXPECT_EQ(ERR_IO_PENDING, rv);
812 EXPECT_FALSE(handle.is_initialized()); 827 EXPECT_FALSE(handle.is_initialized());
813 EXPECT_FALSE(handle.socket()); 828 EXPECT_FALSE(handle.socket());
814 829
815 // Create the first socket, set the timer. 830 // Create the first socket, set the timer.
816 base::MessageLoop::current()->RunUntilIdle(); 831 base::MessageLoop::current()->RunUntilIdle();
817 832
818 // Wait for the backup socket timer to fire. 833 // Wait for the backup socket timer to fire.
819 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 834 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
820 ClientSocketPool::kMaxConnectRetryIntervalMs)); 835 ClientSocketPool::kMaxConnectRetryIntervalMs));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; 871 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET};
857 872
858 client_socket_factory_.set_client_socket_types(case_types, 2); 873 client_socket_factory_.set_client_socket_types(case_types, 2);
859 874
860 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 875 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
861 host_resolver_->rules() 876 host_resolver_->rules()
862 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 877 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
863 878
864 TestCompletionCallback callback; 879 TestCompletionCallback callback;
865 ClientSocketHandle handle; 880 ClientSocketHandle handle;
866 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 881 int rv =
867 BoundNetLog()); 882 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
883 callback.callback(), &pool, BoundNetLog());
868 EXPECT_EQ(ERR_IO_PENDING, rv); 884 EXPECT_EQ(ERR_IO_PENDING, rv);
869 EXPECT_FALSE(handle.is_initialized()); 885 EXPECT_FALSE(handle.is_initialized());
870 EXPECT_FALSE(handle.socket()); 886 EXPECT_FALSE(handle.socket());
871 887
872 EXPECT_EQ(OK, callback.WaitForResult()); 888 EXPECT_EQ(OK, callback.WaitForResult());
873 EXPECT_TRUE(handle.is_initialized()); 889 EXPECT_TRUE(handle.is_initialized());
874 EXPECT_TRUE(handle.socket()); 890 EXPECT_TRUE(handle.socket());
875 IPEndPoint endpoint; 891 IPEndPoint endpoint;
876 handle.socket()->GetLocalAddress(&endpoint); 892 handle.socket()->GetLocalAddress(&endpoint);
877 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 893 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
(...skipping 30 matching lines...) Expand all
908 client_socket_factory_.set_client_socket_types(case_types, 2); 924 client_socket_factory_.set_client_socket_types(case_types, 2);
909 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( 925 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds(
910 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50)); 926 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50));
911 927
912 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 928 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
913 host_resolver_->rules() 929 host_resolver_->rules()
914 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 930 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
915 931
916 TestCompletionCallback callback; 932 TestCompletionCallback callback;
917 ClientSocketHandle handle; 933 ClientSocketHandle handle;
918 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 934 int rv =
919 BoundNetLog()); 935 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
936 callback.callback(), &pool, BoundNetLog());
920 EXPECT_EQ(ERR_IO_PENDING, rv); 937 EXPECT_EQ(ERR_IO_PENDING, rv);
921 EXPECT_FALSE(handle.is_initialized()); 938 EXPECT_FALSE(handle.is_initialized());
922 EXPECT_FALSE(handle.socket()); 939 EXPECT_FALSE(handle.socket());
923 940
924 EXPECT_EQ(OK, callback.WaitForResult()); 941 EXPECT_EQ(OK, callback.WaitForResult());
925 EXPECT_TRUE(handle.is_initialized()); 942 EXPECT_TRUE(handle.is_initialized());
926 EXPECT_TRUE(handle.socket()); 943 EXPECT_TRUE(handle.socket());
927 IPEndPoint endpoint; 944 IPEndPoint endpoint;
928 handle.socket()->GetLocalAddress(&endpoint); 945 handle.socket()->GetLocalAddress(&endpoint);
929 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 946 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
(...skipping 20 matching lines...) Expand all
950 967
951 client_socket_factory_.set_default_client_socket_type( 968 client_socket_factory_.set_default_client_socket_type(
952 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 969 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
953 970
954 // Resolve an AddressList with only IPv6 addresses. 971 // Resolve an AddressList with only IPv6 addresses.
955 host_resolver_->rules() 972 host_resolver_->rules()
956 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); 973 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string());
957 974
958 TestCompletionCallback callback; 975 TestCompletionCallback callback;
959 ClientSocketHandle handle; 976 ClientSocketHandle handle;
960 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 977 int rv =
961 BoundNetLog()); 978 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
979 callback.callback(), &pool, BoundNetLog());
962 EXPECT_EQ(ERR_IO_PENDING, rv); 980 EXPECT_EQ(ERR_IO_PENDING, rv);
963 EXPECT_FALSE(handle.is_initialized()); 981 EXPECT_FALSE(handle.is_initialized());
964 EXPECT_FALSE(handle.socket()); 982 EXPECT_FALSE(handle.socket());
965 983
966 EXPECT_EQ(OK, callback.WaitForResult()); 984 EXPECT_EQ(OK, callback.WaitForResult());
967 EXPECT_TRUE(handle.is_initialized()); 985 EXPECT_TRUE(handle.is_initialized());
968 EXPECT_TRUE(handle.socket()); 986 EXPECT_TRUE(handle.socket());
969 IPEndPoint endpoint; 987 IPEndPoint endpoint;
970 handle.socket()->GetLocalAddress(&endpoint); 988 handle.socket()->GetLocalAddress(&endpoint);
971 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 989 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
(...skipping 11 matching lines...) Expand all
983 NULL); 1001 NULL);
984 1002
985 client_socket_factory_.set_default_client_socket_type( 1003 client_socket_factory_.set_default_client_socket_type(
986 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 1004 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
987 1005
988 // Resolve an AddressList with only IPv4 addresses. 1006 // Resolve an AddressList with only IPv4 addresses.
989 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); 1007 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string());
990 1008
991 TestCompletionCallback callback; 1009 TestCompletionCallback callback;
992 ClientSocketHandle handle; 1010 ClientSocketHandle handle;
993 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 1011 int rv =
994 BoundNetLog()); 1012 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
1013 callback.callback(), &pool, BoundNetLog());
995 EXPECT_EQ(ERR_IO_PENDING, rv); 1014 EXPECT_EQ(ERR_IO_PENDING, rv);
996 EXPECT_FALSE(handle.is_initialized()); 1015 EXPECT_FALSE(handle.is_initialized());
997 EXPECT_FALSE(handle.socket()); 1016 EXPECT_FALSE(handle.socket());
998 1017
999 EXPECT_EQ(OK, callback.WaitForResult()); 1018 EXPECT_EQ(OK, callback.WaitForResult());
1000 EXPECT_TRUE(handle.is_initialized()); 1019 EXPECT_TRUE(handle.is_initialized());
1001 EXPECT_TRUE(handle.socket()); 1020 EXPECT_TRUE(handle.socket());
1002 IPEndPoint endpoint; 1021 IPEndPoint endpoint;
1003 handle.socket()->GetLocalAddress(&endpoint); 1022 handle.socket()->GetLocalAddress(&endpoint);
1004 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 1023 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
(...skipping 13 matching lines...) Expand all
1018 NULL); 1037 NULL);
1019 client_socket_factory_.set_default_client_socket_type( 1038 client_socket_factory_.set_default_client_socket_type(
1020 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 1039 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
1021 // Resolve an AddressList with only IPv4 addresses. 1040 // Resolve an AddressList with only IPv4 addresses.
1022 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); 1041 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string());
1023 1042
1024 TestCompletionCallback callback; 1043 TestCompletionCallback callback;
1025 ClientSocketHandle handle; 1044 ClientSocketHandle handle;
1026 // Enable TCP FastOpen in TransportSocketParams. 1045 // Enable TCP FastOpen in TransportSocketParams.
1027 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1046 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1028 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1047 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED,
1048 callback.callback(), &pool, BoundNetLog());
1029 EXPECT_EQ(OK, callback.WaitForResult()); 1049 EXPECT_EQ(OK, callback.WaitForResult());
1030 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); 1050 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen());
1031 } 1051 }
1032 1052
1033 // Test that if TCP FastOpen is enabled, it is set on the socket 1053 // Test that if TCP FastOpen is enabled, it is set on the socket
1034 // when we have only IPv6 addresses. 1054 // when we have only IPv6 addresses.
1035 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) { 1055 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) {
1036 // Create a pool without backup jobs. 1056 // Create a pool without backup jobs.
1037 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); 1057 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false);
1038 TransportClientSocketPool pool(kMaxSockets, 1058 TransportClientSocketPool pool(kMaxSockets,
1039 kMaxSocketsPerGroup, 1059 kMaxSocketsPerGroup,
1040 host_resolver_.get(), 1060 host_resolver_.get(),
1041 &client_socket_factory_, 1061 &client_socket_factory_,
1042 NULL); 1062 NULL);
1043 client_socket_factory_.set_default_client_socket_type( 1063 client_socket_factory_.set_default_client_socket_type(
1044 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 1064 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
1045 // Resolve an AddressList with only IPv6 addresses. 1065 // Resolve an AddressList with only IPv6 addresses.
1046 host_resolver_->rules() 1066 host_resolver_->rules()
1047 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); 1067 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string());
1048 1068
1049 TestCompletionCallback callback; 1069 TestCompletionCallback callback;
1050 ClientSocketHandle handle; 1070 ClientSocketHandle handle;
1051 // Enable TCP FastOpen in TransportSocketParams. 1071 // Enable TCP FastOpen in TransportSocketParams.
1052 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1072 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1053 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1073 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED,
1074 callback.callback(), &pool, BoundNetLog());
1054 EXPECT_EQ(OK, callback.WaitForResult()); 1075 EXPECT_EQ(OK, callback.WaitForResult());
1055 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); 1076 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen());
1056 } 1077 }
1057 1078
1058 // Test that if TCP FastOpen is enabled, it does not do anything when there 1079 // 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 1080 // 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. 1081 // when the IPv6 connect fails and the IPv4 one succeeds.
1061 TEST_F(TransportClientSocketPoolTest, 1082 TEST_F(TransportClientSocketPoolTest,
1062 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) { 1083 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) {
1063 // Create a pool without backup jobs. 1084 // Create a pool without backup jobs.
(...skipping 12 matching lines...) Expand all
1076 }; 1097 };
1077 client_socket_factory_.set_client_socket_types(case_types, 2); 1098 client_socket_factory_.set_client_socket_types(case_types, 2);
1078 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 1099 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
1079 host_resolver_->rules() 1100 host_resolver_->rules()
1080 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 1101 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
1081 1102
1082 TestCompletionCallback callback; 1103 TestCompletionCallback callback;
1083 ClientSocketHandle handle; 1104 ClientSocketHandle handle;
1084 // Enable TCP FastOpen in TransportSocketParams. 1105 // Enable TCP FastOpen in TransportSocketParams.
1085 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1106 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1086 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1107 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED,
1108 callback.callback(), &pool, BoundNetLog());
1087 EXPECT_EQ(OK, callback.WaitForResult()); 1109 EXPECT_EQ(OK, callback.WaitForResult());
1088 // Verify that the socket used is connected to the fallback IPv4 address. 1110 // Verify that the socket used is connected to the fallback IPv4 address.
1089 IPEndPoint endpoint; 1111 IPEndPoint endpoint;
1090 handle.socket()->GetLocalAddress(&endpoint); 1112 handle.socket()->GetLocalAddress(&endpoint);
1091 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 1113 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
1092 EXPECT_EQ(2, client_socket_factory_.allocation_count()); 1114 EXPECT_EQ(2, client_socket_factory_.allocation_count());
1093 // Verify that TCP FastOpen was not turned on for the socket. 1115 // Verify that TCP FastOpen was not turned on for the socket.
1094 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); 1116 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen());
1095 } 1117 }
1096 1118
(...skipping 18 matching lines...) Expand all
1115 }; 1137 };
1116 client_socket_factory_.set_client_socket_types(case_types, 2); 1138 client_socket_factory_.set_client_socket_types(case_types, 2);
1117 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 1139 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
1118 host_resolver_->rules() 1140 host_resolver_->rules()
1119 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 1141 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string());
1120 1142
1121 TestCompletionCallback callback; 1143 TestCompletionCallback callback;
1122 ClientSocketHandle handle; 1144 ClientSocketHandle handle;
1123 // Enable TCP FastOpen in TransportSocketParams. 1145 // Enable TCP FastOpen in TransportSocketParams.
1124 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); 1146 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen();
1125 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); 1147 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED,
1148 callback.callback(), &pool, BoundNetLog());
1126 EXPECT_EQ(OK, callback.WaitForResult()); 1149 EXPECT_EQ(OK, callback.WaitForResult());
1127 // Verify that the socket used is connected to the IPv6 address. 1150 // Verify that the socket used is connected to the IPv6 address.
1128 IPEndPoint endpoint; 1151 IPEndPoint endpoint;
1129 handle.socket()->GetLocalAddress(&endpoint); 1152 handle.socket()->GetLocalAddress(&endpoint);
1130 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 1153 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
1131 EXPECT_EQ(1, client_socket_factory_.allocation_count()); 1154 EXPECT_EQ(1, client_socket_factory_.allocation_count());
1132 // Verify that TCP FastOpen was not turned on for the socket. 1155 // Verify that TCP FastOpen was not turned on for the socket.
1133 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); 1156 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen());
1134 } 1157 }
1135 1158
1136 } // namespace 1159 } // namespace
1137 1160
1138 } // namespace net 1161 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/transport_client_socket_pool.cc ('k') | net/socket/websocket_transport_client_socket_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698