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 |