| 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 2a00dfc194c06e0bd6ebf512c619d843623f0b13..c007c12887b4bc3d94f4bb0fcb091e7527f583ec 100644
|
| --- a/net/http/http_stream_factory_impl_unittest.cc
|
| +++ b/net/http/http_stream_factory_impl_unittest.cc
|
| @@ -1091,6 +1091,70 @@
|
| }
|
| }
|
|
|
| +TEST_F(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) {
|
| + // Checks if a
|
| + std::unique_ptr<ProxyService> proxy_service;
|
| + proxy_service = ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT");
|
| +
|
| + HttpNetworkSession::Params params;
|
| + params.enable_quic = true;
|
| + params.quic_disable_preconnect_if_0rtt = false;
|
| + 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;
|
| + MockCertVerifier cert_verifier;
|
| + params.cert_verifier = &cert_verifier;
|
| + TransportSecurityState transport_security_state;
|
| + params.transport_security_state = &transport_security_state;
|
| + MultiLogCTVerifier ct_verifier;
|
| + params.cert_transparency_verifier = &ct_verifier;
|
| + CTPolicyEnforcer ct_policy_enforcer;
|
| + params.ct_policy_enforcer = &ct_policy_enforcer;
|
| + params.proxy_service = proxy_service.get();
|
| + params.ssl_config_service = ssl_config_service.get();
|
| + params.http_server_properties = &http_server_properties;
|
| + params.quic_max_number_of_lossy_connections = 2;
|
| +
|
| + std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
|
| + session->quic_stream_factory()->set_require_confirmation(false);
|
| +
|
| + session->quic_stream_factory()->number_of_lossy_connections_[99] =
|
| + params.quic_max_number_of_lossy_connections;
|
| + session->quic_stream_factory()->MaybeDisableQuic(99);
|
| + ASSERT_TRUE(session->quic_stream_factory()->IsQuicDisabled(99));
|
| +
|
| + StaticSocketDataProvider socket_data2;
|
| + socket_data2.set_connect_data(MockConnect(ASYNC, OK));
|
| + socket_factory.AddSocketDataProvider(&socket_data2);
|
| +
|
| + // Now request a stream. It should succeed using the second proxy in the
|
| + // list.
|
| + HttpRequestInfo request_info;
|
| + request_info.method = "GET";
|
| + request_info.url = GURL("http://www.google.com");
|
| +
|
| + SSLConfig ssl_config;
|
| + StreamRequestWaiter waiter;
|
| + std::unique_ptr<HttpStreamRequest> request(
|
| + session->http_stream_factory()->RequestStream(
|
| + request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
|
| + BoundNetLog()));
|
| + waiter.WaitForStream();
|
| +
|
| + // The proxy that failed should now be known to the proxy_service as bad.
|
| + const ProxyRetryInfoMap& retry_info =
|
| + session->proxy_service()->proxy_retry_info();
|
| + EXPECT_EQ(1u, retry_info.size());
|
| + EXPECT_TRUE(waiter.used_proxy_info().is_direct());
|
| +
|
| + ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99");
|
| + EXPECT_TRUE(iter != retry_info.end());
|
| +}
|
| +
|
| TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) {
|
| for (int num_streams = 1; num_streams < 3; ++num_streams) {
|
| GURL url = GURL("https://www.google.com");
|
|
|