Don't compile save_password_infobar_delegate.cc everywhere but Mac and Android
[chromium-blink-merge.git] / chrome / browser / io_thread_unittest.cc
blobbc730062a40578a411999d6b5e370f6c40fde5bc
1 // Copyright 2014 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.
5 #include "base/command_line.h"
6 #include "base/metrics/field_trial.h"
7 #include "base/test/mock_entropy_provider.h"
8 #include "chrome/browser/io_thread.h"
9 #include "chrome/common/chrome_switches.h"
10 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
11 #include "net/http/http_network_session.h"
12 #include "net/http/http_server_properties_impl.h"
13 #include "net/quic/quic_protocol.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
17 namespace test {
19 using ::testing::ElementsAre;
21 class IOThreadPeer {
22 public:
23 static void ConfigureQuicGlobals(
24 const base::CommandLine& command_line,
25 base::StringPiece quic_trial_group,
26 const std::map<std::string, std::string>& quic_trial_params,
27 bool is_quic_allowed_by_policy,
28 IOThread::Globals* globals) {
29 IOThread::ConfigureQuicGlobals(command_line, quic_trial_group,
30 quic_trial_params, is_quic_allowed_by_policy,
31 globals);
34 static void ConfigureSpdyGlobals(
35 const base::CommandLine& command_line,
36 base::StringPiece spdy_trial_group,
37 const std::map<std::string, std::string>& spdy_trial_params,
38 IOThread::Globals* globals) {
39 IOThread::ConfigureSpdyGlobals(command_line, spdy_trial_group,
40 spdy_trial_params, globals);
43 static void InitializeNetworkSessionParamsFromGlobals(
44 const IOThread::Globals& globals,
45 net::HttpNetworkSession::Params* params) {
46 IOThread::InitializeNetworkSessionParamsFromGlobals(globals, params);
50 class IOThreadTest : public testing::Test {
51 public:
52 IOThreadTest()
53 : command_line_(base::CommandLine::NO_PROGRAM),
54 is_quic_allowed_by_policy_(true) {
55 globals_.http_server_properties.reset(new net::HttpServerPropertiesImpl());
58 void ConfigureQuicGlobals() {
59 IOThreadPeer::ConfigureQuicGlobals(command_line_,
60 field_trial_group_,
61 field_trial_params_,
62 is_quic_allowed_by_policy_,
63 &globals_);
66 void ConfigureSpdyGlobals() {
67 IOThreadPeer::ConfigureSpdyGlobals(command_line_, field_trial_group_,
68 field_trial_params_, &globals_);
71 void InitializeNetworkSessionParams(net::HttpNetworkSession::Params* params) {
72 IOThreadPeer::InitializeNetworkSessionParamsFromGlobals(globals_, params);
75 base::CommandLine command_line_;
76 IOThread::Globals globals_;
77 std::string field_trial_group_;
78 bool is_quic_allowed_by_policy_;
79 std::map<std::string, std::string> field_trial_params_;
82 TEST_F(IOThreadTest, InitializeNetworkSessionParamsFromGlobals) {
83 globals_.quic_connection_options.push_back(net::kTBBR);
84 globals_.quic_connection_options.push_back(net::kTIME);
86 net::HttpNetworkSession::Params params;
87 InitializeNetworkSessionParams(&params);
88 EXPECT_EQ(globals_.quic_connection_options,
89 params.quic_connection_options);
92 TEST_F(IOThreadTest, SpdyFieldTrialHoldbackEnabled) {
93 net::HttpStreamFactory::set_spdy_enabled(true);
94 field_trial_group_ = "SpdyDisabled";
95 ConfigureSpdyGlobals();
96 EXPECT_FALSE(net::HttpStreamFactory::spdy_enabled());
99 TEST_F(IOThreadTest, SpdyFieldTrialSpdy31Enabled) {
100 field_trial_group_ = "Spdy31Enabled";
101 ConfigureSpdyGlobals();
102 EXPECT_THAT(globals_.next_protos,
103 ElementsAre(net::kProtoHTTP11,
104 net::kProtoSPDY31));
107 TEST_F(IOThreadTest, SpdyFieldTrialSpdy4Enabled) {
108 field_trial_group_ = "Spdy4Enabled";
109 ConfigureSpdyGlobals();
110 EXPECT_THAT(
111 globals_.next_protos,
112 ElementsAre(net::kProtoHTTP11, net::kProtoSPDY31, net::kProtoHTTP2));
115 TEST_F(IOThreadTest, SpdyFieldTrialDefault) {
116 field_trial_group_ = "";
117 ConfigureSpdyGlobals();
118 EXPECT_THAT(
119 globals_.next_protos,
120 ElementsAre(net::kProtoHTTP11, net::kProtoSPDY31, net::kProtoHTTP2));
123 TEST_F(IOThreadTest, SpdyFieldTrialParametrized) {
124 field_trial_params_["enable_spdy31"] = "false";
125 // Undefined parameter "enable_http2_14" should default to false.
126 field_trial_params_["enable_http2"] = "true";
127 field_trial_group_ = "ParametrizedHTTP2Only";
128 ConfigureSpdyGlobals();
129 EXPECT_THAT(globals_.next_protos,
130 ElementsAre(net::kProtoHTTP11, net::kProtoHTTP2));
133 TEST_F(IOThreadTest, SpdyCommandLineUseSpdyOff) {
134 command_line_.AppendSwitchASCII("use-spdy", "off");
135 // Command line should overwrite field trial group.
136 field_trial_group_ = "Spdy4Enabled";
137 ConfigureSpdyGlobals();
138 EXPECT_EQ(0u, globals_.next_protos.size());
141 TEST_F(IOThreadTest, DisableQuicByDefault) {
142 ConfigureQuicGlobals();
143 net::HttpNetworkSession::Params params;
144 InitializeNetworkSessionParams(&params);
145 EXPECT_FALSE(params.enable_quic);
146 EXPECT_FALSE(params.enable_quic_for_proxies);
147 EXPECT_FALSE(IOThread::ShouldEnableQuicForDataReductionProxy());
150 TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) {
151 field_trial_group_ = "Enabled";
153 ConfigureQuicGlobals();
154 net::HttpNetworkSession::Params default_params;
155 net::HttpNetworkSession::Params params;
156 InitializeNetworkSessionParams(&params);
157 EXPECT_TRUE(params.enable_quic);
158 EXPECT_FALSE(params.enable_insecure_quic);
159 EXPECT_TRUE(params.enable_quic_for_proxies);
160 EXPECT_EQ(1350u, params.quic_max_packet_length);
161 EXPECT_EQ(1.0, params.alternative_service_probability_threshold);
162 EXPECT_EQ(default_params.quic_supported_versions,
163 params.quic_supported_versions);
164 EXPECT_EQ(net::QuicTagVector(), params.quic_connection_options);
165 EXPECT_FALSE(params.quic_always_require_handshake_confirmation);
166 EXPECT_FALSE(params.quic_disable_connection_pooling);
167 EXPECT_EQ(0.25f, params.quic_load_server_info_timeout_srtt_multiplier);
168 EXPECT_FALSE(params.quic_enable_connection_racing);
169 EXPECT_FALSE(params.quic_enable_non_blocking_io);
170 EXPECT_FALSE(params.quic_disable_disk_cache);
171 EXPECT_FALSE(params.quic_prefer_aes);
172 EXPECT_FALSE(params.use_alternative_services);
173 EXPECT_EQ(4, params.quic_max_number_of_lossy_connections);
174 EXPECT_EQ(0.5f, params.quic_packet_loss_threshold);
175 EXPECT_FALSE(IOThread::ShouldEnableQuicForDataReductionProxy());
178 TEST_F(IOThreadTest, EnableQuicFromQuicProxyFieldTrialGroup) {
179 base::FieldTrialList field_trial_list(new base::MockEntropyProvider());
180 base::FieldTrialList::CreateFieldTrial(
181 data_reduction_proxy::params::GetQuicFieldTrialName(), "Enabled");
183 ConfigureQuicGlobals();
184 net::HttpNetworkSession::Params params;
185 InitializeNetworkSessionParams(&params);
186 EXPECT_FALSE(params.enable_quic);
187 EXPECT_TRUE(params.enable_quic_for_proxies);
188 EXPECT_TRUE(IOThread::ShouldEnableQuicForDataReductionProxy());
189 EXPECT_EQ(1024 * 1024, params.quic_socket_receive_buffer_size);
192 TEST_F(IOThreadTest, EnableQuicFromCommandLine) {
193 command_line_.AppendSwitch("enable-quic");
195 ConfigureQuicGlobals();
196 net::HttpNetworkSession::Params params;
197 InitializeNetworkSessionParams(&params);
198 EXPECT_TRUE(params.enable_quic);
199 EXPECT_TRUE(params.enable_quic_for_proxies);
200 EXPECT_FALSE(IOThread::ShouldEnableQuicForDataReductionProxy());
203 TEST_F(IOThreadTest, EnableAlternativeServicesFromCommandLineWithQuicDisabled) {
204 command_line_.AppendSwitch("enable-alternative-services");
206 ConfigureQuicGlobals();
207 net::HttpNetworkSession::Params params;
208 InitializeNetworkSessionParams(&params);
209 EXPECT_FALSE(params.enable_quic);
210 EXPECT_TRUE(params.use_alternative_services);
213 TEST_F(IOThreadTest, EnableAlternativeServicesFromCommandLineWithQuicEnabled) {
214 command_line_.AppendSwitch("enable-quic");
215 command_line_.AppendSwitch("enable-alternative-services");
217 ConfigureQuicGlobals();
218 net::HttpNetworkSession::Params params;
219 InitializeNetworkSessionParams(&params);
220 EXPECT_TRUE(params.enable_quic);
221 EXPECT_TRUE(params.use_alternative_services);
224 TEST_F(IOThreadTest, EnableInsecureQuicFromFieldTrialParams) {
225 field_trial_group_ = "Enabled";
226 field_trial_params_["enable_insecure_quic"] = "true";
228 ConfigureQuicGlobals();
229 net::HttpNetworkSession::Params params;
230 InitializeNetworkSessionParams(&params);
231 EXPECT_TRUE(params.enable_insecure_quic);
234 TEST_F(IOThreadTest, EnableInsecureQuicCommandLine) {
235 command_line_.AppendSwitch("enable-quic");
236 command_line_.AppendSwitch("enable-insecure-quic");
238 ConfigureQuicGlobals();
239 net::HttpNetworkSession::Params params;
240 InitializeNetworkSessionParams(&params);
241 EXPECT_TRUE(params.enable_insecure_quic);
244 TEST_F(IOThreadTest, PacketLengthFromCommandLine) {
245 command_line_.AppendSwitch("enable-quic");
246 command_line_.AppendSwitchASCII("quic-max-packet-length", "1450");
248 ConfigureQuicGlobals();
249 net::HttpNetworkSession::Params params;
250 InitializeNetworkSessionParams(&params);
251 EXPECT_EQ(1450u, params.quic_max_packet_length);
254 TEST_F(IOThreadTest, PacketLengthFromFieldTrialParams) {
255 field_trial_group_ = "Enabled";
256 field_trial_params_["max_packet_length"] = "1450";
258 ConfigureQuicGlobals();
259 net::HttpNetworkSession::Params params;
260 InitializeNetworkSessionParams(&params);
261 EXPECT_EQ(1450u, params.quic_max_packet_length);
264 TEST_F(IOThreadTest, QuicVersionFromCommandLine) {
265 command_line_.AppendSwitch("enable-quic");
266 std::string version =
267 net::QuicVersionToString(net::QuicSupportedVersions().back());
268 command_line_.AppendSwitchASCII("quic-version", version);
270 ConfigureQuicGlobals();
271 net::HttpNetworkSession::Params params;
272 InitializeNetworkSessionParams(&params);
273 net::QuicVersionVector supported_versions;
274 supported_versions.push_back(net::QuicSupportedVersions().back());
275 EXPECT_EQ(supported_versions, params.quic_supported_versions);
278 TEST_F(IOThreadTest, QuicVersionFromFieldTrialParams) {
279 field_trial_group_ = "Enabled";
280 field_trial_params_["quic_version"] =
281 net::QuicVersionToString(net::QuicSupportedVersions().back());
283 ConfigureQuicGlobals();
284 net::HttpNetworkSession::Params params;
285 InitializeNetworkSessionParams(&params);
286 net::QuicVersionVector supported_versions;
287 supported_versions.push_back(net::QuicSupportedVersions().back());
288 EXPECT_EQ(supported_versions, params.quic_supported_versions);
291 TEST_F(IOThreadTest, QuicConnectionOptionsFromCommandLine) {
292 command_line_.AppendSwitch("enable-quic");
293 command_line_.AppendSwitchASCII("quic-connection-options",
294 "TIME,TBBR,REJ");
296 ConfigureQuicGlobals();
297 net::HttpNetworkSession::Params params;
298 InitializeNetworkSessionParams(&params);
300 net::QuicTagVector options;
301 options.push_back(net::kTIME);
302 options.push_back(net::kTBBR);
303 options.push_back(net::kREJ);
304 EXPECT_EQ(options, params.quic_connection_options);
307 TEST_F(IOThreadTest, QuicConnectionOptionsFromFieldTrialParams) {
308 field_trial_group_ = "Enabled";
309 field_trial_params_["connection_options"] = "TIME,TBBR,REJ";
311 ConfigureQuicGlobals();
312 net::HttpNetworkSession::Params params;
313 InitializeNetworkSessionParams(&params);
315 net::QuicTagVector options;
316 options.push_back(net::kTIME);
317 options.push_back(net::kTBBR);
318 options.push_back(net::kREJ);
319 EXPECT_EQ(options, params.quic_connection_options);
322 TEST_F(IOThreadTest,
323 QuicAlwaysRequireHandshakeConfirmationFromFieldTrialParams) {
324 field_trial_group_ = "Enabled";
325 field_trial_params_["always_require_handshake_confirmation"] = "true";
326 ConfigureQuicGlobals();
327 net::HttpNetworkSession::Params params;
328 InitializeNetworkSessionParams(&params);
329 EXPECT_TRUE(params.quic_always_require_handshake_confirmation);
332 TEST_F(IOThreadTest,
333 QuicDisableConnectionPoolingFromFieldTrialParams) {
334 field_trial_group_ = "Enabled";
335 field_trial_params_["disable_connection_pooling"] = "true";
336 ConfigureQuicGlobals();
337 net::HttpNetworkSession::Params params;
338 InitializeNetworkSessionParams(&params);
339 EXPECT_TRUE(params.quic_disable_connection_pooling);
342 TEST_F(IOThreadTest, QuicLoadServerInfoTimeToSmoothedRttFromFieldTrialParams) {
343 field_trial_group_ = "Enabled";
344 field_trial_params_["load_server_info_time_to_srtt"] = "0.5";
345 ConfigureQuicGlobals();
346 net::HttpNetworkSession::Params params;
347 InitializeNetworkSessionParams(&params);
348 EXPECT_EQ(0.5f, params.quic_load_server_info_timeout_srtt_multiplier);
351 TEST_F(IOThreadTest, QuicEnableConnectionRacing) {
352 field_trial_group_ = "Enabled";
353 field_trial_params_["enable_connection_racing"] = "true";
354 ConfigureQuicGlobals();
355 net::HttpNetworkSession::Params params;
356 InitializeNetworkSessionParams(&params);
357 EXPECT_TRUE(params.quic_enable_connection_racing);
360 TEST_F(IOThreadTest, QuicEnableNonBlockingIO) {
361 field_trial_group_ = "Enabled";
362 field_trial_params_["enable_non_blocking_io"] = "true";
363 ConfigureQuicGlobals();
364 net::HttpNetworkSession::Params params;
365 InitializeNetworkSessionParams(&params);
366 EXPECT_TRUE(params.quic_enable_non_blocking_io);
369 TEST_F(IOThreadTest, QuicDisableDiskCache) {
370 field_trial_group_ = "Enabled";
371 field_trial_params_["disable_disk_cache"] = "true";
372 ConfigureQuicGlobals();
373 net::HttpNetworkSession::Params params;
374 InitializeNetworkSessionParams(&params);
375 EXPECT_TRUE(params.quic_disable_disk_cache);
378 TEST_F(IOThreadTest, QuicPreferAes) {
379 field_trial_group_ = "Enabled";
380 field_trial_params_["prefer_aes"] = "true";
381 ConfigureQuicGlobals();
382 net::HttpNetworkSession::Params params;
383 InitializeNetworkSessionParams(&params);
384 EXPECT_TRUE(params.quic_prefer_aes);
387 TEST_F(IOThreadTest, QuicEnableAlternativeServicesFromFieldTrialParams) {
388 field_trial_group_ = "Enabled";
389 field_trial_params_["use_alternative_services"] = "true";
391 ConfigureQuicGlobals();
392 net::HttpNetworkSession::Params params;
393 InitializeNetworkSessionParams(&params);
394 EXPECT_TRUE(params.use_alternative_services);
397 TEST_F(IOThreadTest, QuicMaxNumberOfLossyConnectionsFieldTrialParams) {
398 field_trial_group_ = "Enabled";
399 field_trial_params_["max_number_of_lossy_connections"] = "5";
400 ConfigureQuicGlobals();
401 net::HttpNetworkSession::Params params;
402 InitializeNetworkSessionParams(&params);
403 EXPECT_EQ(5, params.quic_max_number_of_lossy_connections);
406 TEST_F(IOThreadTest, QuicPacketLossThresholdFieldTrialParams) {
407 field_trial_group_ = "Enabled";
408 field_trial_params_["packet_loss_threshold"] = "0.6";
409 ConfigureQuicGlobals();
410 net::HttpNetworkSession::Params params;
411 InitializeNetworkSessionParams(&params);
412 EXPECT_EQ(0.6f, params.quic_packet_loss_threshold);
415 TEST_F(IOThreadTest, QuicReceiveBufferSize) {
416 field_trial_group_ = "Enabled";
417 field_trial_params_["receive_buffer_size"] = "2097152";
418 ConfigureQuicGlobals();
419 net::HttpNetworkSession::Params params;
420 InitializeNetworkSessionParams(&params);
421 EXPECT_EQ(2097152, params.quic_socket_receive_buffer_size);
424 TEST_F(IOThreadTest, AlternativeServiceProbabilityThresholdFromFlag) {
425 command_line_.AppendSwitchASCII("alternative-service-probability-threshold",
426 "0.5");
428 ConfigureQuicGlobals();
429 net::HttpNetworkSession::Params params;
430 InitializeNetworkSessionParams(&params);
431 EXPECT_EQ(.5, params.alternative_service_probability_threshold);
434 TEST_F(IOThreadTest, AlternativeServiceProbabilityThresholdFromEnableQuicFlag) {
435 command_line_.AppendSwitch("enable-quic");
437 ConfigureQuicGlobals();
438 net::HttpNetworkSession::Params params;
439 InitializeNetworkSessionParams(&params);
440 EXPECT_EQ(0, params.alternative_service_probability_threshold);
443 // TODO(bnc): Remove when new parameter name rolls out and server configuration
444 // is changed.
445 TEST_F(IOThreadTest, AlternativeServiceProbabilityThresholdFromOldParams) {
446 field_trial_group_ = "Enabled";
447 field_trial_params_["alternate_protocol_probability_threshold"] = ".5";
449 ConfigureQuicGlobals();
450 net::HttpNetworkSession::Params params;
451 InitializeNetworkSessionParams(&params);
452 EXPECT_EQ(.5, params.alternative_service_probability_threshold);
455 TEST_F(IOThreadTest, AlternativeServiceProbabilityThresholdFromParams) {
456 field_trial_group_ = "Enabled";
457 field_trial_params_["alternative_service_probability_threshold"] = ".5";
459 ConfigureQuicGlobals();
460 net::HttpNetworkSession::Params params;
461 InitializeNetworkSessionParams(&params);
462 EXPECT_EQ(.5, params.alternative_service_probability_threshold);
465 TEST_F(IOThreadTest, QuicDisallowedByPolicy) {
466 command_line_.AppendSwitch(switches::kEnableQuic);
467 is_quic_allowed_by_policy_ = false;
468 ConfigureQuicGlobals();
470 net::HttpNetworkSession::Params params;
471 InitializeNetworkSessionParams(&params);
472 EXPECT_FALSE(params.enable_quic);
475 } // namespace test