| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/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/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 } | 147 } |
| 148 | 148 |
| 149 DeterministicMockClientSocketFactory& socket_factory() { | 149 DeterministicMockClientSocketFactory& socket_factory() { |
| 150 return socket_factory_; | 150 return socket_factory_; |
| 151 } | 151 } |
| 152 | 152 |
| 153 void Initialize(MockRead* reads, size_t reads_count, | 153 void Initialize(MockRead* reads, size_t reads_count, |
| 154 MockWrite* writes, size_t writes_count, | 154 MockWrite* writes, size_t writes_count, |
| 155 MockRead* spdy_reads, size_t spdy_reads_count, | 155 MockRead* spdy_reads, size_t spdy_reads_count, |
| 156 MockWrite* spdy_writes, size_t spdy_writes_count) { | 156 MockWrite* spdy_writes, size_t spdy_writes_count) { |
| 157 if (GetParam() == SPDY) | 157 if (GetParam() == SPDY) { |
| 158 data_ = new DeterministicSocketData(spdy_reads, spdy_reads_count, | 158 data_.reset(new DeterministicSocketData(spdy_reads, spdy_reads_count, |
| 159 spdy_writes, spdy_writes_count); | 159 spdy_writes, spdy_writes_count)); |
| 160 else | 160 } else { |
| 161 data_ = new DeterministicSocketData(reads, reads_count, writes, | 161 data_.reset(new DeterministicSocketData(reads, reads_count, writes, |
| 162 writes_count); | 162 writes_count)); |
| 163 } |
| 163 | 164 |
| 164 data_->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 165 data_->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
| 165 data_->StopAfter(2); // Request / Response | 166 data_->StopAfter(2); // Request / Response |
| 166 | 167 |
| 167 socket_factory_.AddSocketDataProvider(data_.get()); | 168 socket_factory_.AddSocketDataProvider(data_.get()); |
| 168 | 169 |
| 169 if (GetParam() != HTTP) { | 170 if (GetParam() != HTTP) { |
| 170 ssl_data_.reset(new SSLSocketDataProvider(SYNCHRONOUS, OK)); | 171 ssl_data_.reset(new SSLSocketDataProvider(SYNCHRONOUS, OK)); |
| 171 if (GetParam() == SPDY) { | 172 if (GetParam() == SPDY) { |
| 172 InitializeSpdySsl(); | 173 InitializeSpdySsl(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 SSLClientSocketPool ssl_socket_pool_; | 211 SSLClientSocketPool ssl_socket_pool_; |
| 211 | 212 |
| 212 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; | 213 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; |
| 213 HttpServerPropertiesImpl http_server_properties_; | 214 HttpServerPropertiesImpl http_server_properties_; |
| 214 const scoped_refptr<HttpNetworkSession> session_; | 215 const scoped_refptr<HttpNetworkSession> session_; |
| 215 ClientSocketPoolHistograms http_proxy_histograms_; | 216 ClientSocketPoolHistograms http_proxy_histograms_; |
| 216 SpdyTestStateHelper spdy_state_; | 217 SpdyTestStateHelper spdy_state_; |
| 217 | 218 |
| 218 protected: | 219 protected: |
| 219 scoped_ptr<SSLSocketDataProvider> ssl_data_; | 220 scoped_ptr<SSLSocketDataProvider> ssl_data_; |
| 220 scoped_refptr<DeterministicSocketData> data_; | 221 scoped_ptr<DeterministicSocketData> data_; |
| 221 HttpProxyClientSocketPool pool_; | 222 HttpProxyClientSocketPool pool_; |
| 222 ClientSocketHandle handle_; | 223 ClientSocketHandle handle_; |
| 223 TestCompletionCallback callback_; | 224 TestCompletionCallback callback_; |
| 224 }; | 225 }; |
| 225 | 226 |
| 226 //----------------------------------------------------------------------------- | 227 //----------------------------------------------------------------------------- |
| 227 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) | 228 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) |
| 228 // and SPDY. | 229 // and SPDY. |
| 229 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolSpdy2Tests, | 230 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolSpdy2Tests, |
| 230 HttpProxyClientSocketPoolSpdy2Test, | 231 HttpProxyClientSocketPoolSpdy2Test, |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 EXPECT_EQ(OK, callback_.WaitForResult()); | 379 EXPECT_EQ(OK, callback_.WaitForResult()); |
| 379 EXPECT_TRUE(handle_.is_initialized()); | 380 EXPECT_TRUE(handle_.is_initialized()); |
| 380 ASSERT_TRUE(handle_.socket()); | 381 ASSERT_TRUE(handle_.socket()); |
| 381 HttpProxyClientSocket* tunnel_socket = | 382 HttpProxyClientSocket* tunnel_socket = |
| 382 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 383 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
| 383 EXPECT_TRUE(tunnel_socket->IsConnected()); | 384 EXPECT_TRUE(tunnel_socket->IsConnected()); |
| 384 } | 385 } |
| 385 | 386 |
| 386 TEST_P(HttpProxyClientSocketPoolSpdy2Test, TCPError) { | 387 TEST_P(HttpProxyClientSocketPoolSpdy2Test, TCPError) { |
| 387 if (GetParam() == SPDY) return; | 388 if (GetParam() == SPDY) return; |
| 388 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 389 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); |
| 389 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); | 390 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); |
| 390 | 391 |
| 391 socket_factory().AddSocketDataProvider(data_.get()); | 392 socket_factory().AddSocketDataProvider(data_.get()); |
| 392 | 393 |
| 393 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), | 394 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 394 &pool_, BoundNetLog()); | 395 &pool_, BoundNetLog()); |
| 395 EXPECT_EQ(ERR_IO_PENDING, rv); | 396 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 396 EXPECT_FALSE(handle_.is_initialized()); | 397 EXPECT_FALSE(handle_.is_initialized()); |
| 397 EXPECT_FALSE(handle_.socket()); | 398 EXPECT_FALSE(handle_.socket()); |
| 398 | 399 |
| 399 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); | 400 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); |
| 400 | 401 |
| 401 EXPECT_FALSE(handle_.is_initialized()); | 402 EXPECT_FALSE(handle_.is_initialized()); |
| 402 EXPECT_FALSE(handle_.socket()); | 403 EXPECT_FALSE(handle_.socket()); |
| 403 } | 404 } |
| 404 | 405 |
| 405 TEST_P(HttpProxyClientSocketPoolSpdy2Test, SSLError) { | 406 TEST_P(HttpProxyClientSocketPoolSpdy2Test, SSLError) { |
| 406 if (GetParam() == HTTP) return; | 407 if (GetParam() == HTTP) return; |
| 407 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 408 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); |
| 408 data_->set_connect_data(MockConnect(ASYNC, OK)); | 409 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 409 socket_factory().AddSocketDataProvider(data_.get()); | 410 socket_factory().AddSocketDataProvider(data_.get()); |
| 410 | 411 |
| 411 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 412 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 412 ERR_CERT_AUTHORITY_INVALID)); | 413 ERR_CERT_AUTHORITY_INVALID)); |
| 413 if (GetParam() == SPDY) { | 414 if (GetParam() == SPDY) { |
| 414 InitializeSpdySsl(); | 415 InitializeSpdySsl(); |
| 415 } | 416 } |
| 416 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); | 417 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); |
| 417 | 418 |
| 418 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), | 419 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
| 419 &pool_, BoundNetLog()); | 420 &pool_, BoundNetLog()); |
| 420 EXPECT_EQ(ERR_IO_PENDING, rv); | 421 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 421 EXPECT_FALSE(handle_.is_initialized()); | 422 EXPECT_FALSE(handle_.is_initialized()); |
| 422 EXPECT_FALSE(handle_.socket()); | 423 EXPECT_FALSE(handle_.socket()); |
| 423 | 424 |
| 424 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); | 425 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); |
| 425 | 426 |
| 426 EXPECT_FALSE(handle_.is_initialized()); | 427 EXPECT_FALSE(handle_.is_initialized()); |
| 427 EXPECT_FALSE(handle_.socket()); | 428 EXPECT_FALSE(handle_.socket()); |
| 428 } | 429 } |
| 429 | 430 |
| 430 TEST_P(HttpProxyClientSocketPoolSpdy2Test, SslClientAuth) { | 431 TEST_P(HttpProxyClientSocketPoolSpdy2Test, SslClientAuth) { |
| 431 if (GetParam() == HTTP) return; | 432 if (GetParam() == HTTP) return; |
| 432 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 433 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); |
| 433 data_->set_connect_data(MockConnect(ASYNC, OK)); | 434 data_->set_connect_data(MockConnect(ASYNC, OK)); |
| 434 socket_factory().AddSocketDataProvider(data_.get()); | 435 socket_factory().AddSocketDataProvider(data_.get()); |
| 435 | 436 |
| 436 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, | 437 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, |
| 437 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 438 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
| 438 if (GetParam() == SPDY) { | 439 if (GetParam() == SPDY) { |
| 439 InitializeSpdySsl(); | 440 InitializeSpdySsl(); |
| 440 } | 441 } |
| 441 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); | 442 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); |
| 442 | 443 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 // HTTPS or SPDY Proxy CONNECT responses are trustworthy | 538 // HTTPS or SPDY Proxy CONNECT responses are trustworthy |
| 538 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv); | 539 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv); |
| 539 EXPECT_TRUE(handle_.is_initialized()); | 540 EXPECT_TRUE(handle_.is_initialized()); |
| 540 EXPECT_TRUE(handle_.socket()); | 541 EXPECT_TRUE(handle_.socket()); |
| 541 } | 542 } |
| 542 } | 543 } |
| 543 | 544 |
| 544 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 545 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
| 545 | 546 |
| 546 } // namespace net | 547 } // namespace net |
| OLD | NEW |