| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 Loading... |
| 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::IgnoreLimits::DISABLED, |
| 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 |
| OLD | NEW |