1 // Copyright 2016 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 #include "base/command_line.h"
8 #include "base/test/scoped_command_line.h"
9 #include "base/time/time.h"
10 #include "components/component_updater/component_updater_command_line_config_policy.h"
11 #include "components/component_updater/component_updater_switches.h"
12 #include "components/component_updater/configurator_impl.h"
13 #include "components/update_client/command_line_config_policy.h"
14 #include "testing/gtest/include/gtest/gtest.h"
16 namespace component_updater {
18 class ComponentUpdaterConfiguratorImplTest : public testing::Test {
20 ComponentUpdaterConfiguratorImplTest() = default;
22 ComponentUpdaterConfiguratorImplTest(
23 const ComponentUpdaterConfiguratorImplTest&) = delete;
24 ComponentUpdaterConfiguratorImplTest& operator=(
25 const ComponentUpdaterConfiguratorImplTest&) = delete;
27 ~ComponentUpdaterConfiguratorImplTest() override = default;
30 TEST_F(ComponentUpdaterConfiguratorImplTest, FastUpdate) {
31 // Test the default timing values when no command line argument is present.
32 base::CommandLine cmdline(base::CommandLine::NO_PROGRAM);
33 std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>(
34 ComponentUpdaterCommandLineConfigPolicy(&cmdline), false);
35 CHECK_EQ(base::Minutes(1), config->InitialDelay());
36 CHECK_EQ(base::Hours(5), config->NextCheckDelay());
37 CHECK_EQ(base::Minutes(30), config->OnDemandDelay());
38 CHECK_EQ(base::Minutes(15), config->UpdateDelay());
40 // Test the fast-update timings.
41 cmdline.AppendSwitchASCII("--component-updater", "fast-update");
42 config = std::make_unique<ConfiguratorImpl>(
43 ComponentUpdaterCommandLineConfigPolicy(&cmdline), false);
44 CHECK_EQ(base::Seconds(10), config->InitialDelay());
45 CHECK_EQ(base::Hours(5), config->NextCheckDelay());
46 CHECK_EQ(base::Seconds(2), config->OnDemandDelay());
47 CHECK_EQ(base::Seconds(10), config->UpdateDelay());
50 TEST_F(ComponentUpdaterConfiguratorImplTest, FastUpdateWithCustomPolicy) {
51 // Test the default timing values when no command line argument is present
53 class DefaultCommandLineConfigPolicy
54 : public update_client::CommandLineConfigPolicy {
56 DefaultCommandLineConfigPolicy() = default;
58 // update_client::CommandLineConfigPolicy overrides.
59 bool BackgroundDownloadsEnabled() const override { return false; }
60 bool DeltaUpdatesEnabled() const override { return false; }
61 bool FastUpdate() const override { return false; }
62 bool PingsEnabled() const override { return false; }
63 bool TestRequest() const override { return false; }
64 GURL UrlSourceOverride() const override { return GURL(); }
67 std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>(
68 DefaultCommandLineConfigPolicy(), false);
69 CHECK_EQ(base::Minutes(1), config->InitialDelay());
70 CHECK_EQ(base::Hours(5), config->NextCheckDelay());
71 CHECK_EQ(base::Minutes(30), config->OnDemandDelay());
72 CHECK_EQ(base::Minutes(15), config->UpdateDelay());
74 // Test the fast-update timings.
75 class FastUpdateCommandLineConfigurator
76 : public DefaultCommandLineConfigPolicy {
78 FastUpdateCommandLineConfigurator() = default;
80 bool FastUpdate() const override { return true; }
82 config = std::make_unique<ConfiguratorImpl>(
83 FastUpdateCommandLineConfigurator(), false);
84 CHECK_EQ(base::Seconds(10), config->InitialDelay());
85 CHECK_EQ(base::Hours(5), config->NextCheckDelay());
86 CHECK_EQ(base::Seconds(2), config->OnDemandDelay());
87 CHECK_EQ(base::Seconds(10), config->UpdateDelay());
90 TEST_F(ComponentUpdaterConfiguratorImplTest, InitialDelay) {
91 std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>(
92 update_client::CommandLineConfigPolicy(), false);
93 CHECK_EQ(base::Minutes(1), config->InitialDelay());
95 class CommandLineConfigPolicy
96 : public update_client::CommandLineConfigPolicy {
98 CommandLineConfigPolicy() = default;
100 // update_client::CommandLineConfigPolicy overrides.
101 bool BackgroundDownloadsEnabled() const override { return false; }
102 bool DeltaUpdatesEnabled() const override { return false; }
103 bool FastUpdate() const override { return fast_update_; }
104 bool PingsEnabled() const override { return false; }
105 bool TestRequest() const override { return false; }
106 GURL UrlSourceOverride() const override { return GURL(); }
107 base::TimeDelta InitialDelay() const override { return initial_delay_; }
109 void set_fast_update(bool fast_update) { fast_update_ = fast_update; }
110 void set_initial_delay(base::TimeDelta initial_delay) {
111 initial_delay_ = initial_delay;
115 base::TimeDelta initial_delay_ = base::Seconds(0);
116 bool fast_update_ = false;
120 CommandLineConfigPolicy clcp;
121 clcp.set_fast_update(true);
122 config = std::make_unique<ConfiguratorImpl>(clcp, false);
123 CHECK_EQ(base::Seconds(10), config->InitialDelay());
127 CommandLineConfigPolicy clcp;
128 clcp.set_fast_update(false);
129 config = std::make_unique<ConfiguratorImpl>(clcp, false);
130 CHECK_EQ(base::Minutes(1), config->InitialDelay());
134 CommandLineConfigPolicy clcp;
135 clcp.set_initial_delay(base::Minutes(2));
136 config = std::make_unique<ConfiguratorImpl>(clcp, false);
137 CHECK_EQ(base::Minutes(2), config->InitialDelay());
141 base::test::ScopedCommandLine scoped_command_line;
142 base::CommandLine* command_line =
143 scoped_command_line.GetProcessCommandLine();
144 command_line->AppendSwitchASCII(switches::kComponentUpdater,
145 "initial-delay=3.14");
146 config = std::make_unique<ConfiguratorImpl>(
147 ComponentUpdaterCommandLineConfigPolicy(command_line), false);
148 CHECK_EQ(base::Seconds(3.14), config->InitialDelay());
152 TEST_F(ComponentUpdaterConfiguratorImplTest, TestRequest) {
153 class CommandLineConfigPolicy
154 : public update_client::CommandLineConfigPolicy {
156 CommandLineConfigPolicy() = default;
158 // update_client::CommandLineConfigPolicy overrides.
159 bool BackgroundDownloadsEnabled() const override { return false; }
160 bool DeltaUpdatesEnabled() const override { return false; }
161 bool FastUpdate() const override { return false; }
162 bool PingsEnabled() const override { return false; }
163 bool TestRequest() const override { return test_request_; }
164 GURL UrlSourceOverride() const override { return GURL(); }
165 base::TimeDelta InitialDelay() const override { return base::Seconds(0); }
167 void set_test_request(bool test_request) { test_request_ = test_request; }
170 bool test_request_ = false;
173 auto config = std::make_unique<ConfiguratorImpl>(
174 update_client::CommandLineConfigPolicy(), false);
175 EXPECT_TRUE(config->ExtraRequestParams().empty());
177 CommandLineConfigPolicy clcp;
178 config = std::make_unique<ConfiguratorImpl>(clcp, false);
179 auto extra_request_params = config->ExtraRequestParams();
180 EXPECT_EQ(0u, extra_request_params.count("testrequest"));
181 EXPECT_EQ(0u, extra_request_params.count("testsource"));
182 clcp.set_test_request(true);
183 config = std::make_unique<ConfiguratorImpl>(clcp, false);
184 extra_request_params = config->ExtraRequestParams();
185 EXPECT_EQ("1", extra_request_params["testrequest"]);
186 EXPECT_EQ("dev", extra_request_params["testsource"]);
189 } // namespace component_updater