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

Unified Diff: net/http/http_stream_factory_impl_unittest.cc

Issue 981633002: Created new URLRequestContext for secure proxy check (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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_stream_factory_impl_unittest.cc
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc
index e55aff50b27d06ee5a10e9e187311e7c0dca3041..b1feda1813a9d990a8d146d5b2c533076d885886 100644
--- a/net/http/http_stream_factory_impl_unittest.cc
+++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "net/base/capturing_net_log.h"
#include "net/base/net_log.h"
#include "net/base/test_completion_callback.h"
#include "net/cert/mock_cert_verifier.h"
@@ -24,6 +25,9 @@
#include "net/http/transport_security_state.h"
#include "net/proxy/proxy_info.h"
#include "net/proxy/proxy_service.h"
+#include "net/quic/test_tools/mock_clock.h"
+#include "net/quic/test_tools/mock_crypto_client_stream_factory.h"
+#include "net/quic/test_tools/mock_random.h"
#include "net/socket/client_socket_handle.h"
#include "net/socket/mock_client_socket_pool_manager.h"
#include "net/socket/next_proto.h"
@@ -1108,57 +1112,161 @@ TEST_P(HttpStreamFactoryTest, RequestWebSocketBasicHandshakeStreamOverProxy) {
EXPECT_FALSE(waiter.used_proxy_info().is_direct());
}
+TEST_P(HttpStreamFactoryTest, RequestQuicHTTPStream) {
+ for (int i = 0; i <= 1; i++) {
+ scoped_ptr<ProxyService> proxy_service;
+ proxy_service.reset(ProxyService::CreateFixedFromPacResult("DIRECT"));
+
+ HttpNetworkSession::Params params;
+ MockClock* clock_ = new MockClock();
+ MockRandom random_generator_;
+ MockCryptoClientStreamFactory crypto_client_stream_factory_;
+ MockCertVerifier cert_verifier_;
+
+ params.enable_quic = true;
+ params.enable_quic_for_proxies = true;
+ scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
+ new SSLConfigServiceDefaults);
+ HttpServerPropertiesImpl http_server_properties;
+ MockClientSocketFactory socket_factory;
+ params.client_socket_factory = &socket_factory;
+ MockHostResolver host_resolver;
+ params.host_resolver = &host_resolver;
+ TransportSecurityState transport_security_state;
+ params.transport_security_state = &transport_security_state;
+ params.proxy_service = proxy_service.get();
+ params.ssl_config_service = ssl_config_service.get();
+ params.http_server_properties = http_server_properties.GetWeakPtr();
+ params.use_alternate_protocols = true;
+ params.next_protos = NextProtosWithSpdyAndQuic(true, true);
+ params.quic_clock = clock_;
+ clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
+ params.quic_random = &random_generator_;
+ params.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
+ params.cert_verifier = &cert_verifier_;
+ scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_;
+ params.http_auth_handler_factory = auth_handler_factory_.get();
+ params.quic_supported_versions.push_back(QUIC_VERSION_24);
+
+ params.origin_to_force_quic_on =
+ HostPortPair::FromString("www.google.com:80");
+
+ scoped_refptr<HttpNetworkSession> session;
+ session = new HttpNetworkSession(params);
+ session->quic_stream_factory()->set_require_confirmation(false);
+
+ MockRead http_reads[] = {
+ MockRead("HTTP/1.1 200 OK\r\n"),
+ MockRead("Alternate-Protocol: 80:quic\r\n\r\n"),
+ MockRead("hello world"),
+ MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
+ MockRead(ASYNC, OK),
+ };
+
+ HttpRequestInfo request_info;
+ request_info.method = "GET";
+ request_info.url = GURL("http://www.google.com");
+
+ request_info.load_flags = 0;
+ if (i == 1) {
+ request_info.load_flags = LOAD_UNENCRYPTED_HTTP11;
+ }
+
+ SSLConfig ssl_config;
+ EXPECT_TRUE(params.enable_quic) << i;
+
+ StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
+ nullptr, 0);
+ socket_factory.AddSocketDataProvider(&http_data);
+
+ scoped_ptr<HttpNetworkTransaction> trans(
+ new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
+
+ CapturingBoundNetLog net_log_;
+ TestCompletionCallback callback;
+
+ int rv = trans.get()->Start(&request_info, callback.callback(),
+ net_log_.bound());
+ EXPECT_EQ(ERR_IO_PENDING, rv) << i;
+ EXPECT_EQ(i == 0, OK != callback.WaitForResult());
+
+ const HttpResponseInfo* response = trans->GetResponseInfo();
+ EXPECT_EQ(i == 0, response == nullptr) << i;
+ if (i == 0) {
+ // When LOAD_UNENCRYPTED_HTTP11 is not enabled, request fails because
+ // there is no QUIC mock socket.
+ continue;
+ }
+ ASSERT_TRUE(response->headers.get() != nullptr) << i;
+ EXPECT_FALSE(response->was_fetched_via_spdy) << i;
+ EXPECT_FALSE(response->was_npn_negotiated) << i;
+
+ EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP1,
+ response->connection_info)
+ << i;
+
+ EXPECT_EQ(i == 1, http_server_properties.RequiresHTTP11(
+ HostPortPair::FromString("www.google.com:80")))
+ << i;
+ }
+}
+
TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) {
- SpdySessionDependencies session_deps(GetParam(),
- ProxyService::CreateDirect());
+ for (int i = 0; i <= 1; i++) {
+ SpdySessionDependencies session_deps(GetParam(),
+ ProxyService::CreateDirect());
- MockRead mock_read(ASYNC, OK);
- DeterministicSocketData socket_data(&mock_read, 1, nullptr, 0);
- socket_data.set_connect_data(MockConnect(ASYNC, OK));
- session_deps.deterministic_socket_factory->AddSocketDataProvider(
- &socket_data);
+ MockRead mock_read(ASYNC, OK);
+ DeterministicSocketData socket_data(&mock_read, 1, nullptr, 0);
+ socket_data.set_connect_data(MockConnect(ASYNC, OK));
+ session_deps.deterministic_socket_factory->AddSocketDataProvider(
+ &socket_data);
- SSLSocketDataProvider ssl_socket_data(ASYNC, OK);
- ssl_socket_data.SetNextProto(GetParam());
- session_deps.deterministic_socket_factory->AddSSLSocketDataProvider(
- &ssl_socket_data);
+ SSLSocketDataProvider ssl_socket_data(ASYNC, OK);
+ ssl_socket_data.SetNextProto(GetParam());
+ session_deps.deterministic_socket_factory->AddSSLSocketDataProvider(
+ &ssl_socket_data);
- HostPortPair host_port_pair("www.google.com", 443);
- scoped_refptr<HttpNetworkSession>
- session(SpdySessionDependencies::SpdyCreateSessionDeterministic(
- &session_deps));
+ HostPortPair host_port_pair("www.google.com", 443);
+ scoped_refptr<HttpNetworkSession> session(
+ SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps));
- // Now request a stream.
- HttpRequestInfo request_info;
- request_info.method = "GET";
- request_info.url = GURL("https://www.google.com");
- request_info.load_flags = 0;
+ // Now request a stream.
+ HttpRequestInfo request_info;
+ request_info.method = "GET";
+ request_info.url = GURL("https://www.google.com");
+ request_info.load_flags = 0;
+ if (i == 1) {
+ request_info.load_flags = LOAD_UNENCRYPTED_HTTP11;
+ }
- SSLConfig ssl_config;
- StreamRequestWaiter waiter;
- scoped_ptr<HttpStreamRequest> request(
- session->http_stream_factory()->RequestStream(
- request_info,
- DEFAULT_PRIORITY,
- ssl_config,
- ssl_config,
- &waiter,
- BoundNetLog()));
- waiter.WaitForStream();
- EXPECT_TRUE(waiter.stream_done());
- EXPECT_TRUE(nullptr == waiter.websocket_stream());
- ASSERT_TRUE(nullptr != waiter.stream());
- EXPECT_TRUE(waiter.stream()->IsSpdyHttpStream());
- EXPECT_EQ(1, GetSocketPoolGroupCount(
- session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
- EXPECT_EQ(1, GetSocketPoolGroupCount(
- session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
- EXPECT_EQ(0, GetSocketPoolGroupCount(
- session->GetTransportSocketPool(
- HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
- EXPECT_EQ(0, GetSocketPoolGroupCount(
- session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
- EXPECT_TRUE(waiter.used_proxy_info().is_direct());
+ SSLConfig ssl_config;
+ StreamRequestWaiter waiter;
+ scoped_ptr<HttpStreamRequest> request(
+ session->http_stream_factory()->RequestStream(
+ request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
+ BoundNetLog()));
+ waiter.WaitForStream();
+ EXPECT_TRUE(waiter.stream_done());
+ EXPECT_TRUE(nullptr == waiter.websocket_stream());
+ ASSERT_TRUE(nullptr != waiter.stream());
+ EXPECT_EQ(i == 0, waiter.stream()->IsSpdyHttpStream());
+ EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetTransportSocketPool(
+ HttpNetworkSession::NORMAL_SOCKET_POOL)));
+ EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSSLSocketPool(
+ HttpNetworkSession::NORMAL_SOCKET_POOL)));
+ EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetTransportSocketPool(
+ HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
+ EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool(
+ HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
+ EXPECT_TRUE(waiter.used_proxy_info().is_direct());
+
+ base::WeakPtr<HttpServerProperties> http_server_properties =
+ session->http_server_properties();
+
+ EXPECT_EQ(i == 1, http_server_properties->RequiresHTTP11(host_port_pair))
+ << i;
+ }
}
// TODO(ricea): This test can be removed once the new WebSocket stack supports

Powered by Google App Engine
This is Rietveld 408576698