Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Side by Side Diff: net/socket/ssl_client_socket_pool_unittest.cc

Issue 3066031: Merge 54714 - Recommit 54405 - Fix late binding induced mismatch of Socket an... (Closed) Base URL: svn://svn.chromium.org/chrome/branches/472/src/
Patch Set: Fix merge problems Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/socket/ssl_client_socket_pool.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/string_util.h"
9 #include "base/time.h" 10 #include "base/time.h"
10 #include "net/base/auth.h" 11 #include "net/base/auth.h"
11 #include "net/base/mock_host_resolver.h" 12 #include "net/base/mock_host_resolver.h"
12 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
13 #include "net/base/test_completion_callback.h" 14 #include "net/base/test_completion_callback.h"
14 #include "net/base/ssl_config_service_defaults.h" 15 #include "net/base/ssl_config_service_defaults.h"
15 #include "net/http/http_auth_controller.h" 16 #include "net/http/http_auth_handler_factory.h"
16 #include "net/http/http_network_session.h" 17 #include "net/http/http_network_session.h"
17 #include "net/http/http_request_headers.h" 18 #include "net/http/http_request_headers.h"
18 #include "net/http/http_response_headers.h" 19 #include "net/http/http_response_headers.h"
19 #include "net/socket/client_socket_factory.h" 20 #include "net/socket/client_socket_factory.h"
20 #include "net/socket/client_socket_handle.h" 21 #include "net/socket/client_socket_handle.h"
21 #include "net/socket/client_socket_pool_histograms.h" 22 #include "net/socket/client_socket_pool_histograms.h"
22 #include "net/socket/socket_test_util.h" 23 #include "net/socket/socket_test_util.h"
24 #include "net/spdy/spdy_session_pool.h"
23 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
24 26
25 namespace net { 27 namespace net {
26 28
27 namespace { 29 namespace {
28 30
29 const int kMaxSockets = 32; 31 const int kMaxSockets = 32;
30 const int kMaxSocketsPerGroup = 6; 32 const int kMaxSocketsPerGroup = 6;
31 33
32 class SSLClientSocketPoolTest : public ClientSocketPoolTest { 34 class SSLClientSocketPoolTest : public ClientSocketPoolTest {
33 protected: 35 protected:
34 SSLClientSocketPoolTest() 36 SSLClientSocketPoolTest()
35 : direct_tcp_socket_params_(new TCPSocketParams( 37 : http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()),
38 session_(new HttpNetworkSession(new MockHostResolver,
39 ProxyService::CreateNull(),
40 &socket_factory_,
41 new SSLConfigServiceDefaults,
42 new SpdySessionPool(),
43 http_auth_handler_factory_.get(),
44 NULL,
45 NULL)),
46 direct_tcp_socket_params_(new TCPSocketParams(
36 HostPortPair("host", 443), MEDIUM, GURL(), false)), 47 HostPortPair("host", 443), MEDIUM, GURL(), false)),
37 tcp_socket_pool_(new MockTCPClientSocketPool( 48 tcp_socket_pool_(new MockTCPClientSocketPool(
38 kMaxSockets, 49 kMaxSockets,
39 kMaxSocketsPerGroup, 50 kMaxSocketsPerGroup,
40 make_scoped_refptr(new ClientSocketPoolHistograms("MockTCP")), 51 make_scoped_refptr(new ClientSocketPoolHistograms("MockTCP")),
41 &socket_factory_)), 52 &socket_factory_)),
42 proxy_tcp_socket_params_(new TCPSocketParams( 53 proxy_tcp_socket_params_(new TCPSocketParams(
43 HostPortPair("proxy", 443), MEDIUM, GURL(), false)), 54 HostPortPair("proxy", 443), MEDIUM, GURL(), false)),
55 http_proxy_socket_params_(new HttpProxySocketParams(
56 proxy_tcp_socket_params_, GURL("http://host"),
57 HostPortPair("host", 80), session_, true)),
44 http_proxy_socket_pool_(new HttpProxyClientSocketPool( 58 http_proxy_socket_pool_(new HttpProxyClientSocketPool(
45 kMaxSockets, 59 kMaxSockets,
46 kMaxSocketsPerGroup, 60 kMaxSocketsPerGroup,
47 make_scoped_refptr(new ClientSocketPoolHistograms("MockHttpProxy")), 61 make_scoped_refptr(new ClientSocketPoolHistograms("MockHttpProxy")),
48 new MockHostResolver, 62 new MockHostResolver,
49 tcp_socket_pool_, 63 tcp_socket_pool_,
50 NULL)), 64 NULL)),
51 socks_socket_params_(new SOCKSSocketParams( 65 socks_socket_params_(new SOCKSSocketParams(
52 proxy_tcp_socket_params_, true, HostPortPair("sockshost", 443), 66 proxy_tcp_socket_params_, true, HostPortPair("sockshost", 443),
53 MEDIUM, GURL())), 67 MEDIUM, GURL())),
(...skipping 13 matching lines...) Expand all
67 kMaxSocketsPerGroup, 81 kMaxSocketsPerGroup,
68 make_scoped_refptr(new ClientSocketPoolHistograms("SSLUnitTest")), 82 make_scoped_refptr(new ClientSocketPoolHistograms("SSLUnitTest")),
69 NULL, 83 NULL,
70 &socket_factory_, 84 &socket_factory_,
71 tcp_pool ? tcp_socket_pool_ : NULL, 85 tcp_pool ? tcp_socket_pool_ : NULL,
72 http_proxy_pool ? http_proxy_socket_pool_ : NULL, 86 http_proxy_pool ? http_proxy_socket_pool_ : NULL,
73 socks_pool ? socks_socket_pool_ : NULL, 87 socks_pool ? socks_socket_pool_ : NULL,
74 NULL); 88 NULL);
75 } 89 }
76 90
77 scoped_refptr<SSLSocketParams> SSLParams( 91 scoped_refptr<SSLSocketParams> SSLParams(ProxyServer::Scheme proxy,
78 ProxyServer::Scheme proxy, struct MockHttpAuthControllerData* auth_data, 92 bool want_spdy) {
79 size_t auth_data_len, bool want_spdy) {
80
81 scoped_refptr<HttpProxySocketParams> http_proxy_params;
82 if (proxy == ProxyServer::SCHEME_HTTP) {
83 scoped_refptr<MockHttpAuthController> auth_controller =
84 new MockHttpAuthController();
85 auth_controller->SetMockAuthControllerData(auth_data, auth_data_len);
86 http_proxy_params = new HttpProxySocketParams(proxy_tcp_socket_params_,
87 GURL("http://host"),
88 HostPortPair("host", 80),
89 auth_controller, true);
90 }
91
92 return make_scoped_refptr(new SSLSocketParams( 93 return make_scoped_refptr(new SSLSocketParams(
93 proxy == ProxyServer::SCHEME_DIRECT ? direct_tcp_socket_params_ : NULL, 94 proxy == ProxyServer::SCHEME_DIRECT ? direct_tcp_socket_params_ : NULL,
94 http_proxy_params, 95 proxy == ProxyServer::SCHEME_HTTP ? http_proxy_socket_params_ : NULL,
95 proxy == ProxyServer::SCHEME_SOCKS5 ? socks_socket_params_ : NULL, 96 proxy == ProxyServer::SCHEME_SOCKS5 ? socks_socket_params_ : NULL,
96 proxy, 97 proxy,
97 "host", 98 "host",
98 ssl_config_, 99 ssl_config_,
99 0, 100 0,
100 want_spdy)); 101 want_spdy));
101 } 102 }
102 103
104 void AddAuthToCache() {
105 session_->auth_cache()->Add(GURL("http://proxy:443/"), "MyRealm1", "Basic",
106 "Basic realm=MyRealm1", L"foo", L"bar", "/");
107 }
108
103 MockClientSocketFactory socket_factory_; 109 MockClientSocketFactory socket_factory_;
110 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_;
111 scoped_refptr<HttpNetworkSession> session_;
104 112
105 scoped_refptr<TCPSocketParams> direct_tcp_socket_params_; 113 scoped_refptr<TCPSocketParams> direct_tcp_socket_params_;
106 scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_; 114 scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_;
107 115
108 scoped_refptr<TCPSocketParams> proxy_tcp_socket_params_; 116 scoped_refptr<TCPSocketParams> proxy_tcp_socket_params_;
109 scoped_refptr<HttpProxySocketParams> http_proxy_socket_params_; 117 scoped_refptr<HttpProxySocketParams> http_proxy_socket_params_;
110 scoped_refptr<HttpProxyClientSocketPool> http_proxy_socket_pool_; 118 scoped_refptr<HttpProxyClientSocketPool> http_proxy_socket_pool_;
111 119
112 scoped_refptr<SOCKSSocketParams> socks_socket_params_; 120 scoped_refptr<SOCKSSocketParams> socks_socket_params_;
113 scoped_refptr<MockSOCKSClientSocketPool> socks_socket_pool_; 121 scoped_refptr<MockSOCKSClientSocketPool> socks_socket_pool_;
114 122
115 SSLConfig ssl_config_; 123 SSLConfig ssl_config_;
116 scoped_refptr<SSLClientSocketPool> pool_; 124 scoped_refptr<SSLClientSocketPool> pool_;
117 }; 125 };
118 126
119 TEST_F(SSLClientSocketPoolTest, TCPFail) { 127 TEST_F(SSLClientSocketPoolTest, TCPFail) {
120 StaticSocketDataProvider data; 128 StaticSocketDataProvider data;
121 data.set_connect_data(MockConnect(false, ERR_CONNECTION_FAILED)); 129 data.set_connect_data(MockConnect(false, ERR_CONNECTION_FAILED));
122 socket_factory_.AddSocketDataProvider(&data); 130 socket_factory_.AddSocketDataProvider(&data);
123 131
124 CreatePool(true /* tcp pool */, false, false); 132 CreatePool(true /* tcp pool */, false, false);
125 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 133 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
126 NULL, 0, false); 134 false);
127 135
128 ClientSocketHandle handle; 136 ClientSocketHandle handle;
129 int rv = handle.Init("a", params, MEDIUM, NULL, pool_, BoundNetLog()); 137 int rv = handle.Init("a", params, MEDIUM, NULL, pool_, BoundNetLog());
130 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); 138 EXPECT_EQ(ERR_CONNECTION_FAILED, rv);
131 EXPECT_FALSE(handle.is_initialized()); 139 EXPECT_FALSE(handle.is_initialized());
132 EXPECT_FALSE(handle.socket()); 140 EXPECT_FALSE(handle.socket());
133 EXPECT_FALSE(handle.is_ssl_error()); 141 EXPECT_FALSE(handle.is_ssl_error());
134 } 142 }
135 143
136 TEST_F(SSLClientSocketPoolTest, TCPFailAsync) { 144 TEST_F(SSLClientSocketPoolTest, TCPFailAsync) {
137 StaticSocketDataProvider data; 145 StaticSocketDataProvider data;
138 data.set_connect_data(MockConnect(true, ERR_CONNECTION_FAILED)); 146 data.set_connect_data(MockConnect(true, ERR_CONNECTION_FAILED));
139 socket_factory_.AddSocketDataProvider(&data); 147 socket_factory_.AddSocketDataProvider(&data);
140 148
141 CreatePool(true /* tcp pool */, false, false); 149 CreatePool(true /* tcp pool */, false, false);
142 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 150 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
143 NULL, 0, false); 151 false);
144 152
145 ClientSocketHandle handle; 153 ClientSocketHandle handle;
146 TestCompletionCallback callback; 154 TestCompletionCallback callback;
147 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 155 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
148 EXPECT_EQ(ERR_IO_PENDING, rv); 156 EXPECT_EQ(ERR_IO_PENDING, rv);
149 EXPECT_FALSE(handle.is_initialized()); 157 EXPECT_FALSE(handle.is_initialized());
150 EXPECT_FALSE(handle.socket()); 158 EXPECT_FALSE(handle.socket());
151 159
152 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 160 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
153 EXPECT_FALSE(handle.is_initialized()); 161 EXPECT_FALSE(handle.is_initialized());
154 EXPECT_FALSE(handle.socket()); 162 EXPECT_FALSE(handle.socket());
155 EXPECT_FALSE(handle.is_ssl_error()); 163 EXPECT_FALSE(handle.is_ssl_error());
156 } 164 }
157 165
158 TEST_F(SSLClientSocketPoolTest, BasicDirect) { 166 TEST_F(SSLClientSocketPoolTest, BasicDirect) {
159 StaticSocketDataProvider data; 167 StaticSocketDataProvider data;
160 data.set_connect_data(MockConnect(false, OK)); 168 data.set_connect_data(MockConnect(false, OK));
161 socket_factory_.AddSocketDataProvider(&data); 169 socket_factory_.AddSocketDataProvider(&data);
162 SSLSocketDataProvider ssl(false, OK); 170 SSLSocketDataProvider ssl(false, OK);
163 socket_factory_.AddSSLSocketDataProvider(&ssl); 171 socket_factory_.AddSSLSocketDataProvider(&ssl);
164 172
165 CreatePool(true /* tcp pool */, false, false); 173 CreatePool(true /* tcp pool */, false, false);
166 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 174 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
167 NULL, 0, false); 175 false);
168 176
169 ClientSocketHandle handle; 177 ClientSocketHandle handle;
170 TestCompletionCallback callback; 178 TestCompletionCallback callback;
171 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 179 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
172 EXPECT_EQ(OK, rv); 180 EXPECT_EQ(OK, rv);
173 EXPECT_TRUE(handle.is_initialized()); 181 EXPECT_TRUE(handle.is_initialized());
174 EXPECT_TRUE(handle.socket()); 182 EXPECT_TRUE(handle.socket());
175 } 183 }
176 184
177 TEST_F(SSLClientSocketPoolTest, BasicDirectAsync) { 185 TEST_F(SSLClientSocketPoolTest, BasicDirectAsync) {
178 StaticSocketDataProvider data; 186 StaticSocketDataProvider data;
179 socket_factory_.AddSocketDataProvider(&data); 187 socket_factory_.AddSocketDataProvider(&data);
180 SSLSocketDataProvider ssl(true, OK); 188 SSLSocketDataProvider ssl(true, OK);
181 socket_factory_.AddSSLSocketDataProvider(&ssl); 189 socket_factory_.AddSSLSocketDataProvider(&ssl);
182 190
183 CreatePool(true /* tcp pool */, false, false); 191 CreatePool(true /* tcp pool */, false, false);
184 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 192 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
185 NULL, 0, false); 193 false);
186 194
187 ClientSocketHandle handle; 195 ClientSocketHandle handle;
188 TestCompletionCallback callback; 196 TestCompletionCallback callback;
189 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 197 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
190 EXPECT_EQ(ERR_IO_PENDING, rv); 198 EXPECT_EQ(ERR_IO_PENDING, rv);
191 EXPECT_FALSE(handle.is_initialized()); 199 EXPECT_FALSE(handle.is_initialized());
192 EXPECT_FALSE(handle.socket()); 200 EXPECT_FALSE(handle.socket());
193 201
194 EXPECT_EQ(OK, callback.WaitForResult()); 202 EXPECT_EQ(OK, callback.WaitForResult());
195 EXPECT_TRUE(handle.is_initialized()); 203 EXPECT_TRUE(handle.is_initialized());
196 EXPECT_TRUE(handle.socket()); 204 EXPECT_TRUE(handle.socket());
197 } 205 }
198 206
199 TEST_F(SSLClientSocketPoolTest, DirectCertError) { 207 TEST_F(SSLClientSocketPoolTest, DirectCertError) {
200 StaticSocketDataProvider data; 208 StaticSocketDataProvider data;
201 socket_factory_.AddSocketDataProvider(&data); 209 socket_factory_.AddSocketDataProvider(&data);
202 SSLSocketDataProvider ssl(true, ERR_CERT_COMMON_NAME_INVALID); 210 SSLSocketDataProvider ssl(true, ERR_CERT_COMMON_NAME_INVALID);
203 socket_factory_.AddSSLSocketDataProvider(&ssl); 211 socket_factory_.AddSSLSocketDataProvider(&ssl);
204 212
205 CreatePool(true /* tcp pool */, false, false); 213 CreatePool(true /* tcp pool */, false, false);
206 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 214 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
207 NULL, 0, false); 215 false);
208 216
209 ClientSocketHandle handle; 217 ClientSocketHandle handle;
210 TestCompletionCallback callback; 218 TestCompletionCallback callback;
211 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 219 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
212 EXPECT_EQ(ERR_IO_PENDING, rv); 220 EXPECT_EQ(ERR_IO_PENDING, rv);
213 EXPECT_FALSE(handle.is_initialized()); 221 EXPECT_FALSE(handle.is_initialized());
214 EXPECT_FALSE(handle.socket()); 222 EXPECT_FALSE(handle.socket());
215 223
216 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); 224 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult());
217 EXPECT_TRUE(handle.is_initialized()); 225 EXPECT_TRUE(handle.is_initialized());
218 EXPECT_TRUE(handle.socket()); 226 EXPECT_TRUE(handle.socket());
219 } 227 }
220 228
221 TEST_F(SSLClientSocketPoolTest, DirectSSLError) { 229 TEST_F(SSLClientSocketPoolTest, DirectSSLError) {
222 StaticSocketDataProvider data; 230 StaticSocketDataProvider data;
223 socket_factory_.AddSocketDataProvider(&data); 231 socket_factory_.AddSocketDataProvider(&data);
224 SSLSocketDataProvider ssl(true, ERR_SSL_PROTOCOL_ERROR); 232 SSLSocketDataProvider ssl(true, ERR_SSL_PROTOCOL_ERROR);
225 socket_factory_.AddSSLSocketDataProvider(&ssl); 233 socket_factory_.AddSSLSocketDataProvider(&ssl);
226 234
227 CreatePool(true /* tcp pool */, false, false); 235 CreatePool(true /* tcp pool */, false, false);
228 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 236 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
229 NULL, 0, false); 237 false);
230 238
231 ClientSocketHandle handle; 239 ClientSocketHandle handle;
232 TestCompletionCallback callback; 240 TestCompletionCallback callback;
233 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 241 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
234 EXPECT_EQ(ERR_IO_PENDING, rv); 242 EXPECT_EQ(ERR_IO_PENDING, rv);
235 EXPECT_FALSE(handle.is_initialized()); 243 EXPECT_FALSE(handle.is_initialized());
236 EXPECT_FALSE(handle.socket()); 244 EXPECT_FALSE(handle.socket());
237 245
238 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult()); 246 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult());
239 EXPECT_FALSE(handle.is_initialized()); 247 EXPECT_FALSE(handle.is_initialized());
240 EXPECT_FALSE(handle.socket()); 248 EXPECT_FALSE(handle.socket());
241 EXPECT_TRUE(handle.is_ssl_error()); 249 EXPECT_TRUE(handle.is_ssl_error());
242 } 250 }
243 251
244 TEST_F(SSLClientSocketPoolTest, DirectWithNPN) { 252 TEST_F(SSLClientSocketPoolTest, DirectWithNPN) {
245 StaticSocketDataProvider data; 253 StaticSocketDataProvider data;
246 socket_factory_.AddSocketDataProvider(&data); 254 socket_factory_.AddSocketDataProvider(&data);
247 SSLSocketDataProvider ssl(true, OK); 255 SSLSocketDataProvider ssl(true, OK);
248 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; 256 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
249 ssl.next_proto = "http/1.1"; 257 ssl.next_proto = "http/1.1";
250 socket_factory_.AddSSLSocketDataProvider(&ssl); 258 socket_factory_.AddSSLSocketDataProvider(&ssl);
251 259
252 CreatePool(true /* tcp pool */, false, false); 260 CreatePool(true /* tcp pool */, false, false);
253 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 261 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
254 NULL, 0, false); 262 false);
255 263
256 ClientSocketHandle handle; 264 ClientSocketHandle handle;
257 TestCompletionCallback callback; 265 TestCompletionCallback callback;
258 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 266 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
259 EXPECT_EQ(ERR_IO_PENDING, rv); 267 EXPECT_EQ(ERR_IO_PENDING, rv);
260 EXPECT_FALSE(handle.is_initialized()); 268 EXPECT_FALSE(handle.is_initialized());
261 EXPECT_FALSE(handle.socket()); 269 EXPECT_FALSE(handle.socket());
262 270
263 EXPECT_EQ(OK, callback.WaitForResult()); 271 EXPECT_EQ(OK, callback.WaitForResult());
264 EXPECT_TRUE(handle.is_initialized()); 272 EXPECT_TRUE(handle.is_initialized());
265 EXPECT_TRUE(handle.socket()); 273 EXPECT_TRUE(handle.socket());
266 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); 274 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket());
267 EXPECT_TRUE(ssl_socket->wasNpnNegotiated()); 275 EXPECT_TRUE(ssl_socket->wasNpnNegotiated());
268 } 276 }
269 277
270 TEST_F(SSLClientSocketPoolTest, DirectNoSPDY) { 278 TEST_F(SSLClientSocketPoolTest, DirectNoSPDY) {
271 StaticSocketDataProvider data; 279 StaticSocketDataProvider data;
272 socket_factory_.AddSocketDataProvider(&data); 280 socket_factory_.AddSocketDataProvider(&data);
273 SSLSocketDataProvider ssl(true, OK); 281 SSLSocketDataProvider ssl(true, OK);
274 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; 282 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
275 ssl.next_proto = "http/1.1"; 283 ssl.next_proto = "http/1.1";
276 socket_factory_.AddSSLSocketDataProvider(&ssl); 284 socket_factory_.AddSSLSocketDataProvider(&ssl);
277 285
278 CreatePool(true /* tcp pool */, false, false); 286 CreatePool(true /* tcp pool */, false, false);
279 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 287 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
280 NULL, 0, true); 288 true);
281 289
282 ClientSocketHandle handle; 290 ClientSocketHandle handle;
283 TestCompletionCallback callback; 291 TestCompletionCallback callback;
284 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 292 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
285 EXPECT_EQ(ERR_IO_PENDING, rv); 293 EXPECT_EQ(ERR_IO_PENDING, rv);
286 EXPECT_FALSE(handle.is_initialized()); 294 EXPECT_FALSE(handle.is_initialized());
287 EXPECT_FALSE(handle.socket()); 295 EXPECT_FALSE(handle.socket());
288 296
289 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); 297 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult());
290 EXPECT_FALSE(handle.is_initialized()); 298 EXPECT_FALSE(handle.is_initialized());
291 EXPECT_FALSE(handle.socket()); 299 EXPECT_FALSE(handle.socket());
292 EXPECT_TRUE(handle.is_ssl_error()); 300 EXPECT_TRUE(handle.is_ssl_error());
293 } 301 }
294 302
295 TEST_F(SSLClientSocketPoolTest, DirectGotSPDY) { 303 TEST_F(SSLClientSocketPoolTest, DirectGotSPDY) {
296 StaticSocketDataProvider data; 304 StaticSocketDataProvider data;
297 socket_factory_.AddSocketDataProvider(&data); 305 socket_factory_.AddSocketDataProvider(&data);
298 SSLSocketDataProvider ssl(true, OK); 306 SSLSocketDataProvider ssl(true, OK);
299 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; 307 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
300 ssl.next_proto = "spdy/2"; 308 ssl.next_proto = "spdy/2";
301 socket_factory_.AddSSLSocketDataProvider(&ssl); 309 socket_factory_.AddSSLSocketDataProvider(&ssl);
302 310
303 CreatePool(true /* tcp pool */, false, false); 311 CreatePool(true /* tcp pool */, false, false);
304 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 312 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
305 NULL, 0, true); 313 true);
306 314
307 ClientSocketHandle handle; 315 ClientSocketHandle handle;
308 TestCompletionCallback callback; 316 TestCompletionCallback callback;
309 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 317 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
310 EXPECT_EQ(ERR_IO_PENDING, rv); 318 EXPECT_EQ(ERR_IO_PENDING, rv);
311 EXPECT_FALSE(handle.is_initialized()); 319 EXPECT_FALSE(handle.is_initialized());
312 EXPECT_FALSE(handle.socket()); 320 EXPECT_FALSE(handle.socket());
313 321
314 EXPECT_EQ(OK, callback.WaitForResult()); 322 EXPECT_EQ(OK, callback.WaitForResult());
315 EXPECT_TRUE(handle.is_initialized()); 323 EXPECT_TRUE(handle.is_initialized());
(...skipping 10 matching lines...) Expand all
326 TEST_F(SSLClientSocketPoolTest, DirectGotBonusSPDY) { 334 TEST_F(SSLClientSocketPoolTest, DirectGotBonusSPDY) {
327 StaticSocketDataProvider data; 335 StaticSocketDataProvider data;
328 socket_factory_.AddSocketDataProvider(&data); 336 socket_factory_.AddSocketDataProvider(&data);
329 SSLSocketDataProvider ssl(true, OK); 337 SSLSocketDataProvider ssl(true, OK);
330 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; 338 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
331 ssl.next_proto = "spdy/2"; 339 ssl.next_proto = "spdy/2";
332 socket_factory_.AddSSLSocketDataProvider(&ssl); 340 socket_factory_.AddSSLSocketDataProvider(&ssl);
333 341
334 CreatePool(true /* tcp pool */, false, false); 342 CreatePool(true /* tcp pool */, false, false);
335 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, 343 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT,
336 NULL, 0, false); 344 true);
337 345
338 ClientSocketHandle handle; 346 ClientSocketHandle handle;
339 TestCompletionCallback callback; 347 TestCompletionCallback callback;
340 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 348 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
341 EXPECT_EQ(ERR_IO_PENDING, rv); 349 EXPECT_EQ(ERR_IO_PENDING, rv);
342 EXPECT_FALSE(handle.is_initialized()); 350 EXPECT_FALSE(handle.is_initialized());
343 EXPECT_FALSE(handle.socket()); 351 EXPECT_FALSE(handle.socket());
344 352
345 EXPECT_EQ(OK, callback.WaitForResult()); 353 EXPECT_EQ(OK, callback.WaitForResult());
346 EXPECT_TRUE(handle.is_initialized()); 354 EXPECT_TRUE(handle.is_initialized());
347 EXPECT_TRUE(handle.socket()); 355 EXPECT_TRUE(handle.socket());
348 356
349 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); 357 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket());
350 EXPECT_TRUE(ssl_socket->wasNpnNegotiated()); 358 EXPECT_TRUE(ssl_socket->wasNpnNegotiated());
351 std::string proto; 359 std::string proto;
352 ssl_socket->GetNextProto(&proto); 360 ssl_socket->GetNextProto(&proto);
353 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), 361 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto),
354 SSLClientSocket::kProtoSPDY2); 362 SSLClientSocket::kProtoSPDY2);
355 } 363 }
356 364
357 TEST_F(SSLClientSocketPoolTest, SOCKSFail) { 365 TEST_F(SSLClientSocketPoolTest, SOCKSFail) {
358 StaticSocketDataProvider data; 366 StaticSocketDataProvider data;
359 data.set_connect_data(MockConnect(false, ERR_CONNECTION_FAILED)); 367 data.set_connect_data(MockConnect(false, ERR_CONNECTION_FAILED));
360 socket_factory_.AddSocketDataProvider(&data); 368 socket_factory_.AddSocketDataProvider(&data);
361 369
362 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 370 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
363 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 371 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
364 NULL, 0, false); 372 false);
365 373
366 ClientSocketHandle handle; 374 ClientSocketHandle handle;
367 TestCompletionCallback callback; 375 TestCompletionCallback callback;
368 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 376 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
369 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); 377 EXPECT_EQ(ERR_CONNECTION_FAILED, rv);
370 EXPECT_FALSE(handle.is_initialized()); 378 EXPECT_FALSE(handle.is_initialized());
371 EXPECT_FALSE(handle.socket()); 379 EXPECT_FALSE(handle.socket());
372 EXPECT_FALSE(handle.is_ssl_error()); 380 EXPECT_FALSE(handle.is_ssl_error());
373 } 381 }
374 382
375 TEST_F(SSLClientSocketPoolTest, SOCKSFailAsync) { 383 TEST_F(SSLClientSocketPoolTest, SOCKSFailAsync) {
376 StaticSocketDataProvider data; 384 StaticSocketDataProvider data;
377 data.set_connect_data(MockConnect(true, ERR_CONNECTION_FAILED)); 385 data.set_connect_data(MockConnect(true, ERR_CONNECTION_FAILED));
378 socket_factory_.AddSocketDataProvider(&data); 386 socket_factory_.AddSocketDataProvider(&data);
379 387
380 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 388 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
381 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 389 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
382 NULL, 0, false); 390 false);
383 391
384 ClientSocketHandle handle; 392 ClientSocketHandle handle;
385 TestCompletionCallback callback; 393 TestCompletionCallback callback;
386 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 394 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
387 EXPECT_EQ(ERR_IO_PENDING, rv); 395 EXPECT_EQ(ERR_IO_PENDING, rv);
388 EXPECT_FALSE(handle.is_initialized()); 396 EXPECT_FALSE(handle.is_initialized());
389 EXPECT_FALSE(handle.socket()); 397 EXPECT_FALSE(handle.socket());
390 398
391 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 399 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
392 EXPECT_FALSE(handle.is_initialized()); 400 EXPECT_FALSE(handle.is_initialized());
393 EXPECT_FALSE(handle.socket()); 401 EXPECT_FALSE(handle.socket());
394 EXPECT_FALSE(handle.is_ssl_error()); 402 EXPECT_FALSE(handle.is_ssl_error());
395 } 403 }
396 404
397 TEST_F(SSLClientSocketPoolTest, SOCKSBasic) { 405 TEST_F(SSLClientSocketPoolTest, SOCKSBasic) {
398 StaticSocketDataProvider data; 406 StaticSocketDataProvider data;
399 data.set_connect_data(MockConnect(false, OK)); 407 data.set_connect_data(MockConnect(false, OK));
400 socket_factory_.AddSocketDataProvider(&data); 408 socket_factory_.AddSocketDataProvider(&data);
401 SSLSocketDataProvider ssl(false, OK); 409 SSLSocketDataProvider ssl(false, OK);
402 socket_factory_.AddSSLSocketDataProvider(&ssl); 410 socket_factory_.AddSSLSocketDataProvider(&ssl);
403 411
404 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 412 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
405 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 413 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
406 NULL, 0, false); 414 false);
407 415
408 ClientSocketHandle handle; 416 ClientSocketHandle handle;
409 TestCompletionCallback callback; 417 TestCompletionCallback callback;
410 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 418 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
411 EXPECT_EQ(OK, rv); 419 EXPECT_EQ(OK, rv);
412 EXPECT_TRUE(handle.is_initialized()); 420 EXPECT_TRUE(handle.is_initialized());
413 EXPECT_TRUE(handle.socket()); 421 EXPECT_TRUE(handle.socket());
414 } 422 }
415 423
416 TEST_F(SSLClientSocketPoolTest, SOCKSBasicAsync) { 424 TEST_F(SSLClientSocketPoolTest, SOCKSBasicAsync) {
417 StaticSocketDataProvider data; 425 StaticSocketDataProvider data;
418 socket_factory_.AddSocketDataProvider(&data); 426 socket_factory_.AddSocketDataProvider(&data);
419 SSLSocketDataProvider ssl(true, OK); 427 SSLSocketDataProvider ssl(true, OK);
420 socket_factory_.AddSSLSocketDataProvider(&ssl); 428 socket_factory_.AddSSLSocketDataProvider(&ssl);
421 429
422 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 430 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
423 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, 431 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5,
424 NULL, 0, false); 432 false);
425 433
426 ClientSocketHandle handle; 434 ClientSocketHandle handle;
427 TestCompletionCallback callback; 435 TestCompletionCallback callback;
428 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 436 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
429 EXPECT_EQ(ERR_IO_PENDING, rv); 437 EXPECT_EQ(ERR_IO_PENDING, rv);
430 EXPECT_FALSE(handle.is_initialized()); 438 EXPECT_FALSE(handle.is_initialized());
431 EXPECT_FALSE(handle.socket()); 439 EXPECT_FALSE(handle.socket());
432 440
433 EXPECT_EQ(OK, callback.WaitForResult()); 441 EXPECT_EQ(OK, callback.WaitForResult());
434 EXPECT_TRUE(handle.is_initialized()); 442 EXPECT_TRUE(handle.is_initialized());
435 EXPECT_TRUE(handle.socket()); 443 EXPECT_TRUE(handle.socket());
436 } 444 }
437 445
438 TEST_F(SSLClientSocketPoolTest, HttpProxyFail) { 446 TEST_F(SSLClientSocketPoolTest, HttpProxyFail) {
439 StaticSocketDataProvider data; 447 StaticSocketDataProvider data;
440 data.set_connect_data(MockConnect(false, ERR_CONNECTION_FAILED)); 448 data.set_connect_data(MockConnect(false, ERR_CONNECTION_FAILED));
441 socket_factory_.AddSocketDataProvider(&data); 449 socket_factory_.AddSocketDataProvider(&data);
442 450
443 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 451 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
444 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 452 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
445 NULL, 0, false); 453 false);
446 454
447 ClientSocketHandle handle; 455 ClientSocketHandle handle;
448 TestCompletionCallback callback; 456 TestCompletionCallback callback;
449 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 457 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
450 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); 458 EXPECT_EQ(ERR_CONNECTION_FAILED, rv);
451 EXPECT_FALSE(handle.is_initialized()); 459 EXPECT_FALSE(handle.is_initialized());
452 EXPECT_FALSE(handle.socket()); 460 EXPECT_FALSE(handle.socket());
453 EXPECT_FALSE(handle.is_ssl_error()); 461 EXPECT_FALSE(handle.is_ssl_error());
454 } 462 }
455 463
456 TEST_F(SSLClientSocketPoolTest, HttpProxyFailAsync) { 464 TEST_F(SSLClientSocketPoolTest, HttpProxyFailAsync) {
457 StaticSocketDataProvider data; 465 StaticSocketDataProvider data;
458 data.set_connect_data(MockConnect(true, ERR_CONNECTION_FAILED)); 466 data.set_connect_data(MockConnect(true, ERR_CONNECTION_FAILED));
459 socket_factory_.AddSocketDataProvider(&data); 467 socket_factory_.AddSocketDataProvider(&data);
460 468
461 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 469 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
462 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 470 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
463 NULL, 0, false); 471 false);
464 472
465 ClientSocketHandle handle; 473 ClientSocketHandle handle;
466 TestCompletionCallback callback; 474 TestCompletionCallback callback;
467 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 475 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
468 EXPECT_EQ(ERR_IO_PENDING, rv); 476 EXPECT_EQ(ERR_IO_PENDING, rv);
469 EXPECT_FALSE(handle.is_initialized()); 477 EXPECT_FALSE(handle.is_initialized());
470 EXPECT_FALSE(handle.socket()); 478 EXPECT_FALSE(handle.socket());
471 479
472 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 480 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
473 EXPECT_FALSE(handle.is_initialized()); 481 EXPECT_FALSE(handle.is_initialized());
474 EXPECT_FALSE(handle.socket()); 482 EXPECT_FALSE(handle.socket());
475 EXPECT_FALSE(handle.is_ssl_error()); 483 EXPECT_FALSE(handle.is_ssl_error());
476 } 484 }
477 485
478 TEST_F(SSLClientSocketPoolTest, HttpProxyBasic) { 486 TEST_F(SSLClientSocketPoolTest, HttpProxyBasic) {
479 MockWrite writes[] = { 487 MockWrite writes[] = {
480 MockWrite(false, 488 MockWrite(false,
481 "CONNECT host:80 HTTP/1.1\r\n" 489 "CONNECT host:80 HTTP/1.1\r\n"
482 "Host: host\r\n" 490 "Host: host\r\n"
483 "Proxy-Connection: keep-alive\r\n" 491 "Proxy-Connection: keep-alive\r\n"
484 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), 492 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
485 }; 493 };
486 MockRead reads[] = { 494 MockRead reads[] = {
487 MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"), 495 MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"),
488 }; 496 };
489 StaticSocketDataProvider data(reads, arraysize(reads), writes, 497 StaticSocketDataProvider data(reads, arraysize(reads), writes,
490 arraysize(writes)); 498 arraysize(writes));
491 data.set_connect_data(MockConnect(false, OK)); 499 data.set_connect_data(MockConnect(false, OK));
492 socket_factory_.AddSocketDataProvider(&data); 500 socket_factory_.AddSocketDataProvider(&data);
493 MockHttpAuthControllerData auth_data[] = { 501 AddAuthToCache();
494 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="),
495 };
496 SSLSocketDataProvider ssl(false, OK); 502 SSLSocketDataProvider ssl(false, OK);
497 socket_factory_.AddSSLSocketDataProvider(&ssl); 503 socket_factory_.AddSSLSocketDataProvider(&ssl);
498 504
499 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 505 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
500 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 506 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
501 auth_data,
502 arraysize(auth_data),
503 false); 507 false);
504 508
505 ClientSocketHandle handle; 509 ClientSocketHandle handle;
506 TestCompletionCallback callback; 510 TestCompletionCallback callback;
507 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 511 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
508 EXPECT_EQ(OK, rv); 512 EXPECT_EQ(OK, rv);
509 EXPECT_TRUE(handle.is_initialized()); 513 EXPECT_TRUE(handle.is_initialized());
510 EXPECT_TRUE(handle.socket()); 514 EXPECT_TRUE(handle.socket());
511 } 515 }
512 516
513 TEST_F(SSLClientSocketPoolTest, HttpProxyBasicAsync) { 517 TEST_F(SSLClientSocketPoolTest, HttpProxyBasicAsync) {
514 MockWrite writes[] = { 518 MockWrite writes[] = {
515 MockWrite("CONNECT host:80 HTTP/1.1\r\n" 519 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
516 "Host: host\r\n" 520 "Host: host\r\n"
517 "Proxy-Connection: keep-alive\r\n" 521 "Proxy-Connection: keep-alive\r\n"
518 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), 522 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
519 }; 523 };
520 MockRead reads[] = { 524 MockRead reads[] = {
521 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), 525 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"),
522 }; 526 };
523 StaticSocketDataProvider data(reads, arraysize(reads), writes, 527 StaticSocketDataProvider data(reads, arraysize(reads), writes,
524 arraysize(writes)); 528 arraysize(writes));
525 socket_factory_.AddSocketDataProvider(&data); 529 socket_factory_.AddSocketDataProvider(&data);
526 MockHttpAuthControllerData auth_data[] = { 530 AddAuthToCache();
527 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="),
528 };
529 SSLSocketDataProvider ssl(true, OK); 531 SSLSocketDataProvider ssl(true, OK);
530 socket_factory_.AddSSLSocketDataProvider(&ssl); 532 socket_factory_.AddSSLSocketDataProvider(&ssl);
531 533
532 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 534 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
533 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 535 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
534 auth_data,
535 arraysize(auth_data),
536 false); 536 false);
537 537
538 ClientSocketHandle handle; 538 ClientSocketHandle handle;
539 TestCompletionCallback callback; 539 TestCompletionCallback callback;
540 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 540 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
541 EXPECT_EQ(ERR_IO_PENDING, rv); 541 EXPECT_EQ(ERR_IO_PENDING, rv);
542 EXPECT_FALSE(handle.is_initialized()); 542 EXPECT_FALSE(handle.is_initialized());
543 EXPECT_FALSE(handle.socket()); 543 EXPECT_FALSE(handle.socket());
544 544
545 EXPECT_EQ(OK, callback.WaitForResult()); 545 EXPECT_EQ(OK, callback.WaitForResult());
546 EXPECT_TRUE(handle.is_initialized()); 546 EXPECT_TRUE(handle.is_initialized());
547 EXPECT_TRUE(handle.socket()); 547 EXPECT_TRUE(handle.socket());
548 } 548 }
549 549
550 TEST_F(SSLClientSocketPoolTest, NeedProxyAuth) { 550 TEST_F(SSLClientSocketPoolTest, NeedProxyAuth) {
551 MockWrite writes[] = { 551 MockWrite writes[] = {
552 MockWrite("CONNECT host:80 HTTP/1.1\r\n" 552 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
553 "Host: host\r\n" 553 "Host: host\r\n"
554 "Proxy-Connection: keep-alive\r\n\r\n"), 554 "Proxy-Connection: keep-alive\r\n\r\n"),
555 }; 555 };
556 MockRead reads[] = { 556 MockRead reads[] = {
557 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), 557 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"),
558 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), 558 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"),
559 MockRead("Content-Length: 10\r\n\r\n"), 559 MockRead("Content-Length: 10\r\n\r\n"),
560 MockRead("0123456789"), 560 MockRead("0123456789"),
561 }; 561 };
562 StaticSocketDataProvider data(reads, arraysize(reads), writes, 562 StaticSocketDataProvider data(reads, arraysize(reads), writes,
563 arraysize(writes)); 563 arraysize(writes));
564 socket_factory_.AddSocketDataProvider(&data); 564 socket_factory_.AddSocketDataProvider(&data);
565 MockHttpAuthControllerData auth_data[] = {
566 MockHttpAuthControllerData(""),
567 };
568 SSLSocketDataProvider ssl(true, OK); 565 SSLSocketDataProvider ssl(true, OK);
569 socket_factory_.AddSSLSocketDataProvider(&ssl); 566 socket_factory_.AddSSLSocketDataProvider(&ssl);
570 567
571 CreatePool(false, true /* http proxy pool */, true /* socks pool */); 568 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
572 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, 569 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
573 auth_data,
574 arraysize(auth_data),
575 false); 570 false);
576 571
577 ClientSocketHandle handle; 572 ClientSocketHandle handle;
578 TestCompletionCallback callback;
579 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
580 EXPECT_EQ(ERR_IO_PENDING, rv);
581 EXPECT_FALSE(handle.is_initialized());
582 EXPECT_FALSE(handle.socket());
583
584 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult());
585 EXPECT_FALSE(handle.is_initialized());
586 EXPECT_FALSE(handle.socket());
587 EXPECT_FALSE(handle.is_ssl_error());
588 const HttpResponseInfo& tunnel_info = handle.ssl_error_response_info();
589 EXPECT_EQ(tunnel_info.headers->response_code(), 407);
590 }
591
592 TEST_F(SSLClientSocketPoolTest, DoProxyAuth) {
593 MockWrite writes[] = {
594 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
595 "Host: host\r\n"
596 "Proxy-Connection: keep-alive\r\n\r\n"),
597 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
598 "Host: host\r\n"
599 "Proxy-Connection: keep-alive\r\n"
600 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"),
601 };
602 MockRead reads[] = {
603 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"),
604 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"),
605 MockRead("Content-Length: 10\r\n\r\n"),
606 MockRead("0123456789"),
607 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"),
608 };
609 StaticSocketDataProvider data(reads, arraysize(reads), writes,
610 arraysize(writes));
611 socket_factory_.AddSocketDataProvider(&data);
612 MockHttpAuthControllerData auth_data[] = {
613 MockHttpAuthControllerData(""),
614 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="),
615 };
616 SSLSocketDataProvider ssl(true, OK);
617 socket_factory_.AddSSLSocketDataProvider(&ssl);
618
619 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
620 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
621 auth_data,
622 arraysize(auth_data),
623 false);
624
625 ClientSocketHandle handle;
626 TestCompletionCallback callback;
627 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
628 EXPECT_EQ(ERR_IO_PENDING, rv);
629 EXPECT_FALSE(handle.is_initialized());
630 EXPECT_FALSE(handle.socket());
631
632 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult());
633 EXPECT_FALSE(handle.is_initialized());
634 EXPECT_FALSE(handle.socket());
635 EXPECT_FALSE(handle.is_ssl_error());
636 const HttpResponseInfo& tunnel_info = handle.ssl_error_response_info();
637 EXPECT_EQ(tunnel_info.headers->response_code(), 407);
638
639 params->http_proxy_params()->auth_controller()->ResetAuth(std::wstring(),
640 std::wstring());
641 rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
642 EXPECT_EQ(ERR_IO_PENDING, rv);
643 EXPECT_FALSE(handle.is_initialized());
644 EXPECT_FALSE(handle.socket());
645
646 // Test that http://crbug.com/49325 doesn't regress.
647 EXPECT_EQ(handle.GetLoadState(), LOAD_STATE_ESTABLISHING_PROXY_TUNNEL);
648
649 EXPECT_EQ(OK, callback.WaitForResult());
650 EXPECT_TRUE(handle.is_initialized());
651 EXPECT_TRUE(handle.socket());
652 }
653
654 TEST_F(SSLClientSocketPoolTest, DoProxyAuthNoKeepAlive) {
655 MockWrite writes1[] = {
656 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
657 "Host: host\r\n"
658 "Proxy-Connection: keep-alive\r\n\r\n"),
659 };
660 MockWrite writes2[] = {
661 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
662 "Host: host\r\n"
663 "Proxy-Connection: keep-alive\r\n"
664 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"),
665 };
666 MockRead reads1[] = {
667 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"),
668 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n\r\n"),
669 MockRead("Content0123456789"),
670 };
671 MockRead reads2[] = {
672 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"),
673 };
674 StaticSocketDataProvider data1(reads1, arraysize(reads1), writes1,
675 arraysize(writes1));
676 socket_factory_.AddSocketDataProvider(&data1);
677 StaticSocketDataProvider data2(reads2, arraysize(reads2), writes2,
678 arraysize(writes2));
679 socket_factory_.AddSocketDataProvider(&data2);
680 MockHttpAuthControllerData auth_data[] = {
681 MockHttpAuthControllerData(""),
682 MockHttpAuthControllerData("Proxy-Authorization: Basic Zm9vOmJheg=="),
683 };
684 SSLSocketDataProvider ssl(true, OK);
685 socket_factory_.AddSSLSocketDataProvider(&ssl);
686
687 CreatePool(false, true /* http proxy pool */, true /* socks pool */);
688 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP,
689 auth_data,
690 arraysize(auth_data),
691 false);
692
693 ClientSocketHandle handle;
694 TestCompletionCallback callback; 573 TestCompletionCallback callback;
695 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 574 int rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog());
696 EXPECT_EQ(ERR_IO_PENDING, rv); 575 EXPECT_EQ(ERR_IO_PENDING, rv);
697 EXPECT_FALSE(handle.is_initialized()); 576 EXPECT_FALSE(handle.is_initialized());
698 EXPECT_FALSE(handle.socket()); 577 EXPECT_FALSE(handle.socket());
699 578
700 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult()); 579 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult());
701 EXPECT_FALSE(handle.is_initialized()); 580 EXPECT_FALSE(handle.is_initialized());
702 EXPECT_FALSE(handle.socket()); 581 EXPECT_FALSE(handle.socket());
703 EXPECT_FALSE(handle.is_ssl_error()); 582 EXPECT_FALSE(handle.is_ssl_error());
704 const HttpResponseInfo& tunnel_info = handle.ssl_error_response_info(); 583 const HttpResponseInfo& tunnel_info = handle.ssl_error_response_info();
705 EXPECT_EQ(tunnel_info.headers->response_code(), 407); 584 EXPECT_EQ(tunnel_info.headers->response_code(), 407);
706 585 scoped_ptr<ClientSocketHandle> tunnel_handle(
707 params->http_proxy_params()->auth_controller()->ResetAuth(std::wstring(), 586 handle.release_pending_http_proxy_connection());
708 std::wstring()); 587 EXPECT_TRUE(tunnel_handle->socket());
709 rv = handle.Init("a", params, MEDIUM, &callback, pool_, BoundNetLog()); 588 EXPECT_FALSE(tunnel_handle->socket()->IsConnected());
710 EXPECT_EQ(ERR_IO_PENDING, rv);
711 EXPECT_FALSE(handle.is_initialized());
712 EXPECT_FALSE(handle.socket());
713
714 EXPECT_EQ(OK, callback.WaitForResult());
715 EXPECT_TRUE(handle.is_initialized());
716 EXPECT_TRUE(handle.socket());
717 } 589 }
718 590
719 // It would be nice to also test the timeouts in SSLClientSocketPool. 591 // It would be nice to also test the timeouts in SSLClientSocketPool.
720 592
721 } // namespace 593 } // namespace
722 594
723 } // namespace net 595 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_pool.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698