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/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 const int kMaxSockets = 32; | 33 const int kMaxSockets = 32; |
34 const int kMaxSocketsPerGroup = 6; | 34 const int kMaxSocketsPerGroup = 6; |
35 const RequestPriority kDefaultPriority = LOW; | 35 const RequestPriority kDefaultPriority = LOW; |
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(HostPortPair("www.google.com", 80), | 43 new TransportSocketParams( |
44 false, false, | 44 HostPortPair("www.google.com", 80), |
45 OnHostResolutionCallback())), | 45 false, |
| 46 false, |
| 47 OnHostResolutionCallback(), |
| 48 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), |
46 histograms_(new ClientSocketPoolHistograms("TCPUnitTest")), | 49 histograms_(new ClientSocketPoolHistograms("TCPUnitTest")), |
47 host_resolver_(new MockHostResolver), | 50 host_resolver_(new MockHostResolver), |
48 client_socket_factory_(&net_log_), | 51 client_socket_factory_(&net_log_), |
49 pool_(kMaxSockets, | 52 pool_(kMaxSockets, |
50 kMaxSocketsPerGroup, | 53 kMaxSocketsPerGroup, |
51 histograms_.get(), | 54 histograms_.get(), |
52 host_resolver_.get(), | 55 host_resolver_.get(), |
53 &client_socket_factory_, | 56 &client_socket_factory_, |
54 NULL) { | 57 NULL) { |
55 } | 58 } |
56 | 59 |
57 virtual ~TransportClientSocketPoolTest() { | 60 virtual ~TransportClientSocketPoolTest() { |
58 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( | 61 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( |
59 connect_backup_jobs_enabled_); | 62 connect_backup_jobs_enabled_); |
60 } | 63 } |
61 | 64 |
62 int StartRequest(const std::string& group_name, RequestPriority priority) { | 65 int StartRequest(const std::string& group_name, RequestPriority priority) { |
63 scoped_refptr<TransportSocketParams> params(new TransportSocketParams( | 66 scoped_refptr<TransportSocketParams> params(new TransportSocketParams( |
64 HostPortPair("www.google.com", 80), false, false, | 67 HostPortPair("www.google.com", 80), false, false, |
65 OnHostResolutionCallback())); | 68 OnHostResolutionCallback(), |
| 69 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
66 return test_base_.StartRequestUsingPool( | 70 return test_base_.StartRequestUsingPool( |
67 &pool_, group_name, priority, params); | 71 &pool_, group_name, priority, params); |
68 } | 72 } |
69 | 73 |
70 int GetOrderOfRequest(size_t index) { | 74 int GetOrderOfRequest(size_t index) { |
71 return test_base_.GetOrderOfRequest(index); | 75 return test_base_.GetOrderOfRequest(index); |
72 } | 76 } |
73 | 77 |
74 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { | 78 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { |
75 return test_base_.ReleaseOneConnection(keep_alive); | 79 return test_base_.ReleaseOneConnection(keep_alive); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 EXPECT_EQ(priority, host_resolver_->last_request_priority()); | 198 EXPECT_EQ(priority, host_resolver_->last_request_priority()); |
195 } | 199 } |
196 } | 200 } |
197 | 201 |
198 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { | 202 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { |
199 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); | 203 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); |
200 TestCompletionCallback callback; | 204 TestCompletionCallback callback; |
201 ClientSocketHandle handle; | 205 ClientSocketHandle handle; |
202 HostPortPair host_port_pair("unresolvable.host.name", 80); | 206 HostPortPair host_port_pair("unresolvable.host.name", 80); |
203 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 207 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
204 host_port_pair, false, false, | 208 host_port_pair, false, false, OnHostResolutionCallback(), |
205 OnHostResolutionCallback())); | 209 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
206 EXPECT_EQ(ERR_IO_PENDING, | 210 EXPECT_EQ(ERR_IO_PENDING, |
207 handle.Init("a", dest, kDefaultPriority, callback.callback(), | 211 handle.Init("a", dest, kDefaultPriority, callback.callback(), |
208 &pool_, BoundNetLog())); | 212 &pool_, BoundNetLog())); |
209 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); | 213 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); |
210 } | 214 } |
211 | 215 |
212 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { | 216 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { |
213 client_socket_factory_.set_default_client_socket_type( | 217 client_socket_factory_.set_default_client_socket_type( |
214 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); | 218 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); |
215 TestCompletionCallback callback; | 219 TestCompletionCallback callback; |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 handle_->socket()->Disconnect(); | 474 handle_->socket()->Disconnect(); |
471 handle_->Reset(); | 475 handle_->Reset(); |
472 { | 476 { |
473 base::MessageLoop::ScopedNestableTaskAllower allow( | 477 base::MessageLoop::ScopedNestableTaskAllower allow( |
474 base::MessageLoop::current()); | 478 base::MessageLoop::current()); |
475 base::MessageLoop::current()->RunUntilIdle(); | 479 base::MessageLoop::current()->RunUntilIdle(); |
476 } | 480 } |
477 within_callback_ = true; | 481 within_callback_ = true; |
478 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 482 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
479 HostPortPair("www.google.com", 80), false, false, | 483 HostPortPair("www.google.com", 80), false, false, |
480 OnHostResolutionCallback())); | 484 OnHostResolutionCallback(), |
| 485 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
481 int rv = handle_->Init("a", dest, LOWEST, callback(), pool_, | 486 int rv = handle_->Init("a", dest, LOWEST, callback(), pool_, |
482 BoundNetLog()); | 487 BoundNetLog()); |
483 EXPECT_EQ(OK, rv); | 488 EXPECT_EQ(OK, rv); |
484 } | 489 } |
485 } | 490 } |
486 | 491 |
487 ClientSocketHandle* const handle_; | 492 ClientSocketHandle* const handle_; |
488 TransportClientSocketPool* const pool_; | 493 TransportClientSocketPool* const pool_; |
489 bool within_callback_; | 494 bool within_callback_; |
490 CompletionCallback callback_; | 495 CompletionCallback callback_; |
491 | 496 |
492 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); | 497 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); |
493 }; | 498 }; |
494 | 499 |
495 TEST_F(TransportClientSocketPoolTest, RequestTwice) { | 500 TEST_F(TransportClientSocketPoolTest, RequestTwice) { |
496 ClientSocketHandle handle; | 501 ClientSocketHandle handle; |
497 RequestSocketCallback callback(&handle, &pool_); | 502 RequestSocketCallback callback(&handle, &pool_); |
498 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 503 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
499 HostPortPair("www.google.com", 80), false, false, | 504 HostPortPair("www.google.com", 80), false, false, |
500 OnHostResolutionCallback())); | 505 OnHostResolutionCallback(), |
| 506 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
501 int rv = handle.Init("a", dest, LOWEST, callback.callback(), &pool_, | 507 int rv = handle.Init("a", dest, LOWEST, callback.callback(), &pool_, |
502 BoundNetLog()); | 508 BoundNetLog()); |
503 ASSERT_EQ(ERR_IO_PENDING, rv); | 509 ASSERT_EQ(ERR_IO_PENDING, rv); |
504 | 510 |
505 // The callback is going to request "www.google.com". We want it to complete | 511 // The callback is going to request "www.google.com". We want it to complete |
506 // synchronously this time. | 512 // synchronously this time. |
507 host_resolver_->set_synchronous_mode(true); | 513 host_resolver_->set_synchronous_mode(true); |
508 | 514 |
509 EXPECT_EQ(OK, callback.WaitForResult()); | 515 EXPECT_EQ(OK, callback.WaitForResult()); |
510 | 516 |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 EXPECT_TRUE(handle.socket()); | 966 EXPECT_TRUE(handle.socket()); |
961 IPEndPoint endpoint; | 967 IPEndPoint endpoint; |
962 handle.socket()->GetLocalAddress(&endpoint); | 968 handle.socket()->GetLocalAddress(&endpoint); |
963 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 969 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); |
964 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 970 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
965 } | 971 } |
966 | 972 |
967 } // namespace | 973 } // namespace |
968 | 974 |
969 } // namespace net | 975 } // namespace net |
OLD | NEW |