|  | // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | #include "base/command_line.h" | 
|  | #include "base/macros.h" | 
|  | #include "components/component_updater/component_updater_command_line_config_policy.h" | 
|  | #include "components/component_updater/configurator_impl.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace component_updater { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | const int kDelayOneMinute = 60; | 
|  | const int kDelayOneHour = kDelayOneMinute * 60; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | class ComponentUpdaterConfiguratorImplTest : public testing::Test { | 
|  | public: | 
|  | ComponentUpdaterConfiguratorImplTest() {} | 
|  | ~ComponentUpdaterConfiguratorImplTest() override {} | 
|  |  | 
|  | private: | 
|  | DISALLOW_COPY_AND_ASSIGN(ComponentUpdaterConfiguratorImplTest); | 
|  | }; | 
|  |  | 
|  | TEST_F(ComponentUpdaterConfiguratorImplTest, FastUpdate) { | 
|  | // Test the default timing values when no command line argument is present. | 
|  | base::CommandLine cmdline(base::CommandLine::NO_PROGRAM); | 
|  | std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>( | 
|  | ComponentUpdaterCommandLineConfigPolicy(&cmdline), false); | 
|  | CHECK_EQ(6 * kDelayOneMinute, config->InitialDelay()); | 
|  | CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay()); | 
|  | CHECK_EQ(30 * kDelayOneMinute, config->OnDemandDelay()); | 
|  | CHECK_EQ(15 * kDelayOneMinute, config->UpdateDelay()); | 
|  |  | 
|  | // Test the fast-update timings. | 
|  | cmdline.AppendSwitchASCII("--component-updater", "fast-update"); | 
|  | config = std::make_unique<ConfiguratorImpl>( | 
|  | ComponentUpdaterCommandLineConfigPolicy(&cmdline), false); | 
|  | CHECK_EQ(10, config->InitialDelay()); | 
|  | CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay()); | 
|  | CHECK_EQ(2, config->OnDemandDelay()); | 
|  | CHECK_EQ(10, config->UpdateDelay()); | 
|  | } | 
|  |  | 
|  | TEST_F(ComponentUpdaterConfiguratorImplTest, FastUpdateWithCustomPolicy) { | 
|  | // Test the default timing values when no command line argument is present | 
|  | // (default). | 
|  | class DefaultCommandLineConfigPolicy | 
|  | : public update_client::CommandLineConfigPolicy { | 
|  | public: | 
|  | DefaultCommandLineConfigPolicy() {} | 
|  |  | 
|  | // update_client::CommandLineConfigPolicy overrides. | 
|  | bool BackgroundDownloadsEnabled() const override { return false; } | 
|  | bool DeltaUpdatesEnabled() const override { return false; } | 
|  | bool FastUpdate() const override { return false; } | 
|  | bool PingsEnabled() const override { return false; } | 
|  | bool TestRequest() const override { return false; } | 
|  | GURL UrlSourceOverride() const override { return GURL(); } | 
|  | }; | 
|  |  | 
|  | std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>( | 
|  | DefaultCommandLineConfigPolicy(), false); | 
|  | CHECK_EQ(6 * kDelayOneMinute, config->InitialDelay()); | 
|  | CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay()); | 
|  | CHECK_EQ(30 * kDelayOneMinute, config->OnDemandDelay()); | 
|  | CHECK_EQ(15 * kDelayOneMinute, config->UpdateDelay()); | 
|  |  | 
|  | // Test the fast-update timings. | 
|  | class FastUpdateCommandLineConfigurator | 
|  | : public DefaultCommandLineConfigPolicy { | 
|  | public: | 
|  | FastUpdateCommandLineConfigurator() {} | 
|  |  | 
|  | bool FastUpdate() const override { return true; } | 
|  | }; | 
|  | config = std::make_unique<ConfiguratorImpl>( | 
|  | FastUpdateCommandLineConfigurator(), false); | 
|  | CHECK_EQ(10, config->InitialDelay()); | 
|  | CHECK_EQ(5 * kDelayOneHour, config->NextCheckDelay()); | 
|  | CHECK_EQ(2, config->OnDemandDelay()); | 
|  | CHECK_EQ(10, config->UpdateDelay()); | 
|  | } | 
|  |  | 
|  | TEST_F(ComponentUpdaterConfiguratorImplTest, InitialDelay) { | 
|  | std::unique_ptr<ConfiguratorImpl> config = std::make_unique<ConfiguratorImpl>( | 
|  | update_client::CommandLineConfigPolicy(), false); | 
|  | CHECK_EQ(6 * kDelayOneMinute, config->InitialDelay()); | 
|  |  | 
|  | class CommandLineConfigPolicy | 
|  | : public update_client::CommandLineConfigPolicy { | 
|  | public: | 
|  | CommandLineConfigPolicy() {} | 
|  |  | 
|  | // update_client::CommandLineConfigPolicy overrides. | 
|  | bool BackgroundDownloadsEnabled() const override { return false; } | 
|  | bool DeltaUpdatesEnabled() const override { return false; } | 
|  | bool FastUpdate() const override { return fast_update_; } | 
|  | bool PingsEnabled() const override { return false; } | 
|  | bool TestRequest() const override { return false; } | 
|  | GURL UrlSourceOverride() const override { return GURL(); } | 
|  | int InitialDelay() const override { return initial_delay_; }; | 
|  |  | 
|  | void set_fast_update(bool fast_update) { fast_update_ = fast_update; } | 
|  | void set_initial_delay(int initial_delay) { | 
|  | initial_delay_ = initial_delay; | 
|  | } | 
|  |  | 
|  | private: | 
|  | int initial_delay_ = 0; | 
|  | bool fast_update_ = false; | 
|  | }; | 
|  |  | 
|  | { | 
|  | CommandLineConfigPolicy clcp; | 
|  | clcp.set_fast_update(true); | 
|  | config = std::make_unique<ConfiguratorImpl>(clcp, false); | 
|  | CHECK_EQ(10, config->InitialDelay()); | 
|  | } | 
|  |  | 
|  | { | 
|  | CommandLineConfigPolicy clcp; | 
|  | clcp.set_fast_update(false); | 
|  | config = std::make_unique<ConfiguratorImpl>(clcp, false); | 
|  | CHECK_EQ(6 * kDelayOneMinute, config->InitialDelay()); | 
|  | } | 
|  |  | 
|  | { | 
|  | CommandLineConfigPolicy clcp; | 
|  | clcp.set_initial_delay(kDelayOneMinute); | 
|  | config = std::make_unique<ConfiguratorImpl>(clcp, false); | 
|  | CHECK_EQ(kDelayOneMinute, config->InitialDelay()); | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST_F(ComponentUpdaterConfiguratorImplTest, TestRequest) { | 
|  | class CommandLineConfigPolicy | 
|  | : public update_client::CommandLineConfigPolicy { | 
|  | public: | 
|  | CommandLineConfigPolicy() = default; | 
|  |  | 
|  | // update_client::CommandLineConfigPolicy overrides. | 
|  | bool BackgroundDownloadsEnabled() const override { return false; } | 
|  | bool DeltaUpdatesEnabled() const override { return false; } | 
|  | bool FastUpdate() const override { return false; } | 
|  | bool PingsEnabled() const override { return false; } | 
|  | bool TestRequest() const override { return test_request_; } | 
|  | GURL UrlSourceOverride() const override { return GURL(); } | 
|  | int InitialDelay() const override { return 0; }; | 
|  |  | 
|  | void set_test_request(bool test_request) { test_request_ = test_request; } | 
|  |  | 
|  | private: | 
|  | bool test_request_ = false; | 
|  | }; | 
|  |  | 
|  | auto config = std::make_unique<ConfiguratorImpl>( | 
|  | update_client::CommandLineConfigPolicy(), false); | 
|  | EXPECT_TRUE(config->ExtraRequestParams().empty()); | 
|  |  | 
|  | CommandLineConfigPolicy clcp; | 
|  | config = std::make_unique<ConfiguratorImpl>(clcp, false); | 
|  | auto extra_request_params = config->ExtraRequestParams(); | 
|  | EXPECT_EQ(0u, extra_request_params.count("testrequest")); | 
|  | EXPECT_EQ(0u, extra_request_params.count("testsource")); | 
|  | clcp.set_test_request(true); | 
|  | config = std::make_unique<ConfiguratorImpl>(clcp, false); | 
|  | extra_request_params = config->ExtraRequestParams(); | 
|  | EXPECT_EQ("1", extra_request_params["testrequest"]); | 
|  | EXPECT_EQ("dev", extra_request_params["testsource"]); | 
|  | } | 
|  |  | 
|  | }  // namespace component_updater |