OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/http/http_proxy_client_socket_pool.h" | 5 #include "net/http/http_proxy_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 "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
10 #include "net/base/test_completion_callback.h" | 10 #include "net/base/test_completion_callback.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 protected: | 25 protected: |
26 HttpProxyClientSocketPoolTest() | 26 HttpProxyClientSocketPoolTest() |
27 : ignored_tcp_socket_params_(new TCPSocketParams( | 27 : ignored_tcp_socket_params_(new TCPSocketParams( |
28 HostPortPair("proxy", 80), MEDIUM, GURL(), false)), | 28 HostPortPair("proxy", 80), MEDIUM, GURL(), false)), |
29 tcp_histograms_(new ClientSocketPoolHistograms("MockTCP")), | 29 tcp_histograms_(new ClientSocketPoolHistograms("MockTCP")), |
30 tcp_socket_pool_(new MockTCPClientSocketPool(kMaxSockets, | 30 tcp_socket_pool_(new MockTCPClientSocketPool(kMaxSockets, |
31 kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)), | 31 kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)), |
32 notunnel_socket_params_(new HttpProxySocketParams( | 32 notunnel_socket_params_(new HttpProxySocketParams( |
33 ignored_tcp_socket_params_, GURL("http://host"), | 33 ignored_tcp_socket_params_, GURL("http://host"), |
34 HostPortPair("host", 80), NULL, false)), | 34 HostPortPair("host", 80), NULL, false)), |
35 auth_controller_(new MockHttpAuthController), | |
36 tunnel_socket_params_(new HttpProxySocketParams( | 35 tunnel_socket_params_(new HttpProxySocketParams( |
37 ignored_tcp_socket_params_, GURL("http://host"), | 36 ignored_tcp_socket_params_, GURL("http://host"), |
38 HostPortPair("host", 80), auth_controller_, true)), | 37 HostPortPair("host", 80), NULL, true)), |
39 http_proxy_histograms_( | 38 http_proxy_histograms_( |
40 new ClientSocketPoolHistograms("HttpProxyUnitTest")), | 39 new ClientSocketPoolHistograms("HttpProxyUnitTest")), |
41 pool_(new HttpProxyClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, | 40 pool_(new HttpProxyClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, |
42 http_proxy_histograms_, NULL, tcp_socket_pool_, NULL)) { | 41 http_proxy_histograms_, NULL, tcp_socket_pool_, NULL)) { |
43 } | 42 } |
44 | 43 |
45 int StartRequest(const std::string& group_name, RequestPriority priority) { | 44 int StartRequest(const std::string& group_name, RequestPriority priority) { |
46 return StartRequestUsingPool( | 45 return StartRequestUsingPool( |
47 pool_, group_name, priority, tunnel_socket_params_); | 46 pool_, group_name, priority, tunnel_socket_params_); |
48 } | 47 } |
49 | 48 |
| 49 void SetAuthControllerData(struct MockHttpAuthControllerData* data, |
| 50 size_t count) { |
| 51 MockHttpAuthController* auth_controller = new MockHttpAuthController; |
| 52 auth_controller->SetMockAuthControllerData(data, count); |
| 53 tunnel_socket_params_->set_auth_controller(auth_controller); |
| 54 } |
| 55 |
50 scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_; | 56 scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_; |
51 scoped_refptr<ClientSocketPoolHistograms> tcp_histograms_; | 57 scoped_refptr<ClientSocketPoolHistograms> tcp_histograms_; |
52 MockClientSocketFactory tcp_client_socket_factory_; | 58 MockClientSocketFactory tcp_client_socket_factory_; |
53 scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_; | 59 scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_; |
54 | 60 |
55 scoped_refptr<HttpProxySocketParams> notunnel_socket_params_; | 61 scoped_refptr<HttpProxySocketParams> notunnel_socket_params_; |
56 scoped_refptr<MockHttpAuthController> auth_controller_; | |
57 scoped_refptr<HttpProxySocketParams> tunnel_socket_params_; | 62 scoped_refptr<HttpProxySocketParams> tunnel_socket_params_; |
58 scoped_refptr<ClientSocketPoolHistograms> http_proxy_histograms_; | 63 scoped_refptr<ClientSocketPoolHistograms> http_proxy_histograms_; |
59 scoped_refptr<HttpProxyClientSocketPool> pool_; | 64 scoped_refptr<HttpProxyClientSocketPool> pool_; |
60 }; | 65 }; |
61 | 66 |
62 TEST_F(HttpProxyClientSocketPoolTest, NoTunnel) { | 67 TEST_F(HttpProxyClientSocketPoolTest, NoTunnel) { |
63 StaticSocketDataProvider data; | 68 StaticSocketDataProvider data; |
64 data.set_connect_data(MockConnect(false, 0)); | 69 data.set_connect_data(MockConnect(false, 0)); |
65 tcp_client_socket_factory_.AddSocketDataProvider(&data); | 70 tcp_client_socket_factory_.AddSocketDataProvider(&data); |
66 | 71 |
(...skipping 19 matching lines...) Expand all Loading... |
86 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 91 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
87 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 92 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
88 MockRead("Content-Length: 10\r\n\r\n"), | 93 MockRead("Content-Length: 10\r\n\r\n"), |
89 MockRead("0123456789"), | 94 MockRead("0123456789"), |
90 }; | 95 }; |
91 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 96 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
92 arraysize(writes)); | 97 arraysize(writes)); |
93 | 98 |
94 tcp_client_socket_factory_.AddSocketDataProvider(&data); | 99 tcp_client_socket_factory_.AddSocketDataProvider(&data); |
95 MockHttpAuthControllerData auth_data[] = { | 100 MockHttpAuthControllerData auth_data[] = { |
96 MockHttpAuthControllerData(""), | 101 MockHttpAuthControllerData("", "", ""), |
97 }; | 102 }; |
98 auth_controller_->SetMockAuthControllerData(auth_data, arraysize(auth_data)); | 103 SetAuthControllerData(auth_data, arraysize(auth_data)); |
99 | 104 |
100 ClientSocketHandle handle; | 105 ClientSocketHandle handle; |
101 TestCompletionCallback callback; | 106 TestCompletionCallback callback; |
102 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, | 107 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
103 BoundNetLog()); | 108 BoundNetLog()); |
104 EXPECT_EQ(ERR_IO_PENDING, rv); | 109 EXPECT_EQ(ERR_IO_PENDING, rv); |
105 EXPECT_FALSE(handle.is_initialized()); | 110 EXPECT_FALSE(handle.is_initialized()); |
106 EXPECT_FALSE(handle.socket()); | 111 EXPECT_FALSE(handle.socket()); |
107 | 112 |
108 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult()); | 113 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult()); |
(...skipping 14 matching lines...) Expand all Loading... |
123 }; | 128 }; |
124 MockRead reads[] = { | 129 MockRead reads[] = { |
125 MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 130 MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
126 }; | 131 }; |
127 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 132 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
128 arraysize(writes)); | 133 arraysize(writes)); |
129 data.set_connect_data(MockConnect(false, 0)); | 134 data.set_connect_data(MockConnect(false, 0)); |
130 | 135 |
131 tcp_client_socket_factory_.AddSocketDataProvider(&data); | 136 tcp_client_socket_factory_.AddSocketDataProvider(&data); |
132 MockHttpAuthControllerData auth_data[] = { | 137 MockHttpAuthControllerData auth_data[] = { |
133 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="), | 138 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg==", "", |
| 139 ""), |
134 }; | 140 }; |
135 auth_controller_->SetMockAuthControllerData(auth_data, arraysize(auth_data)); | 141 SetAuthControllerData(auth_data, arraysize(auth_data)); |
136 | 142 |
137 ClientSocketHandle handle; | 143 ClientSocketHandle handle; |
138 TestCompletionCallback callback; | 144 TestCompletionCallback callback; |
139 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, | 145 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
140 BoundNetLog()); | 146 BoundNetLog()); |
141 EXPECT_EQ(OK, rv); | 147 EXPECT_EQ(OK, rv); |
142 EXPECT_TRUE(handle.is_initialized()); | 148 EXPECT_TRUE(handle.is_initialized()); |
143 EXPECT_TRUE(handle.socket()); | 149 EXPECT_TRUE(handle.socket()); |
144 HttpProxyClientSocket* tunnel_socket = | 150 HttpProxyClientSocket* tunnel_socket = |
145 static_cast<HttpProxyClientSocket*>(handle.socket()); | 151 static_cast<HttpProxyClientSocket*>(handle.socket()); |
146 EXPECT_FALSE(tunnel_socket->NeedsRestartWithAuth()); | 152 EXPECT_FALSE(tunnel_socket->NeedsRestartWithAuth()); |
147 } | 153 } |
148 | 154 |
149 TEST_F(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { | 155 TEST_F(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { |
150 MockWrite writes[] = { | 156 MockWrite writes[] = { |
151 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 157 MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
152 "Host: host\r\n" | 158 "Host: host\r\n" |
153 "Proxy-Connection: keep-alive\r\n" | 159 "Proxy-Connection: keep-alive\r\n" |
154 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), | 160 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), |
155 }; | 161 }; |
156 MockRead reads[] = { | 162 MockRead reads[] = { |
157 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 163 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
158 }; | 164 }; |
159 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 165 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
160 arraysize(writes)); | 166 arraysize(writes)); |
161 | 167 |
162 tcp_client_socket_factory_.AddSocketDataProvider(&data); | 168 tcp_client_socket_factory_.AddSocketDataProvider(&data); |
163 MockHttpAuthControllerData auth_data[] = { | 169 MockHttpAuthControllerData auth_data[] = { |
164 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="), | 170 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg==", "", |
| 171 ""), |
165 }; | 172 }; |
166 auth_controller_->SetMockAuthControllerData(auth_data, arraysize(auth_data)); | 173 SetAuthControllerData(auth_data, arraysize(auth_data)); |
167 | 174 |
168 ClientSocketHandle handle; | 175 ClientSocketHandle handle; |
169 TestCompletionCallback callback; | 176 TestCompletionCallback callback; |
170 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, | 177 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
171 BoundNetLog()); | 178 BoundNetLog()); |
172 EXPECT_EQ(ERR_IO_PENDING, rv); | 179 EXPECT_EQ(ERR_IO_PENDING, rv); |
173 EXPECT_FALSE(handle.is_initialized()); | 180 EXPECT_FALSE(handle.is_initialized()); |
174 EXPECT_FALSE(handle.socket()); | 181 EXPECT_FALSE(handle.socket()); |
175 | 182 |
176 EXPECT_EQ(OK, callback.WaitForResult()); | 183 EXPECT_EQ(OK, callback.WaitForResult()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 }; | 216 }; |
210 MockRead reads[] = { | 217 MockRead reads[] = { |
211 MockRead("HTTP/1.1 200 Conn"), | 218 MockRead("HTTP/1.1 200 Conn"), |
212 MockRead(true, ERR_CONNECTION_CLOSED), | 219 MockRead(true, ERR_CONNECTION_CLOSED), |
213 }; | 220 }; |
214 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 221 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
215 arraysize(writes)); | 222 arraysize(writes)); |
216 | 223 |
217 tcp_client_socket_factory_.AddSocketDataProvider(&data); | 224 tcp_client_socket_factory_.AddSocketDataProvider(&data); |
218 MockHttpAuthControllerData auth_data[] = { | 225 MockHttpAuthControllerData auth_data[] = { |
219 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="), | 226 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg==", "", |
| 227 ""), |
220 }; | 228 }; |
221 auth_controller_->SetMockAuthControllerData(auth_data, arraysize(auth_data)); | 229 SetAuthControllerData(auth_data, arraysize(auth_data)); |
222 | 230 |
223 ClientSocketHandle handle; | 231 ClientSocketHandle handle; |
224 TestCompletionCallback callback; | 232 TestCompletionCallback callback; |
225 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, | 233 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
226 BoundNetLog()); | 234 BoundNetLog()); |
227 EXPECT_EQ(ERR_IO_PENDING, rv); | 235 EXPECT_EQ(ERR_IO_PENDING, rv); |
228 EXPECT_FALSE(handle.is_initialized()); | 236 EXPECT_FALSE(handle.is_initialized()); |
229 EXPECT_FALSE(handle.socket()); | 237 EXPECT_FALSE(handle.socket()); |
230 | 238 |
231 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 239 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); |
232 EXPECT_FALSE(handle.is_initialized()); | 240 EXPECT_FALSE(handle.is_initialized()); |
233 EXPECT_FALSE(handle.socket()); | 241 EXPECT_FALSE(handle.socket()); |
234 } | 242 } |
235 | 243 |
236 TEST_F(HttpProxyClientSocketPoolTest, TunnelSetupError) { | 244 TEST_F(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
237 MockWrite writes[] = { | 245 MockWrite writes[] = { |
238 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 246 MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
239 "Host: host\r\n" | 247 "Host: host\r\n" |
240 "Proxy-Connection: keep-alive\r\n" | 248 "Proxy-Connection: keep-alive\r\n" |
241 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), | 249 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), |
242 }; | 250 }; |
243 MockRead reads[] = { | 251 MockRead reads[] = { |
244 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"), | 252 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"), |
245 }; | 253 }; |
246 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 254 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
247 arraysize(writes)); | 255 arraysize(writes)); |
248 | 256 |
249 tcp_client_socket_factory_.AddSocketDataProvider(&data); | 257 tcp_client_socket_factory_.AddSocketDataProvider(&data); |
250 MockHttpAuthControllerData auth_data[] = { | 258 MockHttpAuthControllerData auth_data[] = { |
251 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="), | 259 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg==", "", |
| 260 ""), |
252 }; | 261 }; |
253 auth_controller_->SetMockAuthControllerData(auth_data, arraysize(auth_data)); | 262 SetAuthControllerData(auth_data, arraysize(auth_data)); |
254 | 263 |
255 ClientSocketHandle handle; | 264 ClientSocketHandle handle; |
256 TestCompletionCallback callback; | 265 TestCompletionCallback callback; |
257 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, | 266 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
258 BoundNetLog()); | 267 BoundNetLog()); |
259 EXPECT_EQ(ERR_IO_PENDING, rv); | 268 EXPECT_EQ(ERR_IO_PENDING, rv); |
260 EXPECT_FALSE(handle.is_initialized()); | 269 EXPECT_FALSE(handle.is_initialized()); |
261 EXPECT_FALSE(handle.socket()); | 270 EXPECT_FALSE(handle.socket()); |
262 | 271 |
263 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback.WaitForResult()); | 272 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback.WaitForResult()); |
264 EXPECT_FALSE(handle.is_initialized()); | 273 EXPECT_FALSE(handle.is_initialized()); |
265 EXPECT_FALSE(handle.socket()); | 274 EXPECT_FALSE(handle.socket()); |
266 } | 275 } |
267 | 276 |
268 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 277 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
269 | 278 |
270 } // namespace | 279 } // namespace |
271 | 280 |
272 } // namespace net | 281 } // namespace net |
OLD | NEW |