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

Unified Diff: net/http/http_proxy_client_socket_pool_unittest.cc

Issue 3417010: Integrate the SpdyProxyClientSocket into the HttpStreamRequest... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebasing again Created 10 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: net/http/http_proxy_client_socket_pool_unittest.cc
===================================================================
--- net/http/http_proxy_client_socket_pool_unittest.cc (revision 62460)
+++ net/http/http_proxy_client_socket_pool_unittest.cc (working copy)
@@ -19,7 +19,9 @@
#include "net/socket/client_socket_handle.h"
#include "net/socket/client_socket_pool_histograms.h"
#include "net/socket/socket_test_util.h"
+#include "net/spdy/spdy_protocol.h"
#include "net/spdy/spdy_session_pool.h"
+#include "net/spdy/spdy_test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
@@ -28,34 +30,48 @@
const int kMaxSockets = 32;
const int kMaxSocketsPerGroup = 6;
+const char * const kAuthHeaders[] = {
+ "proxy-authorization", "Basic Zm9vOmJhcg=="
+};
+const int kAuthHeadersSize = arraysize(kAuthHeaders) / 2;
enum HttpProxyType {
HTTP,
- HTTPS
+ HTTPS,
+ SPDY
};
typedef ::testing::TestWithParam<HttpProxyType> TestWithHttpParam;
+} // namespace
+
class HttpProxyClientSocketPoolTest : public TestWithHttpParam {
protected:
HttpProxyClientSocketPoolTest()
: ssl_config_(),
ignored_tcp_socket_params_(new TCPSocketParams(
- HostPortPair("proxy", 80), MEDIUM, GURL(), false)),
+ HostPortPair("proxy", 80), LOWEST, GURL(), false)),
ignored_ssl_socket_params_(new SSLSocketParams(
ignored_tcp_socket_params_, NULL, NULL, ProxyServer::SCHEME_DIRECT,
- "host", ssl_config_, 0, false, false)),
+ "www.google.com", ssl_config_, 0, false, false)),
tcp_histograms_("MockTCP"),
tcp_socket_pool_(
kMaxSockets, kMaxSocketsPerGroup,
&tcp_histograms_,
- &tcp_client_socket_factory_),
+ &socket_factory_),
ssl_histograms_("MockSSL"),
+ ssl_config_service_(new SSLConfigServiceDefaults),
+ host_resolver_(new MockHostResolver),
ssl_socket_pool_(kMaxSockets, kMaxSocketsPerGroup,
&ssl_histograms_,
- &tcp_client_socket_factory_,
- &tcp_socket_pool_),
- host_resolver_(new MockHostResolver),
+ host_resolver_.get(),
+ NULL /* dnsrr_resolver */,
+ &socket_factory_,
+ &tcp_socket_pool_,
+ NULL,
+ NULL,
+ ssl_config_service_.get(),
+ BoundNetLog().net_log()),
http_auth_handler_factory_(
HttpAuthHandlerFactory::CreateDefault(host_resolver_.get())),
session_(new HttpNetworkSession(host_resolver_.get(),
@@ -68,6 +84,8 @@
NULL,
NULL)),
http_proxy_histograms_("HttpProxyUnitTest"),
+ ssl_data_(NULL),
+ data_(NULL),
pool_(kMaxSockets, kMaxSocketsPerGroup,
&http_proxy_histograms_,
NULL,
@@ -87,7 +105,7 @@
}
scoped_refptr<TCPSocketParams> GetTcpParams() {
- if (GetParam() == HTTPS)
+ if (GetParam() != HTTP)
return scoped_refptr<TCPSocketParams>();
return ignored_tcp_socket_params_;
}
@@ -105,11 +123,13 @@
new HttpProxySocketParams(
GetTcpParams(),
GetSslParams(),
- GURL("http://host/"),
+ GURL(tunnel ? "https://www.google.com/" : "http://www.google.com"),
"",
- HostPortPair("host", 80),
+ HostPortPair("www.google.com", tunnel ? 443 : 80),
session_->auth_cache(),
session_->http_auth_handler_factory(),
+ session_->spdy_session_pool(),
+ session_->mutable_spdy_settings(),
tunnel));
}
@@ -121,227 +141,363 @@
return GetParams(false);
}
+ DeterministicMockClientSocketFactory& socket_factory() {
+ return socket_factory_;
+ }
+
+ void Initialize(bool async, MockRead* reads, size_t reads_count,
+ MockWrite* writes, size_t writes_count,
+ MockRead* spdy_reads, size_t spdy_reads_count,
+ MockWrite* spdy_writes, size_t spdy_writes_count) {
+ if (GetParam() == SPDY)
+ data_ = new DeterministicSocketData(spdy_reads, spdy_reads_count,
+ spdy_writes, spdy_writes_count);
+ else
+ data_ = new DeterministicSocketData(reads, reads_count, writes,
+ writes_count);
+
+ data_->set_connect_data(MockConnect(async, 0));
+ data_->StopAfter(2); // Request / Response
+
+ socket_factory_.AddSocketDataProvider(data_.get());
+
+ if (GetParam() != HTTP) {
+ ssl_data_.reset(new SSLSocketDataProvider(async, OK));
+ if (GetParam() == SPDY) {
+ InitializeSpdySsl();
+ }
+ socket_factory_.AddSSLSocketDataProvider(ssl_data_.get());
+ }
+ }
+
+ void InitializeSpdySsl() {
+ spdy::SpdyFramer::set_enable_compression_default(false);
+ ssl_data_->next_proto_status = SSLClientSocket::kNextProtoNegotiated;
+ ssl_data_->next_proto = "spdy/2";
+ ssl_data_->was_npn_negotiated = true;
+ }
+
+ private:
SSLConfig ssl_config_;
scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_;
scoped_refptr<SSLSocketParams> ignored_ssl_socket_params_;
ClientSocketPoolHistograms tcp_histograms_;
- MockClientSocketFactory tcp_client_socket_factory_;
+ DeterministicMockClientSocketFactory socket_factory_;
MockTCPClientSocketPool tcp_socket_pool_;
ClientSocketPoolHistograms ssl_histograms_;
- MockSSLClientSocketPool ssl_socket_pool_;
+ scoped_refptr<SSLConfigService> ssl_config_service_;
+ scoped_ptr<HostResolver> host_resolver_;
+ SSLClientSocketPool ssl_socket_pool_;
- MockClientSocketFactory socket_factory_;
- scoped_ptr<HostResolver> host_resolver_;
scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_;
scoped_refptr<HttpNetworkSession> session_;
ClientSocketPoolHistograms http_proxy_histograms_;
+
+ protected:
+ scoped_ptr<SSLSocketDataProvider> ssl_data_;
+ scoped_refptr<DeterministicSocketData> data_;
HttpProxyClientSocketPool pool_;
+ ClientSocketHandle handle_;
+ TestCompletionCallback callback_;
};
//-----------------------------------------------------------------------------
-// All tests are run with three different connection types: SPDY after NPN
-// negotiation, SPDY without SSL, and SPDY with SSL.
+// All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY)
+// and SPDY.
INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests,
HttpProxyClientSocketPoolTest,
- ::testing::Values(HTTP, HTTPS));
+ ::testing::Values(HTTP, HTTPS, SPDY));
TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
- StaticSocketDataProvider data;
- data.set_connect_data(MockConnect(false, 0));
- tcp_client_socket_factory_.AddSocketDataProvider(&data);
+ Initialize(false, NULL, 0, NULL, 0, NULL, 0, NULL, 0);
- ClientSocketHandle handle;
- int rv = handle.Init("a", GetNoTunnelParams(), LOW, NULL, &pool_,
+ int rv = handle_.Init("a", GetNoTunnelParams(), LOW, NULL, &pool_,
BoundNetLog());
EXPECT_EQ(OK, rv);
- EXPECT_TRUE(handle.is_initialized());
- EXPECT_TRUE(handle.socket());
+ EXPECT_TRUE(handle_.is_initialized());
+ ASSERT_TRUE(handle_.socket());
HttpProxyClientSocket* tunnel_socket =
- static_cast<HttpProxyClientSocket*>(handle.socket());
+ static_cast<HttpProxyClientSocket*>(handle_.socket());
EXPECT_TRUE(tunnel_socket->IsConnected());
}
TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) {
MockWrite writes[] = {
- MockWrite("CONNECT host:80 HTTP/1.1\r\n"
- "Host: host\r\n"
- "Proxy-Connection: keep-alive\r\n\r\n"),
+ MockWrite(true, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n"
+ "Host: www.google.com\r\n"
+ "Proxy-Connection: keep-alive\r\n\r\n"),
};
MockRead reads[] = {
- // No credentials.
- MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"),
- MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"),
- MockRead("Content-Length: 10\r\n\r\n"),
- MockRead("0123456789"),
+ // No credentials.
+ MockRead(true, 1, "HTTP/1.1 407 Proxy Authentication Required\r\n"),
+ MockRead(true, 2, "Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"),
+ MockRead(true, 3, "Content-Length: 10\r\n\r\n"),
+ MockRead(true, 4, "0123456789"),
};
- StaticSocketDataProvider data(reads, arraysize(reads), writes,
- arraysize(writes));
+ scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyConnect(NULL, 0, 1));
+ scoped_ptr<spdy::SpdyFrame> rst(ConstructSpdyRstStream(1, spdy::CANCEL));
+ MockWrite spdy_writes[] = {
+ CreateMockWrite(*req, 0, true),
+ CreateMockWrite(*rst, 2, true),
+ };
+ scoped_ptr<spdy::SpdyFrame> resp(
+ ConstructSpdySynReplyError("407 Proxy Authentication Required", 1));
+ MockRead spdy_reads[] = {
+ CreateMockWrite(*resp, 1, true),
+ MockRead(true, 0, 3)
+ };
- tcp_client_socket_factory_.AddSocketDataProvider(&data);
+ Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
+ spdy_reads, arraysize(spdy_reads), spdy_writes,
+ arraysize(spdy_writes));
- ClientSocketHandle handle;
- TestCompletionCallback callback;
- int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, &pool_,
+ data_->StopAfter(4);
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
- EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult());
- EXPECT_TRUE(handle.is_initialized());
- EXPECT_TRUE(handle.socket());
- HttpProxyClientSocket* tunnel_socket =
- static_cast<HttpProxyClientSocket*>(handle.socket());
- EXPECT_FALSE(tunnel_socket->IsConnected());
+ data_->RunFor(4);
+ rv = callback_.WaitForResult();
+ if (GetParam() != SPDY) {
+ EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv);
+ EXPECT_TRUE(handle_.is_initialized());
+ ASSERT_TRUE(handle_.socket());
+ HttpProxyClientSocket* tunnel_socket =
+ static_cast<HttpProxyClientSocket*>(handle_.socket());
+ EXPECT_FALSE(tunnel_socket->IsConnected());
+ EXPECT_FALSE(tunnel_socket->using_spdy());
+ } else {
+ // Proxy auth is not really implemented for SPDY yet
+ EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv);
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
+ }
}
TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
+ // It's pretty much impossible to make the SPDY case becave synchronously
+ // so we skip this test for SPDY
+ if (GetParam() == SPDY)
+ return;
MockWrite writes[] = {
- MockWrite(false,
- "CONNECT host:80 HTTP/1.1\r\n"
- "Host: host\r\n"
- "Proxy-Connection: keep-alive\r\n"
- "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
+ MockWrite(false, 0,
+ "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"),
};
MockRead reads[] = {
- MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"),
+ MockRead(false, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
};
- StaticSocketDataProvider data(reads, arraysize(reads), writes,
- arraysize(writes));
- data.set_connect_data(MockConnect(false, 0));
- tcp_client_socket_factory_.AddSocketDataProvider(&data);
+ Initialize(false, reads, arraysize(reads), writes, arraysize(writes), NULL, 0,
+ NULL, 0);
AddAuthToCache();
- ClientSocketHandle handle;
- TestCompletionCallback callback;
- int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, &pool_,
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
BoundNetLog());
EXPECT_EQ(OK, rv);
- EXPECT_TRUE(handle.is_initialized());
- EXPECT_TRUE(handle.socket());
+ EXPECT_TRUE(handle_.is_initialized());
+ ASSERT_TRUE(handle_.socket());
HttpProxyClientSocket* tunnel_socket =
- static_cast<HttpProxyClientSocket*>(handle.socket());
+ static_cast<HttpProxyClientSocket*>(handle_.socket());
EXPECT_TRUE(tunnel_socket->IsConnected());
}
TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
MockWrite writes[] = {
- MockWrite("CONNECT host:80 HTTP/1.1\r\n"
- "Host: host\r\n"
- "Proxy-Connection: keep-alive\r\n"
- "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
+ MockWrite("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"),
};
MockRead reads[] = {
- MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"),
+ MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"),
};
- StaticSocketDataProvider data(reads, arraysize(reads), writes,
- arraysize(writes));
- tcp_client_socket_factory_.AddSocketDataProvider(&data);
+ scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyConnect(kAuthHeaders,
+ kAuthHeadersSize, 1));
+ MockWrite spdy_writes[] = {
+ CreateMockWrite(*req, 0, true)
+ };
+ scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
+ MockRead spdy_reads[] = {
+ CreateMockRead(*resp, 1, true),
+ MockRead(true, 0, 2)
+ };
+
+ Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
+ spdy_reads, arraysize(spdy_reads), spdy_writes,
+ arraysize(spdy_writes));
AddAuthToCache();
- ClientSocketHandle handle;
- TestCompletionCallback callback;
- int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, &pool_,
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
- EXPECT_EQ(OK, callback.WaitForResult());
- EXPECT_TRUE(handle.is_initialized());
- EXPECT_TRUE(handle.socket());
+ data_->RunFor(2);
+ EXPECT_EQ(OK, callback_.WaitForResult());
+ EXPECT_TRUE(handle_.is_initialized());
+ ASSERT_TRUE(handle_.socket());
HttpProxyClientSocket* tunnel_socket =
- static_cast<HttpProxyClientSocket*>(handle.socket());
+ static_cast<HttpProxyClientSocket*>(handle_.socket());
EXPECT_TRUE(tunnel_socket->IsConnected());
}
TEST_P(HttpProxyClientSocketPoolTest, TCPError) {
- StaticSocketDataProvider data;
- data.set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED));
+ if (GetParam() == SPDY) return;
+ data_ = new DeterministicSocketData(NULL, 0, NULL, 0);
+ data_->set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED));
- tcp_client_socket_factory_.AddSocketDataProvider(&data);
+ socket_factory().AddSocketDataProvider(data_.get());
- ClientSocketHandle handle;
- TestCompletionCallback callback;
- int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, &pool_,
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
- if (GetParam() == HTTP)
- EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult());
- else
- EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
+ EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult());
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
}
+TEST_P(HttpProxyClientSocketPoolTest, SSLError) {
+ if (GetParam() == HTTP) return;
+ data_ = new DeterministicSocketData(NULL, 0, NULL, 0);
+ data_->set_connect_data(MockConnect(true, OK));
+ socket_factory().AddSocketDataProvider(data_.get());
+
+ ssl_data_.reset(new SSLSocketDataProvider(true,
+ ERR_CERT_AUTHORITY_INVALID));
+ if (GetParam() == SPDY) {
+ InitializeSpdySsl();
+ }
+ socket_factory().AddSSLSocketDataProvider(ssl_data_.get());
+
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
+ BoundNetLog());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
+
+ EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult());
+
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
+}
+
+TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) {
+ if (GetParam() == HTTP) return;
+ data_ = new DeterministicSocketData(NULL, 0, NULL, 0);
+ data_->set_connect_data(MockConnect(true, OK));
+ socket_factory().AddSocketDataProvider(data_.get());
+
+ ssl_data_.reset(new SSLSocketDataProvider(true,
+ ERR_SSL_CLIENT_AUTH_CERT_NEEDED));
+ if (GetParam() == SPDY) {
+ InitializeSpdySsl();
+ }
+ socket_factory().AddSSLSocketDataProvider(ssl_data_.get());
+
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
+ BoundNetLog());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
+
+ EXPECT_EQ(ERR_PROXY_AUTH_UNSUPPORTED, callback_.WaitForResult());
+
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
+}
+
TEST_P(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) {
MockWrite writes[] = {
- MockWrite("CONNECT host:80 HTTP/1.1\r\n"
- "Host: host\r\n"
- "Proxy-Connection: keep-alive\r\n"
- "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
+ MockWrite(true, 0,
+ "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"),
};
MockRead reads[] = {
- MockRead("HTTP/1.1 200 Conn"),
- MockRead(true, ERR_CONNECTION_CLOSED),
+ MockRead(true, 1, "HTTP/1.1 200 Conn"),
+ MockRead(true, ERR_CONNECTION_CLOSED, 2),
};
- StaticSocketDataProvider data(reads, arraysize(reads), writes,
- arraysize(writes));
+ scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyConnect(kAuthHeaders,
+ kAuthHeadersSize, 1));
+ MockWrite spdy_writes[] = {
+ CreateMockWrite(*req, 0, true)
+ };
+ MockRead spdy_reads[] = {
+ MockRead(true, ERR_CONNECTION_CLOSED, 1),
+ };
- tcp_client_socket_factory_.AddSocketDataProvider(&data);
+ Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
+ spdy_reads, arraysize(spdy_reads), spdy_writes,
+ arraysize(spdy_writes));
AddAuthToCache();
- ClientSocketHandle handle;
- TestCompletionCallback callback;
- int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, &pool_,
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
- EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ data_->RunFor(3);
+ EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
}
TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) {
MockWrite writes[] = {
- MockWrite("CONNECT host:80 HTTP/1.1\r\n"
- "Host: host\r\n"
- "Proxy-Connection: keep-alive\r\n"
- "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
+ MockWrite(true, 0,
+ "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"),
};
MockRead reads[] = {
- MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"),
+ MockRead(true, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"),
};
- StaticSocketDataProvider data(reads, arraysize(reads), writes,
- arraysize(writes));
+ scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyConnect(kAuthHeaders,
+ kAuthHeadersSize, 1));
+ scoped_ptr<spdy::SpdyFrame> rst(ConstructSpdyRstStream(1, spdy::CANCEL));
+ MockWrite spdy_writes[] = {
+ CreateMockWrite(*req, 0, true),
+ CreateMockWrite(*rst, 2, true),
+ };
+ scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdySynReplyError(1));
+ MockRead spdy_reads[] = {
+ CreateMockRead(*resp, 1, true),
+ MockRead(true, 0, 3),
+ };
- tcp_client_socket_factory_.AddSocketDataProvider(&data);
+ Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
+ spdy_reads, arraysize(spdy_reads), spdy_writes,
+ arraysize(spdy_writes));
AddAuthToCache();
- ClientSocketHandle handle;
- TestCompletionCallback callback;
- int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, &pool_,
+ int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_,
BoundNetLog());
EXPECT_EQ(ERR_IO_PENDING, rv);
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
- EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback.WaitForResult());
- EXPECT_FALSE(handle.is_initialized());
- EXPECT_FALSE(handle.socket());
+ data_->RunFor(2);
+
+ EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult());
+ EXPECT_FALSE(handle_.is_initialized());
+ EXPECT_FALSE(handle_.socket());
}
// It would be nice to also test the timeouts in HttpProxyClientSocketPool.
-} // namespace
-
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698