| 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/socks_client_socket_pool.h" | 5 #include "net/socket/socks_client_socket_pool.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "net/base/load_timing_info.h" | 10 #include "net/base/load_timing_info.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 // None of these tests use a NetLog. | 34 // None of these tests use a NetLog. |
| 35 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 35 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 36 | 36 |
| 37 EXPECT_FALSE(load_timing_info.socket_reused); | 37 EXPECT_FALSE(load_timing_info.socket_reused); |
| 38 | 38 |
| 39 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, | 39 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
| 40 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 40 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 41 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); | 41 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); |
| 42 } | 42 } |
| 43 | 43 |
| 44 | |
| 45 scoped_refptr<TransportSocketParams> CreateProxyHostParams() { | 44 scoped_refptr<TransportSocketParams> CreateProxyHostParams() { |
| 46 return new TransportSocketParams( | 45 return new TransportSocketParams( |
| 47 HostPortPair("proxy", 80), false, false, | 46 HostPortPair("proxy", 80), false, false, OnHostResolutionCallback()); |
| 48 OnHostResolutionCallback()); | |
| 49 } | 47 } |
| 50 | 48 |
| 51 scoped_refptr<SOCKSSocketParams> CreateSOCKSv4Params() { | 49 scoped_refptr<SOCKSSocketParams> CreateSOCKSv4Params() { |
| 52 return new SOCKSSocketParams( | 50 return new SOCKSSocketParams( |
| 53 CreateProxyHostParams(), false /* socks_v5 */, | 51 CreateProxyHostParams(), false /* socks_v5 */, HostPortPair("host", 80)); |
| 54 HostPortPair("host", 80)); | |
| 55 } | 52 } |
| 56 | 53 |
| 57 scoped_refptr<SOCKSSocketParams> CreateSOCKSv5Params() { | 54 scoped_refptr<SOCKSSocketParams> CreateSOCKSv5Params() { |
| 58 return new SOCKSSocketParams( | 55 return new SOCKSSocketParams( |
| 59 CreateProxyHostParams(), true /* socks_v5 */, | 56 CreateProxyHostParams(), true /* socks_v5 */, HostPortPair("host", 80)); |
| 60 HostPortPair("host", 80)); | |
| 61 } | 57 } |
| 62 | 58 |
| 63 class SOCKSClientSocketPoolTest : public testing::Test { | 59 class SOCKSClientSocketPoolTest : public testing::Test { |
| 64 protected: | 60 protected: |
| 65 class SOCKS5MockData { | 61 class SOCKS5MockData { |
| 66 public: | 62 public: |
| 67 explicit SOCKS5MockData(IoMode mode) { | 63 explicit SOCKS5MockData(IoMode mode) { |
| 68 writes_.reset(new MockWrite[3]); | 64 writes_.reset(new MockWrite[3]); |
| 69 writes_[0] = MockWrite(mode, kSOCKS5GreetRequest, | 65 writes_[0] = |
| 70 kSOCKS5GreetRequestLength); | 66 MockWrite(mode, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength); |
| 71 writes_[1] = MockWrite(mode, kSOCKS5OkRequest, kSOCKS5OkRequestLength); | 67 writes_[1] = MockWrite(mode, kSOCKS5OkRequest, kSOCKS5OkRequestLength); |
| 72 writes_[2] = MockWrite(mode, 0); | 68 writes_[2] = MockWrite(mode, 0); |
| 73 | 69 |
| 74 reads_.reset(new MockRead[3]); | 70 reads_.reset(new MockRead[3]); |
| 75 reads_[0] = MockRead(mode, kSOCKS5GreetResponse, | 71 reads_[0] = |
| 76 kSOCKS5GreetResponseLength); | 72 MockRead(mode, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength); |
| 77 reads_[1] = MockRead(mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength); | 73 reads_[1] = MockRead(mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength); |
| 78 reads_[2] = MockRead(mode, 0); | 74 reads_[2] = MockRead(mode, 0); |
| 79 | 75 |
| 80 data_.reset(new StaticSocketDataProvider(reads_.get(), 3, | 76 data_.reset( |
| 81 writes_.get(), 3)); | 77 new StaticSocketDataProvider(reads_.get(), 3, writes_.get(), 3)); |
| 82 } | 78 } |
| 83 | 79 |
| 84 SocketDataProvider* data_provider() { return data_.get(); } | 80 SocketDataProvider* data_provider() { return data_.get(); } |
| 85 | 81 |
| 86 private: | 82 private: |
| 87 scoped_ptr<StaticSocketDataProvider> data_; | 83 scoped_ptr<StaticSocketDataProvider> data_; |
| 88 scoped_ptr<MockWrite[]> writes_; | 84 scoped_ptr<MockWrite[]> writes_; |
| 89 scoped_ptr<MockRead[]> reads_; | 85 scoped_ptr<MockRead[]> reads_; |
| 90 }; | 86 }; |
| 91 | 87 |
| 92 SOCKSClientSocketPoolTest() | 88 SOCKSClientSocketPoolTest() |
| 93 : transport_histograms_("MockTCP"), | 89 : transport_histograms_("MockTCP"), |
| 94 transport_socket_pool_( | 90 transport_socket_pool_(kMaxSockets, |
| 95 kMaxSockets, kMaxSocketsPerGroup, | 91 kMaxSocketsPerGroup, |
| 96 &transport_histograms_, | 92 &transport_histograms_, |
| 97 &transport_client_socket_factory_), | 93 &transport_client_socket_factory_), |
| 98 socks_histograms_("SOCKSUnitTest"), | 94 socks_histograms_("SOCKSUnitTest"), |
| 99 pool_(kMaxSockets, kMaxSocketsPerGroup, | 95 pool_(kMaxSockets, |
| 96 kMaxSocketsPerGroup, |
| 100 &socks_histograms_, | 97 &socks_histograms_, |
| 101 &host_resolver_, | 98 &host_resolver_, |
| 102 &transport_socket_pool_, | 99 &transport_socket_pool_, |
| 103 NULL) { | 100 NULL) {} |
| 104 } | |
| 105 | 101 |
| 106 virtual ~SOCKSClientSocketPoolTest() {} | 102 virtual ~SOCKSClientSocketPoolTest() {} |
| 107 | 103 |
| 108 int StartRequestV5(const std::string& group_name, RequestPriority priority) { | 104 int StartRequestV5(const std::string& group_name, RequestPriority priority) { |
| 109 return test_base_.StartRequestUsingPool( | 105 return test_base_.StartRequestUsingPool( |
| 110 &pool_, group_name, priority, CreateSOCKSv5Params()); | 106 &pool_, group_name, priority, CreateSOCKSv5Params()); |
| 111 } | 107 } |
| 112 | 108 |
| 113 int GetOrderOfRequest(size_t index) const { | 109 int GetOrderOfRequest(size_t index) const { |
| 114 return test_base_.GetOrderOfRequest(index); | 110 return test_base_.GetOrderOfRequest(index); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 125 SOCKSClientSocketPool pool_; | 121 SOCKSClientSocketPool pool_; |
| 126 ClientSocketPoolTest test_base_; | 122 ClientSocketPoolTest test_base_; |
| 127 }; | 123 }; |
| 128 | 124 |
| 129 TEST_F(SOCKSClientSocketPoolTest, Simple) { | 125 TEST_F(SOCKSClientSocketPoolTest, Simple) { |
| 130 SOCKS5MockData data(SYNCHRONOUS); | 126 SOCKS5MockData data(SYNCHRONOUS); |
| 131 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 127 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 132 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); | 128 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
| 133 | 129 |
| 134 ClientSocketHandle handle; | 130 ClientSocketHandle handle; |
| 135 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), | 131 int rv = handle.Init("a", |
| 136 &pool_, BoundNetLog()); | 132 CreateSOCKSv5Params(), |
| 133 LOW, |
| 134 CompletionCallback(), |
| 135 &pool_, |
| 136 BoundNetLog()); |
| 137 EXPECT_EQ(OK, rv); | 137 EXPECT_EQ(OK, rv); |
| 138 EXPECT_TRUE(handle.is_initialized()); | 138 EXPECT_TRUE(handle.is_initialized()); |
| 139 EXPECT_TRUE(handle.socket()); | 139 EXPECT_TRUE(handle.socket()); |
| 140 TestLoadTimingInfo(handle); | 140 TestLoadTimingInfo(handle); |
| 141 } | 141 } |
| 142 | 142 |
| 143 // Make sure that SOCKSConnectJob passes on its priority to its | 143 // Make sure that SOCKSConnectJob passes on its priority to its |
| 144 // socket request on Init. | 144 // socket request on Init. |
| 145 TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) { | 145 TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
| 146 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 146 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
| 147 RequestPriority priority = static_cast<RequestPriority>(i); | 147 RequestPriority priority = static_cast<RequestPriority>(i); |
| 148 SOCKS5MockData data(SYNCHRONOUS); | 148 SOCKS5MockData data(SYNCHRONOUS); |
| 149 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 149 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 150 transport_client_socket_factory_.AddSocketDataProvider( | 150 transport_client_socket_factory_.AddSocketDataProvider( |
| 151 data.data_provider()); | 151 data.data_provider()); |
| 152 | 152 |
| 153 ClientSocketHandle handle; | 153 ClientSocketHandle handle; |
| 154 EXPECT_EQ(OK, | 154 EXPECT_EQ(OK, |
| 155 handle.Init("a", CreateSOCKSv5Params(), priority, | 155 handle.Init("a", |
| 156 CompletionCallback(), &pool_, BoundNetLog())); | 156 CreateSOCKSv5Params(), |
| 157 priority, |
| 158 CompletionCallback(), |
| 159 &pool_, |
| 160 BoundNetLog())); |
| 157 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 161 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
| 158 handle.socket()->Disconnect(); | 162 handle.socket()->Disconnect(); |
| 159 } | 163 } |
| 160 } | 164 } |
| 161 | 165 |
| 162 // Make sure that SOCKSConnectJob passes on its priority to its | 166 // Make sure that SOCKSConnectJob passes on its priority to its |
| 163 // HostResolver request (for non-SOCKS5) on Init. | 167 // HostResolver request (for non-SOCKS5) on Init. |
| 164 TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) { | 168 TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) { |
| 165 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 169 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
| 166 RequestPriority priority = static_cast<RequestPriority>(i); | 170 RequestPriority priority = static_cast<RequestPriority>(i); |
| 167 SOCKS5MockData data(SYNCHRONOUS); | 171 SOCKS5MockData data(SYNCHRONOUS); |
| 168 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 172 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 169 transport_client_socket_factory_.AddSocketDataProvider( | 173 transport_client_socket_factory_.AddSocketDataProvider( |
| 170 data.data_provider()); | 174 data.data_provider()); |
| 171 | 175 |
| 172 ClientSocketHandle handle; | 176 ClientSocketHandle handle; |
| 173 EXPECT_EQ(ERR_IO_PENDING, | 177 EXPECT_EQ(ERR_IO_PENDING, |
| 174 handle.Init("a", CreateSOCKSv4Params(), priority, | 178 handle.Init("a", |
| 175 CompletionCallback(), &pool_, BoundNetLog())); | 179 CreateSOCKSv4Params(), |
| 180 priority, |
| 181 CompletionCallback(), |
| 182 &pool_, |
| 183 BoundNetLog())); |
| 176 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 184 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
| 177 EXPECT_EQ(priority, host_resolver_.last_request_priority()); | 185 EXPECT_EQ(priority, host_resolver_.last_request_priority()); |
| 178 EXPECT_TRUE(handle.socket() == NULL); | 186 EXPECT_TRUE(handle.socket() == NULL); |
| 179 } | 187 } |
| 180 } | 188 } |
| 181 | 189 |
| 182 TEST_F(SOCKSClientSocketPoolTest, Async) { | 190 TEST_F(SOCKSClientSocketPoolTest, Async) { |
| 183 SOCKS5MockData data(ASYNC); | 191 SOCKS5MockData data(ASYNC); |
| 184 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); | 192 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
| 185 | 193 |
| 186 TestCompletionCallback callback; | 194 TestCompletionCallback callback; |
| 187 ClientSocketHandle handle; | 195 ClientSocketHandle handle; |
| 188 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), | 196 int rv = handle.Init("a", |
| 189 &pool_, BoundNetLog()); | 197 CreateSOCKSv5Params(), |
| 198 LOW, |
| 199 callback.callback(), |
| 200 &pool_, |
| 201 BoundNetLog()); |
| 190 EXPECT_EQ(ERR_IO_PENDING, rv); | 202 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 191 EXPECT_FALSE(handle.is_initialized()); | 203 EXPECT_FALSE(handle.is_initialized()); |
| 192 EXPECT_FALSE(handle.socket()); | 204 EXPECT_FALSE(handle.socket()); |
| 193 | 205 |
| 194 EXPECT_EQ(OK, callback.WaitForResult()); | 206 EXPECT_EQ(OK, callback.WaitForResult()); |
| 195 EXPECT_TRUE(handle.is_initialized()); | 207 EXPECT_TRUE(handle.is_initialized()); |
| 196 EXPECT_TRUE(handle.socket()); | 208 EXPECT_TRUE(handle.socket()); |
| 197 TestLoadTimingInfo(handle); | 209 TestLoadTimingInfo(handle); |
| 198 } | 210 } |
| 199 | 211 |
| 200 TEST_F(SOCKSClientSocketPoolTest, TransportConnectError) { | 212 TEST_F(SOCKSClientSocketPoolTest, TransportConnectError) { |
| 201 StaticSocketDataProvider socket_data; | 213 StaticSocketDataProvider socket_data; |
| 202 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, | 214 socket_data.set_connect_data( |
| 203 ERR_CONNECTION_REFUSED)); | 215 MockConnect(SYNCHRONOUS, ERR_CONNECTION_REFUSED)); |
| 204 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 216 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 205 | 217 |
| 206 ClientSocketHandle handle; | 218 ClientSocketHandle handle; |
| 207 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), | 219 int rv = handle.Init("a", |
| 208 &pool_, BoundNetLog()); | 220 CreateSOCKSv5Params(), |
| 221 LOW, |
| 222 CompletionCallback(), |
| 223 &pool_, |
| 224 BoundNetLog()); |
| 209 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 225 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
| 210 EXPECT_FALSE(handle.is_initialized()); | 226 EXPECT_FALSE(handle.is_initialized()); |
| 211 EXPECT_FALSE(handle.socket()); | 227 EXPECT_FALSE(handle.socket()); |
| 212 } | 228 } |
| 213 | 229 |
| 214 TEST_F(SOCKSClientSocketPoolTest, AsyncTransportConnectError) { | 230 TEST_F(SOCKSClientSocketPoolTest, AsyncTransportConnectError) { |
| 215 StaticSocketDataProvider socket_data; | 231 StaticSocketDataProvider socket_data; |
| 216 socket_data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); | 232 socket_data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); |
| 217 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 233 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 218 | 234 |
| 219 TestCompletionCallback callback; | 235 TestCompletionCallback callback; |
| 220 ClientSocketHandle handle; | 236 ClientSocketHandle handle; |
| 221 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), | 237 int rv = handle.Init("a", |
| 222 &pool_, BoundNetLog()); | 238 CreateSOCKSv5Params(), |
| 239 LOW, |
| 240 callback.callback(), |
| 241 &pool_, |
| 242 BoundNetLog()); |
| 223 EXPECT_EQ(ERR_IO_PENDING, rv); | 243 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 224 EXPECT_FALSE(handle.is_initialized()); | 244 EXPECT_FALSE(handle.is_initialized()); |
| 225 EXPECT_FALSE(handle.socket()); | 245 EXPECT_FALSE(handle.socket()); |
| 226 | 246 |
| 227 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); | 247 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); |
| 228 EXPECT_FALSE(handle.is_initialized()); | 248 EXPECT_FALSE(handle.is_initialized()); |
| 229 EXPECT_FALSE(handle.socket()); | 249 EXPECT_FALSE(handle.socket()); |
| 230 } | 250 } |
| 231 | 251 |
| 232 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { | 252 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { |
| 233 MockRead failed_read[] = { | 253 MockRead failed_read[] = { |
| 234 MockRead(SYNCHRONOUS, 0), | 254 MockRead(SYNCHRONOUS, 0), |
| 235 }; | 255 }; |
| 236 StaticSocketDataProvider socket_data( | 256 StaticSocketDataProvider socket_data( |
| 237 failed_read, arraysize(failed_read), NULL, 0); | 257 failed_read, arraysize(failed_read), NULL, 0); |
| 238 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 258 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 239 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 259 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 240 | 260 |
| 241 ClientSocketHandle handle; | 261 ClientSocketHandle handle; |
| 242 EXPECT_EQ(0, transport_socket_pool_.release_count()); | 262 EXPECT_EQ(0, transport_socket_pool_.release_count()); |
| 243 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), | 263 int rv = handle.Init("a", |
| 244 &pool_, BoundNetLog()); | 264 CreateSOCKSv5Params(), |
| 265 LOW, |
| 266 CompletionCallback(), |
| 267 &pool_, |
| 268 BoundNetLog()); |
| 245 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); | 269 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); |
| 246 EXPECT_FALSE(handle.is_initialized()); | 270 EXPECT_FALSE(handle.is_initialized()); |
| 247 EXPECT_FALSE(handle.socket()); | 271 EXPECT_FALSE(handle.socket()); |
| 248 EXPECT_EQ(1, transport_socket_pool_.release_count()); | 272 EXPECT_EQ(1, transport_socket_pool_.release_count()); |
| 249 } | 273 } |
| 250 | 274 |
| 251 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { | 275 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { |
| 252 MockRead failed_read[] = { | 276 MockRead failed_read[] = { |
| 253 MockRead(ASYNC, 0), | 277 MockRead(ASYNC, 0), |
| 254 }; | 278 }; |
| 255 StaticSocketDataProvider socket_data( | 279 StaticSocketDataProvider socket_data( |
| 256 failed_read, arraysize(failed_read), NULL, 0); | 280 failed_read, arraysize(failed_read), NULL, 0); |
| 257 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 281 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 258 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 282 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 259 | 283 |
| 260 TestCompletionCallback callback; | 284 TestCompletionCallback callback; |
| 261 ClientSocketHandle handle; | 285 ClientSocketHandle handle; |
| 262 EXPECT_EQ(0, transport_socket_pool_.release_count()); | 286 EXPECT_EQ(0, transport_socket_pool_.release_count()); |
| 263 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), | 287 int rv = handle.Init("a", |
| 264 &pool_, BoundNetLog()); | 288 CreateSOCKSv5Params(), |
| 289 LOW, |
| 290 callback.callback(), |
| 291 &pool_, |
| 292 BoundNetLog()); |
| 265 EXPECT_EQ(ERR_IO_PENDING, rv); | 293 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 266 EXPECT_FALSE(handle.is_initialized()); | 294 EXPECT_FALSE(handle.is_initialized()); |
| 267 EXPECT_FALSE(handle.socket()); | 295 EXPECT_FALSE(handle.socket()); |
| 268 | 296 |
| 269 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, callback.WaitForResult()); | 297 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, callback.WaitForResult()); |
| 270 EXPECT_FALSE(handle.is_initialized()); | 298 EXPECT_FALSE(handle.is_initialized()); |
| 271 EXPECT_FALSE(handle.socket()); | 299 EXPECT_FALSE(handle.socket()); |
| 272 EXPECT_EQ(1, transport_socket_pool_.release_count()); | 300 EXPECT_EQ(1, transport_socket_pool_.release_count()); |
| 273 } | 301 } |
| 274 | 302 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 | 367 |
| 340 (*requests())[0]->handle()->Reset(); | 368 (*requests())[0]->handle()->Reset(); |
| 341 (*requests())[1]->handle()->Reset(); | 369 (*requests())[1]->handle()->Reset(); |
| 342 } | 370 } |
| 343 | 371 |
| 344 // It would be nice to also test the timeouts in SOCKSClientSocketPool. | 372 // It would be nice to also test the timeouts in SOCKSClientSocketPool. |
| 345 | 373 |
| 346 } // namespace | 374 } // namespace |
| 347 | 375 |
| 348 } // namespace net | 376 } // namespace net |
| OLD | NEW |