blob: d6a13b12e16654f5eddc0e447ab8cae0a013d1f8 [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"
mmenke51629db12017-06-28 13:34:128#include "base/test/scoped_task_environment.h"
tfhef3618f2016-01-11 23:07:089#include "base/values.h"
pauljensen9041eb3c2015-12-09 12:29:0110#include "net/cert/cert_verifier.h"
xunjielif24ee5f2015-11-23 18:05:2611#include "net/http/http_network_session.h"
mikecironef22f9812016-10-04 03:40:1912#include "net/log/net_log.h"
13#include "net/log/net_log_with_source.h"
xunjielif24ee5f2015-11-23 18:05:2614#include "net/proxy/proxy_config.h"
15#include "net/proxy/proxy_config_service_fixed.h"
16#include "net/url_request/url_request_context.h"
17#include "net/url_request/url_request_context_builder.h"
18#include "testing/gtest/include/gtest/gtest.h"
19
20namespace cronet {
21
mmenke51629db12017-06-28 13:34:1222TEST(URLRequestContextConfigTest, TestExperimentalOptionParsing) {
23 base::test::ScopedTaskEnvironment scoped_task_environment_(
24 base::test::ScopedTaskEnvironment::MainThreadType::IO);
25
pauljensen9041eb3c2015-12-09 12:29:0126 URLRequestContextConfig config(
27 // Enable QUIC.
28 true,
mefc5da5712016-02-09 20:14:2329 // QUIC User Agent ID.
30 "Default QUIC User Agent ID",
pauljensen9041eb3c2015-12-09 12:29:0131 // Enable SPDY.
32 true,
xunjieli186d2bf2017-04-18 13:45:4733 // Enable Brotli.
34 false,
pauljensen9041eb3c2015-12-09 12:29:0135 // Type of http cache.
36 URLRequestContextConfig::HttpCacheType::DISK,
37 // Max size of http cache in bytes.
38 1024000,
39 // Disable caching for HTTP responses. Other information may be stored in
40 // the cache.
41 false,
42 // Storage path for http cache and cookie storage.
43 "/data/data/org.chromium.net/app_cronet_test/test_storage",
44 // User-Agent request header field.
45 "fake agent",
46 // JSON encoded experimental options.
rtenneti6971c172016-01-15 20:12:1047 "{\"QUIC\":{\"max_server_configs_stored_in_properties\":2,"
mefc5da5712016-02-09 20:14:2348 "\"user_agent_id\":\"Custom QUIC UAID\","
rtenneti64e809d02015-12-11 00:26:2049 "\"idle_connection_timeout_seconds\":300,"
Jana Iyengar903dec22017-11-28 00:44:2350 "\"close_sessions_on_ip_change\":true,"
rtennetid073dd22016-08-04 01:58:3351 "\"race_cert_verification\":true,"
pauljensene92c4092015-12-09 19:13:4852 "\"connection_options\":\"TIME,TBBR,REJ\"},"
mgershaf2c12c2016-08-22 16:33:5453 "\"AsyncDNS\":{\"enable\":true},"
xunjielid67295e2017-03-16 21:05:4154 "\"UnknownOption\":{\"foo\":true},"
mgershaf2c12c2016-08-22 16:33:5455 "\"HostResolverRules\":{\"host_resolver_rules\":"
mgershb3fe8082017-02-28 20:09:2056 "\"MAP * 127.0.0.1\"},"
57 // See http://crbug.com/696569.
mgershaf9a9232017-04-13 20:19:0358 "\"disable_ipv6_on_wifi\":true}",
pauljensen9041eb3c2015-12-09 12:29:0159 // MockCertVerifier to use for testing purposes.
tbansal7018e2a2016-06-25 00:40:3960 std::unique_ptr<net::CertVerifier>(),
61 // Enable network quality estimator.
kapishnikov385aa422016-07-01 20:53:0262 false,
63 // Enable Public Key Pinning bypass for local trust anchors.
rtenneti121f9fa2016-07-07 23:49:2864 true,
65 // Certificate verifier cache data.
66 "");
xunjielif24ee5f2015-11-23 18:05:2667
xunjielif24ee5f2015-11-23 18:05:2668 net::URLRequestContextBuilder builder;
pauljensene92c4092015-12-09 19:13:4869 net::NetLog net_log;
David Benjamindc2f4b02017-07-27 23:59:0270 config.ConfigureURLRequestContextBuilder(&builder, &net_log);
xunjielid67295e2017-03-16 21:05:4171 EXPECT_FALSE(config.effective_experimental_options->HasKey("UnknownOption"));
xunjielif24ee5f2015-11-23 18:05:2672 // Set a ProxyConfigService to avoid DCHECK failure when building.
ricea85ec57952016-08-31 09:34:1073 builder.set_proxy_config_service(
74 base::MakeUnique<net::ProxyConfigServiceFixed>(
75 net::ProxyConfig::CreateDirect()));
dchengfe3745e6242016-04-21 23:49:5876 std::unique_ptr<net::URLRequestContext> context(builder.Build());
xunjielif24ee5f2015-11-23 18:05:2677 const net::HttpNetworkSession::Params* params =
78 context->GetNetworkSessionParams();
79 // Check Quic Connection options.
80 net::QuicTagVector quic_connection_options;
81 quic_connection_options.push_back(net::kTIME);
82 quic_connection_options.push_back(net::kTBBR);
83 quic_connection_options.push_back(net::kREJ);
84 EXPECT_EQ(quic_connection_options, params->quic_connection_options);
85
mefc5da5712016-02-09 20:14:2386 // Check Custom QUIC User Agent Id.
87 EXPECT_EQ("Custom QUIC UAID", params->quic_user_agent_id);
88
rtenneti6971c172016-01-15 20:12:1089 // Check max_server_configs_stored_in_properties.
90 EXPECT_EQ(2u, params->quic_max_server_configs_stored_in_properties);
xunjielif24ee5f2015-11-23 18:05:2691
rtenneti64e809d02015-12-11 00:26:2092 // Check idle_connection_timeout_seconds.
93 EXPECT_EQ(300, params->quic_idle_connection_timeout_seconds);
94
Jana Iyengar903dec22017-11-28 00:44:2395 EXPECT_TRUE(params->quic_close_sessions_on_ip_change);
jric69a88422016-02-12 19:48:3696 EXPECT_FALSE(params->quic_migrate_sessions_on_network_change);
Zhongyi Shi64795622017-11-20 02:21:4997 EXPECT_FALSE(params->quic_migrate_sessions_on_network_change_v2);
jrid26566952016-02-04 21:06:4298
rtennetid073dd22016-08-04 01:58:3399 // Check race_cert_verification.
100 EXPECT_TRUE(params->quic_race_cert_verification);
101
pauljensene92c4092015-12-09 19:13:48102 // Check AsyncDNS resolver is enabled.
tfhef3618f2016-01-11 23:07:08103 EXPECT_TRUE(context->host_resolver()->GetDnsConfigAsValue());
mgershaf2c12c2016-08-22 16:33:54104
mgershaf9a9232017-04-13 20:19:03105 // Check IPv6 is disabled when on wifi.
106 EXPECT_TRUE(context->host_resolver()->GetNoIPv6OnWifi());
mgershb3fe8082017-02-28 20:09:20107
mgershaf2c12c2016-08-22 16:33:54108 net::HostResolver::RequestInfo info(net::HostPortPair("abcde", 80));
109 net::AddressList addresses;
110 EXPECT_EQ(net::OK, context->host_resolver()->ResolveFromCache(
tfarina428341112016-09-22 13:38:20111 info, &addresses, net::NetLogWithSource()));
xunjielif24ee5f2015-11-23 18:05:26112}
113
mmenke51629db12017-06-28 13:34:12114TEST(URLRequestContextConfigTest, SetQuicConnectionMigrationOptions) {
115 base::test::ScopedTaskEnvironment scoped_task_environment_(
116 base::test::ScopedTaskEnvironment::MainThreadType::IO);
117
jric69a88422016-02-12 19:48:36118 URLRequestContextConfig config(
119 // Enable QUIC.
120 true,
121 // QUIC User Agent ID.
122 "Default QUIC User Agent ID",
123 // Enable SPDY.
124 true,
xunjieli186d2bf2017-04-18 13:45:47125 // Enable Brotli.
126 false,
jric69a88422016-02-12 19:48:36127 // Type of http cache.
128 URLRequestContextConfig::HttpCacheType::DISK,
129 // Max size of http cache in bytes.
130 1024000,
131 // Disable caching for HTTP responses. Other information may be stored in
132 // the cache.
133 false,
134 // Storage path for http cache and cookie storage.
135 "/data/data/org.chromium.net/app_cronet_test/test_storage",
136 // User-Agent request header field.
137 "fake agent",
138 // JSON encoded experimental options.
jrie68df0e2016-02-12 22:01:42139 "{\"QUIC\":{\"migrate_sessions_on_network_change\":true,"
140 "\"migrate_sessions_early\":true}}",
jric69a88422016-02-12 19:48:36141 // MockCertVerifier to use for testing purposes.
tbansal7018e2a2016-06-25 00:40:39142 std::unique_ptr<net::CertVerifier>(),
143 // Enable network quality estimator.
kapishnikov385aa422016-07-01 20:53:02144 false,
145 // Enable Public Key Pinning bypass for local trust anchors.
rtenneti121f9fa2016-07-07 23:49:28146 true,
147 // Certificate verifier cache data.
148 "");
jric69a88422016-02-12 19:48:36149
150 net::URLRequestContextBuilder builder;
151 net::NetLog net_log;
David Benjamindc2f4b02017-07-27 23:59:02152 config.ConfigureURLRequestContextBuilder(&builder, &net_log);
jric69a88422016-02-12 19:48:36153 // Set a ProxyConfigService to avoid DCHECK failure when building.
ricea85ec57952016-08-31 09:34:10154 builder.set_proxy_config_service(
155 base::MakeUnique<net::ProxyConfigServiceFixed>(
156 net::ProxyConfig::CreateDirect()));
dchengfe3745e6242016-04-21 23:49:58157 std::unique_ptr<net::URLRequestContext> context(builder.Build());
jric69a88422016-02-12 19:48:36158 const net::HttpNetworkSession::Params* params =
159 context->GetNetworkSessionParams();
160
Jana Iyengar903dec22017-11-28 00:44:23161 EXPECT_FALSE(params->quic_close_sessions_on_ip_change);
jric69a88422016-02-12 19:48:36162 EXPECT_TRUE(params->quic_migrate_sessions_on_network_change);
jrie68df0e2016-02-12 22:01:42163 EXPECT_TRUE(params->quic_migrate_sessions_early);
jric69a88422016-02-12 19:48:36164}
165
Yixin Wang10f477ed2017-11-21 04:20:20166TEST(URLRequestContextConfigTest, SetQuicConnectionMigrationV2Options) {
Zhongyi Shi64795622017-11-20 02:21:49167 base::test::ScopedTaskEnvironment scoped_task_environment_(
168 base::test::ScopedTaskEnvironment::MainThreadType::IO);
169
170 URLRequestContextConfig config(
171 // Enable QUIC.
172 true,
173 // QUIC User Agent ID.
174 "Default QUIC User Agent ID",
175 // Enable SPDY.
176 true,
177 // Enable Brotli.
178 false,
179 // Type of http cache.
180 URLRequestContextConfig::HttpCacheType::DISK,
181 // Max size of http cache in bytes.
182 1024000,
183 // Disable caching for HTTP responses. Other information may be stored in
184 // the cache.
185 false,
186 // Storage path for http cache and cookie storage.
187 "/data/data/org.chromium.net/app_cronet_test/test_storage",
188 // User-Agent request header field.
189 "fake agent",
190 // JSON encoded experimental options.
191 "{\"QUIC\":{\"migrate_sessions_on_network_change_v2\":true}}",
192 // MockCertVerifier to use for testing purposes.
193 std::unique_ptr<net::CertVerifier>(),
194 // Enable network quality estimator.
195 false,
196 // Enable Public Key Pinning bypass for local trust anchors.
197 true,
198 // Certificate verifier cache data.
199 "");
200
201 net::URLRequestContextBuilder builder;
202 net::NetLog net_log;
203 config.ConfigureURLRequestContextBuilder(&builder, &net_log);
204 // Set a ProxyConfigService to avoid DCHECK failure when building.
205 builder.set_proxy_config_service(
206 base::MakeUnique<net::ProxyConfigServiceFixed>(
207 net::ProxyConfig::CreateDirect()));
208 std::unique_ptr<net::URLRequestContext> context(builder.Build());
209 const net::HttpNetworkSession::Params* params =
210 context->GetNetworkSessionParams();
211
212 EXPECT_TRUE(params->quic_migrate_sessions_on_network_change_v2);
213}
214
Yixin Wang10f477ed2017-11-21 04:20:20215TEST(URLRequestContextConfigTest, SetQuicHostWhitelist) {
216 base::test::ScopedTaskEnvironment scoped_task_environment_(
217 base::test::ScopedTaskEnvironment::MainThreadType::IO);
218
219 URLRequestContextConfig config(
220 // Enable QUIC.
221 true,
222 // QUIC User Agent ID.
223 "Default QUIC User Agent ID",
224 // Enable SPDY.
225 true,
226 // Enable Brotli.
227 false,
228 // Type of http cache.
229 URLRequestContextConfig::HttpCacheType::DISK,
230 // Max size of http cache in bytes.
231 1024000,
232 // Disable caching for HTTP responses. Other information may be stored in
233 // the cache.
234 false,
235 // Storage path for http cache and cookie storage.
236 "/data/data/org.chromium.net/app_cronet_test/test_storage",
237 // User-Agent request header field.
238 "fake agent",
239 // JSON encoded experimental options.
240 "{\"QUIC\":{\"host_whitelist\":\"www.example.com,www.example.org\"}}",
241 // MockCertVerifier to use for testing purposes.
242 std::unique_ptr<net::CertVerifier>(),
243 // Enable network quality estimator.
244 false,
245 // Enable Public Key Pinning bypass for local trust anchors.
246 true,
247 // Certificate verifier cache data.
248 "");
249
250 net::URLRequestContextBuilder builder;
251 net::NetLog net_log;
252 config.ConfigureURLRequestContextBuilder(&builder, &net_log);
253 // Set a ProxyConfigService to avoid DCHECK failure when building.
254 builder.set_proxy_config_service(
255 base::MakeUnique<net::ProxyConfigServiceFixed>(
256 net::ProxyConfig::CreateDirect()));
257 std::unique_ptr<net::URLRequestContext> context(builder.Build());
258 const net::HttpNetworkSession::Params* params =
259 context->GetNetworkSessionParams();
260
261 EXPECT_TRUE(
262 base::ContainsKey(params->quic_host_whitelist, "www.example.com"));
263 EXPECT_TRUE(
264 base::ContainsKey(params->quic_host_whitelist, "www.example.org"));
265}
266
Yixin Wang983875152017-11-21 20:30:13267TEST(URLRequestContextConfigTest, SetQuicMaxTimeBeforeCryptoHandshake) {
268 base::test::ScopedTaskEnvironment scoped_task_environment_(
269 base::test::ScopedTaskEnvironment::MainThreadType::IO);
270
271 URLRequestContextConfig config(
272 // Enable QUIC.
273 true,
274 // QUIC User Agent ID.
275 "Default QUIC User Agent ID",
276 // Enable SPDY.
277 true,
278 // Enable Brotli.
279 false,
280 // Type of http cache.
281 URLRequestContextConfig::HttpCacheType::DISK,
282 // Max size of http cache in bytes.
283 1024000,
284 // Disable caching for HTTP responses. Other information may be stored in
285 // the cache.
286 false,
287 // Storage path for http cache and cookie storage.
288 "/data/data/org.chromium.net/app_cronet_test/test_storage",
289 // User-Agent request header field.
290 "fake agent",
291 // JSON encoded experimental options.
292 "{\"QUIC\":{\"max_time_before_crypto_handshake_seconds\":7,"
293 "\"max_idle_time_before_crypto_handshake_seconds\":11}}",
294 // MockCertVerifier to use for testing purposes.
295 std::unique_ptr<net::CertVerifier>(),
296 // Enable network quality estimator.
297 false,
298 // Enable Public Key Pinning bypass for local trust anchors.
299 true,
300 // Certificate verifier cache data.
301 "");
302
303 net::URLRequestContextBuilder builder;
304 net::NetLog net_log;
305 config.ConfigureURLRequestContextBuilder(&builder, &net_log);
306 // Set a ProxyConfigService to avoid DCHECK failure when building.
307 builder.set_proxy_config_service(
308 base::MakeUnique<net::ProxyConfigServiceFixed>(
309 net::ProxyConfig::CreateDirect()));
310 std::unique_ptr<net::URLRequestContext> context(builder.Build());
311 const net::HttpNetworkSession::Params* params =
312 context->GetNetworkSessionParams();
313
314 EXPECT_EQ(7, params->quic_max_time_before_crypto_handshake_seconds);
315 EXPECT_EQ(11, params->quic_max_idle_time_before_crypto_handshake_seconds);
316}
317
juliatuttle50d9c4b2016-08-23 22:49:19318// See stale_host_resolver_unittest.cc for test of StaleDNS options.
319
xunjielif24ee5f2015-11-23 18:05:26320} // namespace cronet