Chromium Code Reviews| Index: net/http/http_proxy_client_socket_pool_unittest.cc |
| diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc |
| index f2464919e3a72e53a9a3c66a76db1490d50b98f5..00b92102e788a02c5caea91142ec7a3f0dac07b4 100644 |
| --- a/net/http/http_proxy_client_socket_pool_unittest.cc |
| +++ b/net/http/http_proxy_client_socket_pool_unittest.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/strings/string_util.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "net/base/net_errors.h" |
| +#include "net/base/proxy_delegate.h" |
| #include "net/base/test_completion_callback.h" |
| #include "net/http/http_network_session.h" |
| #include "net/http/http_proxy_client_socket.h" |
| @@ -58,6 +59,79 @@ typedef ::testing::TestWithParam<HttpProxyType> TestWithHttpParam; |
| const char kHttpProxyHost[] = "httpproxy.example.com"; |
| const char kHttpsProxyHost[] = "httpsproxy.example.com"; |
| +class TestProxyDelegate : public ProxyDelegate { |
| + public: |
| + TestProxyDelegate() |
| + : on_before_tunnel_request_called_(false), |
| + on_tunnel_headers_received_called_(false) { |
| + } |
| + |
| + virtual ~TestProxyDelegate() OVERRIDE { |
| + } |
| + |
| + bool on_before_tunnel_request_called() const { |
| + return on_before_tunnel_request_called_; |
| + } |
| + |
| + bool on_tunnel_headers_received_called() const { |
| + return on_tunnel_headers_received_called_; |
| + } |
| + |
| + void VerifyOnTunnelHeadersReceived(const std::string& origin, |
| + const std::string& proxy_server, |
| + const std::string& status_line) const { |
| + EXPECT_TRUE(on_tunnel_headers_received_called_); |
| + EXPECT_TRUE(HostPortPair::FromString(origin).Equals( |
| + on_tunnel_headers_received_origin_)); |
| + EXPECT_TRUE(HostPortPair::FromString(proxy_server).Equals( |
| + on_tunnel_headers_received_proxy_server_)); |
| + EXPECT_EQ(status_line, on_tunnel_headers_received_status_line_); |
| + } |
| + |
| + // ProxyDelegate: |
| + virtual void OnResolveProxy(const GURL& url, |
| + int load_flags, |
| + const ProxyService& proxy_service, |
| + ProxyInfo* result) OVERRIDE { |
| + } |
| + |
| + virtual void OnFallback(const ProxyServer& bad_proxy, |
| + int net_error) OVERRIDE { |
| + } |
| + |
| + virtual void OnBeforeSendHeaders(URLRequest* request, |
| + const ProxyInfo& proxy_info, |
| + HttpRequestHeaders* headers) OVERRIDE { |
| + } |
| + |
| + virtual void OnBeforeTunnelRequest( |
| + const net::HostPortPair& proxy_server, |
| + net::HttpRequestHeaders* extra_headers) OVERRIDE { |
| + on_before_tunnel_request_called_ = true; |
| + if (extra_headers) { |
| + extra_headers->SetHeader("Foo", proxy_server.ToString()); |
| + } |
| + } |
| + |
| + virtual void OnTunnelHeadersReceived( |
| + const net::HostPortPair& origin, |
| + const net::HostPortPair& proxy_server, |
| + const net::HttpResponseHeaders& response_headers) OVERRIDE { |
| + on_tunnel_headers_received_called_ = true; |
| + on_tunnel_headers_received_origin_ = origin; |
| + on_tunnel_headers_received_proxy_server_ = proxy_server; |
| + on_tunnel_headers_received_status_line_ = response_headers.GetStatusLine(); |
| + } |
| + |
| + private: |
| + bool on_before_tunnel_request_called_; |
| + bool on_tunnel_headers_received_called_; |
| + HostPortPair on_tunnel_headers_received_origin_; |
| + HostPortPair on_tunnel_headers_received_proxy_server_; |
| + std::string on_tunnel_headers_received_status_line_; |
| +}; |
| + |
| + |
| class HttpProxyClientSocketPoolTest |
| : public ::testing::TestWithParam<HttpProxyClientSocketPoolTestParams> { |
| protected: |
| @@ -95,6 +169,7 @@ class HttpProxyClientSocketPoolTest |
| NULL, |
| &transport_socket_pool_, |
| &ssl_socket_pool_, |
| + NULL, |
| NULL) {} |
| virtual ~HttpProxyClientSocketPoolTest() { |
| @@ -144,7 +219,9 @@ class HttpProxyClientSocketPoolTest |
| // Returns the a correctly constructed HttpProxyParms |
| // for the HTTP or HTTPS proxy. |
| - scoped_refptr<HttpProxySocketParams> CreateParams(bool tunnel) { |
| + scoped_refptr<HttpProxySocketParams> CreateParams( |
| + bool tunnel, |
| + ProxyDelegate* proxy_delegate) { |
| return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams( |
| CreateHttpProxyParams(), |
| CreateHttpsProxyParams(), |
| @@ -154,15 +231,18 @@ class HttpProxyClientSocketPoolTest |
| session_->http_auth_cache(), |
| session_->http_auth_handler_factory(), |
| session_->spdy_session_pool(), |
| - tunnel)); |
| + tunnel, |
| + proxy_delegate)); |
| } |
| - scoped_refptr<HttpProxySocketParams> CreateTunnelParams() { |
| - return CreateParams(true); |
| + scoped_refptr<HttpProxySocketParams> CreateTunnelParams( |
| + ProxyDelegate* proxy_delegate) { |
| + return CreateParams(true, proxy_delegate); |
| } |
| - scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams() { |
| - return CreateParams(false); |
| + scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams( |
| + ProxyDelegate* proxy_delegate) { |
| + return CreateParams(false, proxy_delegate); |
| } |
| DeterministicMockClientSocketFactory* socket_factory() { |
| @@ -208,6 +288,7 @@ class HttpProxyClientSocketPoolTest |
| return transport_socket_pool_.last_request_priority(); |
| } |
| + |
|
mef
2014/09/10 15:05:25
nit: spurious nl.
bengr
2014/09/10 19:18:59
Done.
|
| private: |
| SpdySessionDependencies session_deps_; |
| @@ -256,14 +337,17 @@ INSTANTIATE_TEST_CASE_P( |
| TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
| Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| - int rv = handle_.Init("a", CreateNoTunnelParams(), LOW, CompletionCallback(), |
| - &pool_, BoundNetLog()); |
| + scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| + int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW, |
| + CompletionCallback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(handle_.is_initialized()); |
| ASSERT_TRUE(handle_.socket()); |
| HttpProxyClientSocket* tunnel_socket = |
| static_cast<HttpProxyClientSocket*>(handle_.socket()); |
| EXPECT_TRUE(tunnel_socket->IsConnected()); |
| + EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called()); |
| + EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called()); |
| } |
| // Make sure that HttpProxyConnectJob passes on its priority to its |
| @@ -271,7 +355,7 @@ TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
| TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
| Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
| EXPECT_EQ(OK, |
| - handle_.Init("a", CreateNoTunnelParams(), HIGHEST, |
| + handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST, |
| CompletionCallback(), &pool_, BoundNetLog())); |
| EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); |
| } |
| @@ -313,8 +397,8 @@ TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
| arraysize(spdy_writes)); |
| data_->StopAfter(4); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -345,7 +429,8 @@ TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { |
| "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| "Host: www.google.com\r\n" |
| "Proxy-Connection: keep-alive\r\n" |
| - "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| + "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n" |
| + "Foo: httpproxy.example.com:80\r\n\r\n"), |
| }; |
| MockRead reads[] = { |
| MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
| @@ -355,14 +440,19 @@ TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { |
| NULL, 0); |
| AddAuthToCache(); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
| + int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(handle_.is_initialized()); |
| ASSERT_TRUE(handle_.socket()); |
| HttpProxyClientSocket* tunnel_socket = |
| static_cast<HttpProxyClientSocket*>(handle_.socket()); |
| EXPECT_TRUE(tunnel_socket->IsConnected()); |
| + proxy_delegate->VerifyOnTunnelHeadersReceived( |
| + "www.google.com:443", |
| + "httpproxy.example.com:80", |
| + "HTTP/1.1 200 Connection Established"); |
| } |
| TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { |
| @@ -392,8 +482,8 @@ TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { |
| arraysize(spdy_writes)); |
| AddAuthToCache(); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -432,7 +522,7 @@ TEST_P(HttpProxyClientSocketPoolTest, |
| AddAuthToCache(); |
| EXPECT_EQ(ERR_IO_PENDING, |
| - handle_.Init("a", CreateTunnelParams(), MEDIUM, |
| + handle_.Init("a", CreateTunnelParams(NULL), MEDIUM, |
| callback_.callback(), &pool_, BoundNetLog())); |
| EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); |
| @@ -447,8 +537,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
| socket_factory()->AddSocketDataProvider(data_.get()); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -472,8 +562,8 @@ TEST_P(HttpProxyClientSocketPoolTest, SSLError) { |
| } |
| socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -497,8 +587,8 @@ TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { |
| } |
| socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -535,8 +625,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) { |
| arraysize(spdy_writes)); |
| AddAuthToCache(); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -574,8 +664,8 @@ TEST_P(HttpProxyClientSocketPoolTest, Tunnel1xxResponse) { |
| Initialize(reads, arraysize(reads), writes, arraysize(writes), |
| NULL, 0, NULL, 0); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -614,8 +704,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
| arraysize(spdy_writes)); |
| AddAuthToCache(); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |
| @@ -676,8 +766,8 @@ TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupRedirect) { |
| arraysize(spdy_writes)); |
| AddAuthToCache(); |
| - int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), |
| - &pool_, BoundNetLog()); |
| + int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW, |
| + callback_.callback(), &pool_, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_FALSE(handle_.is_initialized()); |
| EXPECT_FALSE(handle_.socket()); |