| // Copyright 2019 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 "components/optimization_guide/optimization_guide_switches.h" |
| |
| #include "base/base64.h" |
| #include "base/command_line.h" |
| #include "base/optional.h" |
| #include "components/optimization_guide/proto/hints.pb.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace optimization_guide { |
| namespace switches { |
| |
| TEST(OptimizationGuideSwitchesTest, ParseHintsFetchOverrideFromCommandLine) { |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kFetchHintsOverride, |
| "whatever.com"); |
| |
| base::Optional<std::vector<std::string>> parsed_hosts = |
| ParseHintsFetchOverrideFromCommandLine(); |
| |
| EXPECT_TRUE(parsed_hosts.has_value()); |
| EXPECT_EQ(1ul, parsed_hosts.value().size()); |
| EXPECT_EQ("whatever.com", parsed_hosts.value()[0]); |
| } |
| |
| TEST(OptimizationGuideSwitchesTest, |
| ParseHintsFetchOverrideFromCommandLineMultipleHosts) { |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| kFetchHintsOverride, "whatever.com, whatever-2.com, ,"); |
| |
| base::Optional<std::vector<std::string>> parsed_hosts = |
| ParseHintsFetchOverrideFromCommandLine(); |
| |
| EXPECT_TRUE(parsed_hosts.has_value()); |
| EXPECT_EQ(2ul, parsed_hosts.value().size()); |
| EXPECT_EQ("whatever.com", parsed_hosts.value()[0]); |
| EXPECT_EQ("whatever-2.com", parsed_hosts.value()[1]); |
| } |
| |
| TEST(OptimizationGuideSwitchesTest, |
| ParseHintsFetchOverrideFromCommandLineNoSwitch) { |
| base::Optional<std::vector<std::string>> parsed_hosts = |
| ParseHintsFetchOverrideFromCommandLine(); |
| |
| EXPECT_FALSE(parsed_hosts.has_value()); |
| } |
| |
| TEST(OptimizationGuideSwitchesTest, ParseComponentConfigFromCommandLine) { |
| optimization_guide::proto::Configuration config; |
| optimization_guide::proto::Hint* hint = config.add_hints(); |
| hint->set_key("somedomain.org"); |
| hint->set_key_representation(optimization_guide::proto::HOST_SUFFIX); |
| |
| std::string encoded_config; |
| config.SerializeToString(&encoded_config); |
| base::Base64Encode(encoded_config, &encoded_config); |
| |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kHintsProtoOverride, |
| encoded_config); |
| |
| std::unique_ptr<optimization_guide::proto::Configuration> parsed_config = |
| ParseComponentConfigFromCommandLine(); |
| |
| EXPECT_EQ(1, parsed_config->hints_size()); |
| EXPECT_EQ("somedomain.org", parsed_config->hints(0).key()); |
| } |
| |
| TEST(OptimizationGuideSwitchesTest, |
| ParseComponentConfigFromCommandLineNotAProto) { |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kHintsProtoOverride, |
| "not-a-proto"); |
| |
| std::unique_ptr<optimization_guide::proto::Configuration> parsed_config = |
| ParseComponentConfigFromCommandLine(); |
| |
| EXPECT_EQ(nullptr, parsed_config); |
| } |
| |
| TEST(OptimizationGuideSwitchesTest, |
| ParseComponentConfigFromCommandLineSwitchNotSet) { |
| std::unique_ptr<optimization_guide::proto::Configuration> parsed_config = |
| ParseComponentConfigFromCommandLine(); |
| |
| EXPECT_EQ(nullptr, parsed_config); |
| } |
| |
| TEST(OptimizationGuideSwitchesTest, |
| ParseComponentConfigFromCommandLineNotAConfiguration) { |
| optimization_guide::proto::HostInfo host_info; |
| host_info.set_host("whatever.com"); |
| std::string encoded_proto; |
| host_info.SerializeToString(&encoded_proto); |
| base::Base64Encode(encoded_proto, &encoded_proto); |
| |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kHintsProtoOverride, |
| encoded_proto); |
| |
| std::unique_ptr<optimization_guide::proto::Configuration> parsed_config = |
| ParseComponentConfigFromCommandLine(); |
| |
| EXPECT_EQ(nullptr, parsed_config); |
| } |
| |
| } // namespace switches |
| } // namespace optimization_guide |