| 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/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 }; | 130 }; |
| 131 | 131 |
| 132 TEST_F(SOCKSClientSocketPoolTest, Simple) { | 132 TEST_F(SOCKSClientSocketPoolTest, Simple) { |
| 133 SOCKS5MockData data(SYNCHRONOUS); | 133 SOCKS5MockData data(SYNCHRONOUS); |
| 134 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 134 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 135 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); | 135 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
| 136 | 136 |
| 137 ClientSocketHandle handle; | 137 ClientSocketHandle handle; |
| 138 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, | 138 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, |
| 139 ClientSocketPool::RespectLimits::ENABLED, | 139 ClientSocketPool::RespectLimits::ENABLED, |
| 140 CompletionCallback(), &pool_, BoundNetLog()); | 140 CompletionCallback(), &pool_, NetLogWithSource()); |
| 141 EXPECT_THAT(rv, IsOk()); | 141 EXPECT_THAT(rv, IsOk()); |
| 142 EXPECT_TRUE(handle.is_initialized()); | 142 EXPECT_TRUE(handle.is_initialized()); |
| 143 EXPECT_TRUE(handle.socket()); | 143 EXPECT_TRUE(handle.socket()); |
| 144 TestLoadTimingInfo(handle); | 144 TestLoadTimingInfo(handle); |
| 145 } | 145 } |
| 146 | 146 |
| 147 // Make sure that SOCKSConnectJob passes on its priority to its | 147 // Make sure that SOCKSConnectJob passes on its priority to its |
| 148 // socket request on Init. | 148 // socket request on Init. |
| 149 TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) { | 149 TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
| 150 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 150 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
| 151 RequestPriority priority = static_cast<RequestPriority>(i); | 151 RequestPriority priority = static_cast<RequestPriority>(i); |
| 152 SOCKS5MockData data(SYNCHRONOUS); | 152 SOCKS5MockData data(SYNCHRONOUS); |
| 153 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 153 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 154 transport_client_socket_factory_.AddSocketDataProvider( | 154 transport_client_socket_factory_.AddSocketDataProvider( |
| 155 data.data_provider()); | 155 data.data_provider()); |
| 156 | 156 |
| 157 ClientSocketHandle handle; | 157 ClientSocketHandle handle; |
| 158 EXPECT_EQ(OK, handle.Init("a", CreateSOCKSv5Params(), priority, | 158 EXPECT_EQ(OK, |
| 159 ClientSocketPool::RespectLimits::ENABLED, | 159 handle.Init("a", CreateSOCKSv5Params(), priority, |
| 160 CompletionCallback(), &pool_, BoundNetLog())); | 160 ClientSocketPool::RespectLimits::ENABLED, |
| 161 CompletionCallback(), &pool_, NetLogWithSource())); |
| 161 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 162 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
| 162 handle.socket()->Disconnect(); | 163 handle.socket()->Disconnect(); |
| 163 } | 164 } |
| 164 } | 165 } |
| 165 | 166 |
| 166 // Make sure that SOCKSConnectJob passes on its priority to its | 167 // Make sure that SOCKSConnectJob passes on its priority to its |
| 167 // HostResolver request (for non-SOCKS5) on Init. | 168 // HostResolver request (for non-SOCKS5) on Init. |
| 168 TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) { | 169 TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) { |
| 169 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 170 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
| 170 RequestPriority priority = static_cast<RequestPriority>(i); | 171 RequestPriority priority = static_cast<RequestPriority>(i); |
| 171 SOCKS5MockData data(SYNCHRONOUS); | 172 SOCKS5MockData data(SYNCHRONOUS); |
| 172 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 173 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 173 transport_client_socket_factory_.AddSocketDataProvider( | 174 transport_client_socket_factory_.AddSocketDataProvider( |
| 174 data.data_provider()); | 175 data.data_provider()); |
| 175 | 176 |
| 176 ClientSocketHandle handle; | 177 ClientSocketHandle handle; |
| 177 EXPECT_EQ(ERR_IO_PENDING, | 178 EXPECT_EQ(ERR_IO_PENDING, |
| 178 handle.Init("a", CreateSOCKSv4Params(), priority, | 179 handle.Init("a", CreateSOCKSv4Params(), priority, |
| 179 ClientSocketPool::RespectLimits::ENABLED, | 180 ClientSocketPool::RespectLimits::ENABLED, |
| 180 CompletionCallback(), &pool_, BoundNetLog())); | 181 CompletionCallback(), &pool_, NetLogWithSource())); |
| 181 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 182 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
| 182 EXPECT_EQ(priority, host_resolver_.last_request_priority()); | 183 EXPECT_EQ(priority, host_resolver_.last_request_priority()); |
| 183 EXPECT_TRUE(handle.socket() == NULL); | 184 EXPECT_TRUE(handle.socket() == NULL); |
| 184 } | 185 } |
| 185 } | 186 } |
| 186 | 187 |
| 187 TEST_F(SOCKSClientSocketPoolTest, Async) { | 188 TEST_F(SOCKSClientSocketPoolTest, Async) { |
| 188 SOCKS5MockData data(ASYNC); | 189 SOCKS5MockData data(ASYNC); |
| 189 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); | 190 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
| 190 | 191 |
| 191 TestCompletionCallback callback; | 192 TestCompletionCallback callback; |
| 192 ClientSocketHandle handle; | 193 ClientSocketHandle handle; |
| 193 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, | 194 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, |
| 194 ClientSocketPool::RespectLimits::ENABLED, | 195 ClientSocketPool::RespectLimits::ENABLED, |
| 195 callback.callback(), &pool_, BoundNetLog()); | 196 callback.callback(), &pool_, NetLogWithSource()); |
| 196 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 197 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 197 EXPECT_FALSE(handle.is_initialized()); | 198 EXPECT_FALSE(handle.is_initialized()); |
| 198 EXPECT_FALSE(handle.socket()); | 199 EXPECT_FALSE(handle.socket()); |
| 199 | 200 |
| 200 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 201 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
| 201 EXPECT_TRUE(handle.is_initialized()); | 202 EXPECT_TRUE(handle.is_initialized()); |
| 202 EXPECT_TRUE(handle.socket()); | 203 EXPECT_TRUE(handle.socket()); |
| 203 TestLoadTimingInfo(handle); | 204 TestLoadTimingInfo(handle); |
| 204 } | 205 } |
| 205 | 206 |
| 206 TEST_F(SOCKSClientSocketPoolTest, TransportConnectError) { | 207 TEST_F(SOCKSClientSocketPoolTest, TransportConnectError) { |
| 207 StaticSocketDataProvider socket_data; | 208 StaticSocketDataProvider socket_data; |
| 208 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, | 209 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, |
| 209 ERR_CONNECTION_REFUSED)); | 210 ERR_CONNECTION_REFUSED)); |
| 210 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 211 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 211 | 212 |
| 212 ClientSocketHandle handle; | 213 ClientSocketHandle handle; |
| 213 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, | 214 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, |
| 214 ClientSocketPool::RespectLimits::ENABLED, | 215 ClientSocketPool::RespectLimits::ENABLED, |
| 215 CompletionCallback(), &pool_, BoundNetLog()); | 216 CompletionCallback(), &pool_, NetLogWithSource()); |
| 216 EXPECT_THAT(rv, IsError(ERR_PROXY_CONNECTION_FAILED)); | 217 EXPECT_THAT(rv, IsError(ERR_PROXY_CONNECTION_FAILED)); |
| 217 EXPECT_FALSE(handle.is_initialized()); | 218 EXPECT_FALSE(handle.is_initialized()); |
| 218 EXPECT_FALSE(handle.socket()); | 219 EXPECT_FALSE(handle.socket()); |
| 219 } | 220 } |
| 220 | 221 |
| 221 TEST_F(SOCKSClientSocketPoolTest, AsyncTransportConnectError) { | 222 TEST_F(SOCKSClientSocketPoolTest, AsyncTransportConnectError) { |
| 222 StaticSocketDataProvider socket_data; | 223 StaticSocketDataProvider socket_data; |
| 223 socket_data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); | 224 socket_data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); |
| 224 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 225 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 225 | 226 |
| 226 TestCompletionCallback callback; | 227 TestCompletionCallback callback; |
| 227 ClientSocketHandle handle; | 228 ClientSocketHandle handle; |
| 228 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, | 229 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, |
| 229 ClientSocketPool::RespectLimits::ENABLED, | 230 ClientSocketPool::RespectLimits::ENABLED, |
| 230 callback.callback(), &pool_, BoundNetLog()); | 231 callback.callback(), &pool_, NetLogWithSource()); |
| 231 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 232 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 232 EXPECT_FALSE(handle.is_initialized()); | 233 EXPECT_FALSE(handle.is_initialized()); |
| 233 EXPECT_FALSE(handle.socket()); | 234 EXPECT_FALSE(handle.socket()); |
| 234 | 235 |
| 235 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED)); | 236 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED)); |
| 236 EXPECT_FALSE(handle.is_initialized()); | 237 EXPECT_FALSE(handle.is_initialized()); |
| 237 EXPECT_FALSE(handle.socket()); | 238 EXPECT_FALSE(handle.socket()); |
| 238 } | 239 } |
| 239 | 240 |
| 240 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { | 241 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { |
| 241 MockRead failed_read[] = { | 242 MockRead failed_read[] = { |
| 242 MockRead(SYNCHRONOUS, 0), | 243 MockRead(SYNCHRONOUS, 0), |
| 243 }; | 244 }; |
| 244 StaticSocketDataProvider socket_data( | 245 StaticSocketDataProvider socket_data( |
| 245 failed_read, arraysize(failed_read), NULL, 0); | 246 failed_read, arraysize(failed_read), NULL, 0); |
| 246 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 247 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 247 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 248 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 248 | 249 |
| 249 ClientSocketHandle handle; | 250 ClientSocketHandle handle; |
| 250 EXPECT_EQ(0, transport_socket_pool_.release_count()); | 251 EXPECT_EQ(0, transport_socket_pool_.release_count()); |
| 251 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, | 252 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, |
| 252 ClientSocketPool::RespectLimits::ENABLED, | 253 ClientSocketPool::RespectLimits::ENABLED, |
| 253 CompletionCallback(), &pool_, BoundNetLog()); | 254 CompletionCallback(), &pool_, NetLogWithSource()); |
| 254 EXPECT_THAT(rv, IsError(ERR_SOCKS_CONNECTION_FAILED)); | 255 EXPECT_THAT(rv, IsError(ERR_SOCKS_CONNECTION_FAILED)); |
| 255 EXPECT_FALSE(handle.is_initialized()); | 256 EXPECT_FALSE(handle.is_initialized()); |
| 256 EXPECT_FALSE(handle.socket()); | 257 EXPECT_FALSE(handle.socket()); |
| 257 EXPECT_EQ(1, transport_socket_pool_.release_count()); | 258 EXPECT_EQ(1, transport_socket_pool_.release_count()); |
| 258 } | 259 } |
| 259 | 260 |
| 260 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { | 261 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { |
| 261 MockRead failed_read[] = { | 262 MockRead failed_read[] = { |
| 262 MockRead(ASYNC, 0), | 263 MockRead(ASYNC, 0), |
| 263 }; | 264 }; |
| 264 StaticSocketDataProvider socket_data( | 265 StaticSocketDataProvider socket_data( |
| 265 failed_read, arraysize(failed_read), NULL, 0); | 266 failed_read, arraysize(failed_read), NULL, 0); |
| 266 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 267 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 267 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 268 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
| 268 | 269 |
| 269 TestCompletionCallback callback; | 270 TestCompletionCallback callback; |
| 270 ClientSocketHandle handle; | 271 ClientSocketHandle handle; |
| 271 EXPECT_EQ(0, transport_socket_pool_.release_count()); | 272 EXPECT_EQ(0, transport_socket_pool_.release_count()); |
| 272 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, | 273 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, |
| 273 ClientSocketPool::RespectLimits::ENABLED, | 274 ClientSocketPool::RespectLimits::ENABLED, |
| 274 callback.callback(), &pool_, BoundNetLog()); | 275 callback.callback(), &pool_, NetLogWithSource()); |
| 275 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 276 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 276 EXPECT_FALSE(handle.is_initialized()); | 277 EXPECT_FALSE(handle.is_initialized()); |
| 277 EXPECT_FALSE(handle.socket()); | 278 EXPECT_FALSE(handle.socket()); |
| 278 | 279 |
| 279 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_SOCKS_CONNECTION_FAILED)); | 280 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_SOCKS_CONNECTION_FAILED)); |
| 280 EXPECT_FALSE(handle.is_initialized()); | 281 EXPECT_FALSE(handle.is_initialized()); |
| 281 EXPECT_FALSE(handle.socket()); | 282 EXPECT_FALSE(handle.socket()); |
| 282 EXPECT_EQ(1, transport_socket_pool_.release_count()); | 283 EXPECT_EQ(1, transport_socket_pool_.release_count()); |
| 283 } | 284 } |
| 284 | 285 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 | 350 |
| 350 (*requests())[0]->handle()->Reset(); | 351 (*requests())[0]->handle()->Reset(); |
| 351 (*requests())[1]->handle()->Reset(); | 352 (*requests())[1]->handle()->Reset(); |
| 352 } | 353 } |
| 353 | 354 |
| 354 // It would be nice to also test the timeouts in SOCKSClientSocketPool. | 355 // It would be nice to also test the timeouts in SOCKSClientSocketPool. |
| 355 | 356 |
| 356 } // namespace | 357 } // namespace |
| 357 | 358 |
| 358 } // namespace net | 359 } // namespace net |
| OLD | NEW |