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

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

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