blob: daee9b574dea96a1ecc364f9674d1a884a642567 [file] [log] [blame]
xunjielif24ee5f2015-11-23 18:05:261// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/cronet/url_request_context_config.h"
6
dchengfe3745e6242016-04-21 23:49:587#include "base/memory/ptr_util.h"
tfhef3618f2016-01-11 23:07:088#include "base/values.h"
pauljensen9041eb3c2015-12-09 12:29:019#include "net/cert/cert_verifier.h"
xunjielif24ee5f2015-11-23 18:05:2610#include "net/http/http_network_session.h"
mikecironef22f9812016-10-04 03:40:1911#include "net/log/net_log.h"
12#include "net/log/net_log_with_source.h"
xunjielif24ee5f2015-11-23 18:05:2613#include "net/proxy/proxy_config.h"
14#include "net/proxy/proxy_config_service_fixed.h"
15#include "net/url_request/url_request_context.h"
16#include "net/url_request/url_request_context_builder.h"
17#include "testing/gtest/include/gtest/gtest.h"
18
19namespace cronet {
20
mgershaf2c12c2016-08-22 16:33:5421TEST(URLRequestContextConfigTest, TestExperimentalOptionPassing) {
pauljensen9041eb3c2015-12-09 12:29:0122 URLRequestContextConfig config(
23 // Enable QUIC.
24 true,
mefc5da5712016-02-09 20:14:2325 // QUIC User Agent ID.
26 "Default QUIC User Agent ID",
pauljensen9041eb3c2015-12-09 12:29:0127 // Enable SPDY.
28 true,
29 // Enable SDCH.
30 false,
31 // Type of http cache.
32 URLRequestContextConfig::HttpCacheType::DISK,
33 // Max size of http cache in bytes.
34 1024000,
35 // Disable caching for HTTP responses. Other information may be stored in
36 // the cache.
37 false,
38 // Storage path for http cache and cookie storage.
39 "/data/data/org.chromium.net/app_cronet_test/test_storage",
40 // User-Agent request header field.
41 "fake agent",
42 // JSON encoded experimental options.
rtenneti6971c172016-01-15 20:12:1043 "{\"QUIC\":{\"max_server_configs_stored_in_properties\":2,"
rtennetib8e80fb2016-05-16 00:12:0944 "\"delay_tcp_race\":true,"
mefc5da5712016-02-09 20:14:2345 "\"prefer_aes\":true,"
46 "\"user_agent_id\":\"Custom QUIC UAID\","
rtenneti64e809d02015-12-11 00:26:2047 "\"idle_connection_timeout_seconds\":300,"
jrid26566952016-02-04 21:06:4248 "\"close_sessions_on_ip_change\":true,"
rtennetid073dd22016-08-04 01:58:3349 "\"race_cert_verification\":true,"
pauljensene92c4092015-12-09 19:13:4850 "\"connection_options\":\"TIME,TBBR,REJ\"},"
mgershaf2c12c2016-08-22 16:33:5451 "\"AsyncDNS\":{\"enable\":true},"
52 "\"HostResolverRules\":{\"host_resolver_rules\":"
53 "\"MAP * 127.0.0.1\"}}",
pauljensen9041eb3c2015-12-09 12:29:0154 // Data reduction proxy key.
55 "",
56 // Data reduction proxy.
57 "",
58 // Fallback data reduction proxy.
59 "",
60 // Data reduction proxy secure proxy check URL.
61 "",
62 // MockCertVerifier to use for testing purposes.
tbansal7018e2a2016-06-25 00:40:3963 std::unique_ptr<net::CertVerifier>(),
64 // Enable network quality estimator.
kapishnikov385aa422016-07-01 20:53:0265 false,
66 // Enable Public Key Pinning bypass for local trust anchors.
rtenneti121f9fa2016-07-07 23:49:2867 true,
68 // Certificate verifier cache data.
69 "");
xunjielif24ee5f2015-11-23 18:05:2670
xunjielif24ee5f2015-11-23 18:05:2671 net::URLRequestContextBuilder builder;
pauljensene92c4092015-12-09 19:13:4872 net::NetLog net_log;
xunjielida7f77022016-03-28 16:36:3673 config.ConfigureURLRequestContextBuilder(&builder, &net_log, nullptr);
xunjielif24ee5f2015-11-23 18:05:2674 // Set a ProxyConfigService to avoid DCHECK failure when building.
ricea85ec57952016-08-31 09:34:1075 builder.set_proxy_config_service(
76 base::MakeUnique<net::ProxyConfigServiceFixed>(
77 net::ProxyConfig::CreateDirect()));
dchengfe3745e6242016-04-21 23:49:5878 std::unique_ptr<net::URLRequestContext> context(builder.Build());
xunjielif24ee5f2015-11-23 18:05:2679 const net::HttpNetworkSession::Params* params =
80 context->GetNetworkSessionParams();
81 // Check Quic Connection options.
82 net::QuicTagVector quic_connection_options;
83 quic_connection_options.push_back(net::kTIME);
84 quic_connection_options.push_back(net::kTBBR);
85 quic_connection_options.push_back(net::kREJ);
86 EXPECT_EQ(quic_connection_options, params->quic_connection_options);
87
mefc5da5712016-02-09 20:14:2388 // Check Custom QUIC User Agent Id.
89 EXPECT_EQ("Custom QUIC UAID", params->quic_user_agent_id);
90
rtenneti6971c172016-01-15 20:12:1091 // Check max_server_configs_stored_in_properties.
92 EXPECT_EQ(2u, params->quic_max_server_configs_stored_in_properties);
xunjielif24ee5f2015-11-23 18:05:2693
rtennetib8e80fb2016-05-16 00:12:0994 // Check delay_tcp_race.
95 EXPECT_TRUE(params->quic_delay_tcp_race);
96
mefc5da5712016-02-09 20:14:2397 // Check prefer_aes.
98 EXPECT_TRUE(params->quic_prefer_aes);
99
rtenneti64e809d02015-12-11 00:26:20100 // Check idle_connection_timeout_seconds.
101 EXPECT_EQ(300, params->quic_idle_connection_timeout_seconds);
102
jrid26566952016-02-04 21:06:42103 EXPECT_TRUE(params->quic_close_sessions_on_ip_change);
jric69a88422016-02-12 19:48:36104 EXPECT_FALSE(params->quic_migrate_sessions_on_network_change);
jrid26566952016-02-04 21:06:42105
rtennetid073dd22016-08-04 01:58:33106 // Check race_cert_verification.
107 EXPECT_TRUE(params->quic_race_cert_verification);
108
pauljensene92c4092015-12-09 19:13:48109 // Check AsyncDNS resolver is enabled.
tfhef3618f2016-01-11 23:07:08110 EXPECT_TRUE(context->host_resolver()->GetDnsConfigAsValue());
mgershaf2c12c2016-08-22 16:33:54111
112 net::HostResolver::RequestInfo info(net::HostPortPair("abcde", 80));
113 net::AddressList addresses;
114 EXPECT_EQ(net::OK, context->host_resolver()->ResolveFromCache(
tfarina428341112016-09-22 13:38:20115 info, &addresses, net::NetLogWithSource()));
xunjielif24ee5f2015-11-23 18:05:26116}
117
jric69a88422016-02-12 19:48:36118TEST(URLRequestContextConfigTest, SetQuicConnectionMigrationOptions) {
119 URLRequestContextConfig config(
120 // Enable QUIC.
121 true,
122 // QUIC User Agent ID.
123 "Default QUIC User Agent ID",
124 // Enable SPDY.
125 true,
126 // Enable SDCH.
127 false,
128 // Type of http cache.
129 URLRequestContextConfig::HttpCacheType::DISK,
130 // Max size of http cache in bytes.
131 1024000,
132 // Disable caching for HTTP responses. Other information may be stored in
133 // the cache.
134 false,
135 // Storage path for http cache and cookie storage.
136 "/data/data/org.chromium.net/app_cronet_test/test_storage",
137 // User-Agent request header field.
138 "fake agent",
139 // JSON encoded experimental options.
jrie68df0e2016-02-12 22:01:42140 "{\"QUIC\":{\"migrate_sessions_on_network_change\":true,"
141 "\"migrate_sessions_early\":true}}",
jric69a88422016-02-12 19:48:36142 // Data reduction proxy key.
143 "",
144 // Data reduction proxy.
145 "",
146 // Fallback data reduction proxy.
147 "",
148 // Data reduction proxy secure proxy check URL.
149 "",
150 // MockCertVerifier to use for testing purposes.
tbansal7018e2a2016-06-25 00:40:39151 std::unique_ptr<net::CertVerifier>(),
152 // Enable network quality estimator.
kapishnikov385aa422016-07-01 20:53:02153 false,
154 // Enable Public Key Pinning bypass for local trust anchors.
rtenneti121f9fa2016-07-07 23:49:28155 true,
156 // Certificate verifier cache data.
157 "");
jric69a88422016-02-12 19:48:36158
159 net::URLRequestContextBuilder builder;
160 net::NetLog net_log;
xunjielida7f77022016-03-28 16:36:36161 config.ConfigureURLRequestContextBuilder(&builder, &net_log, nullptr);
jric69a88422016-02-12 19:48:36162 // Set a ProxyConfigService to avoid DCHECK failure when building.
ricea85ec57952016-08-31 09:34:10163 builder.set_proxy_config_service(
164 base::MakeUnique<net::ProxyConfigServiceFixed>(
165 net::ProxyConfig::CreateDirect()));
dchengfe3745e6242016-04-21 23:49:58166 std::unique_ptr<net::URLRequestContext> context(builder.Build());
jric69a88422016-02-12 19:48:36167 const net::HttpNetworkSession::Params* params =
168 context->GetNetworkSessionParams();
169
170 EXPECT_FALSE(params->quic_close_sessions_on_ip_change);
171 EXPECT_TRUE(params->quic_migrate_sessions_on_network_change);
jrie68df0e2016-02-12 22:01:42172 EXPECT_TRUE(params->quic_migrate_sessions_early);
jric69a88422016-02-12 19:48:36173}
174
juliatuttle50d9c4b2016-08-23 22:49:19175// See stale_host_resolver_unittest.cc for test of StaleDNS options.
176
xunjielif24ee5f2015-11-23 18:05:26177} // namespace cronet