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

Unified Diff: net/http/http_stream_factory_impl_unittest.cc

Issue 1502453003: QUIC - Disable Preconnect when QUIC can be spoken to a server with 0RTT (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test name Created 5 years 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
« no previous file with comments | « net/http/http_stream_factory_impl.cc ('k') | net/net.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 637b612401c128e757e14e12b87b6b25f62de690..92c81cfdeb72c3b6552c3760d0f0d1beae856a24 100644
--- a/net/http/http_stream_factory_impl_unittest.cc
+++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -27,6 +27,8 @@
#include "net/log/net_log.h"
#include "net/proxy/proxy_info.h"
#include "net/proxy/proxy_service.h"
+#include "net/quic/quic_server_id.h"
+#include "net/quic/test_tools/quic_stream_factory_peer.h"
#include "net/socket/client_socket_handle.h"
#include "net/socket/mock_client_socket_pool_manager.h"
#include "net/socket/next_proto.h"
@@ -116,7 +118,6 @@ class MockHttpStreamFactoryImplForPreconnect : public HttpStreamFactoryImpl {
preconnect_done_(false),
waiting_for_preconnect_(false) {}
-
void WaitForPreconnects() {
while (!preconnect_done_) {
waiting_for_preconnect_ = true;
@@ -639,6 +640,7 @@ TEST_P(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) {
HttpNetworkSession::Params params;
params.enable_quic = true;
+ params.quic_disable_preconnect_if_0rtt = false;
params.enable_quic_for_proxies = true;
scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
new SSLConfigServiceDefaults);
@@ -700,6 +702,7 @@ TEST_P(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) {
HttpNetworkSession::Params params;
params.enable_quic = true;
params.enable_quic_for_proxies = true;
+ params.quic_disable_preconnect_if_0rtt = false;
scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
new SSLConfigServiceDefaults);
HttpServerPropertiesImpl http_server_properties;
@@ -748,6 +751,105 @@ TEST_P(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) {
EXPECT_TRUE(iter != retry_info.end());
}
+TEST_P(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) {
+ for (int num_streams = 1; num_streams < 3; ++num_streams) {
+ GURL url = GURL("https://www.google.com");
+
+ // Set up QUIC as alternative_service.
+ HttpServerPropertiesImpl http_server_properties;
+ const AlternativeService alternative_service(QUIC, url.host().c_str(),
+ url.IntPort());
+ AlternativeServiceInfoVector alternative_service_info_vector;
+ base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
+ alternative_service_info_vector.push_back(
+ AlternativeServiceInfo(alternative_service, 1.0, expiration));
+ HostPortPair host_port_pair(alternative_service.host_port_pair());
+ http_server_properties.SetAlternativeServices(
+ host_port_pair, alternative_service_info_vector);
+
+ SpdySessionDependencies session_deps(
+ GetParam(), ProxyService::CreateFixed("http_proxy"));
+
+ // Setup params to disable preconnect, but QUIC doesn't 0RTT.
+ HttpNetworkSession::Params params =
+ SpdySessionDependencies::CreateSessionParams(&session_deps);
+ params.enable_quic = true;
+ params.quic_disable_preconnect_if_0rtt = true;
+ params.http_server_properties = http_server_properties.GetWeakPtr();
+
+ scoped_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
+ HttpNetworkSessionPeer peer(session.get());
+ HostPortPair proxy_host("http_proxy", 80);
+ CapturePreconnectsHttpProxySocketPool* http_proxy_pool =
+ new CapturePreconnectsHttpProxySocketPool(
+ session_deps.host_resolver.get(), session_deps.cert_verifier.get());
+ CapturePreconnectsSSLSocketPool* ssl_conn_pool =
+ new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(),
+ session_deps.cert_verifier.get());
+ scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
+ new MockClientSocketPoolManager);
+ mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool);
+ mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
+ peer.SetClientSocketPoolManager(mock_pool_manager.Pass());
+ PreconnectHelperForURL(num_streams, url, session.get());
+ EXPECT_EQ(num_streams, ssl_conn_pool->last_num_streams());
+ }
+}
+
+TEST_P(HttpStreamFactoryTest, QuicDisablePreConnectIfZeroRtt) {
+ for (int num_streams = 1; num_streams < 3; ++num_streams) {
+ GURL url = GURL("https://www.google.com");
+
+ // Set up QUIC as alternative_service.
+ HttpServerPropertiesImpl http_server_properties;
+ const AlternativeService alternative_service(QUIC, "www.google.com", 443);
+ AlternativeServiceInfoVector alternative_service_info_vector;
+ base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
+ alternative_service_info_vector.push_back(
+ AlternativeServiceInfo(alternative_service, 1.0, expiration));
+ HostPortPair host_port_pair(alternative_service.host_port_pair());
+ http_server_properties.SetAlternativeServices(
+ host_port_pair, alternative_service_info_vector);
+
+ SpdySessionDependencies session_deps(GetParam());
+
+ // Setup params to disable preconnect, but QUIC does 0RTT.
+ HttpNetworkSession::Params params =
+ SpdySessionDependencies::CreateSessionParams(&session_deps);
+ params.enable_quic = true;
+ params.quic_disable_preconnect_if_0rtt = true;
+ params.http_server_properties = http_server_properties.GetWeakPtr();
+
+ scoped_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
+
+ // Setup 0RTT for QUIC.
+ QuicStreamFactory* factory = session->quic_stream_factory();
+ factory->set_require_confirmation(false);
+ test::QuicStreamFactoryPeer::CacheDummyServerConfig(
+ factory, QuicServerId(host_port_pair, PRIVACY_MODE_DISABLED));
+
+ HttpNetworkSessionPeer peer(session.get());
+ CapturePreconnectsTransportSocketPool* transport_conn_pool =
+ new CapturePreconnectsTransportSocketPool(
+ session_deps.host_resolver.get(), session_deps.cert_verifier.get());
+ scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
+ new MockClientSocketPoolManager);
+ mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
+ peer.SetClientSocketPoolManager(mock_pool_manager.Pass());
+
+ HttpRequestInfo request;
+ request.method = "GET";
+ request.url = url;
+ request.load_flags = 0;
+
+ SSLConfig ssl_config;
+ session->ssl_config_service()->GetSSLConfig(&ssl_config);
+ session->http_stream_factory()->PreconnectStreams(num_streams, request,
+ ssl_config, ssl_config);
+ EXPECT_EQ(-1, transport_conn_pool->last_num_streams());
+ }
+}
+
namespace {
TEST_P(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) {
« no previous file with comments | « net/http/http_stream_factory_impl.cc ('k') | net/net.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698