model_util_unittest.cc 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. // Copyright 2022 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. #include "components/optimization_guide/core/model_util.h"
  5. #include "base/base64.h"
  6. #include "base/command_line.h"
  7. #include "base/strings/stringprintf.h"
  8. #include "components/optimization_guide/core/optimization_guide_switches.h"
  9. #include "components/optimization_guide/core/optimization_guide_test_util.h"
  10. #include "testing/gtest/include/gtest/gtest.h"
  11. namespace optimization_guide {
  12. namespace {
  13. #if BUILDFLAG(IS_WIN)
  14. const char kOtherAbsoluteFilePath[] = "C:\\other\\absolute\\file\\path";
  15. #else
  16. const char kOtherAbsoluteFilePath[] = "/other/abs/file/path";
  17. #endif
  18. } // namespace
  19. TEST(ModelUtilTest, GetModelOverrideForOptimizationTargetSwitchNotSet) {
  20. absl::optional<
  21. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  22. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  23. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  24. EXPECT_EQ(absl::nullopt, file_path_and_metadata);
  25. EXPECT_FALSE(switches::IsModelOverridePresent());
  26. }
  27. TEST(ModelUtilTest, GetModelOverrideForOptimizationTargetEmptyInput) {
  28. base::CommandLine::ForCurrentProcess()->AppendSwitch(
  29. switches::kModelOverride);
  30. absl::optional<
  31. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  32. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  33. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  34. EXPECT_EQ(absl::nullopt, file_path_and_metadata);
  35. }
  36. TEST(ModelUtilTest, GetModelOverrideForOptimizationTargetBadInput) {
  37. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  38. switches::kModelOverride, "whatever");
  39. absl::optional<
  40. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  41. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  42. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  43. EXPECT_EQ(absl::nullopt, file_path_and_metadata);
  44. }
  45. TEST(ModelUtilTest,
  46. GetModelOverrideForOptimizationTargetInvalidOptimizationTarget) {
  47. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  48. switches::kModelOverride,
  49. "notanoptimizationtarget:" + std::string(kTestAbsoluteFilePath));
  50. absl::optional<
  51. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  52. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  53. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  54. EXPECT_EQ(absl::nullopt, file_path_and_metadata);
  55. }
  56. TEST(ModelUtilTest, GetModelOverrideForOptimizationTargetRelativeFilePath) {
  57. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  58. switches::kModelOverride, "OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD:" +
  59. std::string(kTestRelativeFilePath));
  60. absl::optional<
  61. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  62. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  63. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  64. EXPECT_EQ(absl::nullopt, file_path_and_metadata);
  65. }
  66. TEST(ModelUtilTest,
  67. GetModelOverrideForOptimizationTargetRelativeFilePathWithMetadata) {
  68. optimization_guide::proto::Any metadata;
  69. metadata.set_type_url("sometypeurl");
  70. std::string encoded_metadata;
  71. metadata.SerializeToString(&encoded_metadata);
  72. base::Base64Encode(encoded_metadata, &encoded_metadata);
  73. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  74. switches::kModelOverride,
  75. base::StringPrintf("OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD:%s:%s",
  76. kTestRelativeFilePath, encoded_metadata.c_str()));
  77. absl::optional<
  78. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  79. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  80. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  81. EXPECT_EQ(absl::nullopt, file_path_and_metadata);
  82. }
  83. TEST(ModelUtilTest, GetModelOverrideForOptimizationTargetOneFilePath) {
  84. optimization_guide::proto::Any metadata;
  85. metadata.set_type_url("sometypeurl");
  86. std::string encoded_metadata;
  87. metadata.SerializeToString(&encoded_metadata);
  88. base::Base64Encode(encoded_metadata, &encoded_metadata);
  89. #if BUILDFLAG(IS_WIN)
  90. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  91. switches::kModelOverride,
  92. base::StringPrintf("OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD|%s|%s",
  93. kTestAbsoluteFilePath, encoded_metadata.c_str()));
  94. #else
  95. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  96. switches::kModelOverride,
  97. base::StringPrintf("OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD:%s:%s",
  98. kTestAbsoluteFilePath, encoded_metadata.c_str()));
  99. #endif
  100. absl::optional<
  101. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  102. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  103. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  104. ASSERT_TRUE(file_path_and_metadata);
  105. EXPECT_EQ(kTestAbsoluteFilePath, file_path_and_metadata->first);
  106. EXPECT_EQ("sometypeurl", file_path_and_metadata->second->type_url());
  107. }
  108. TEST(ModelUtilTest, GetModelOverrideForOptimizationTargetMultipleFilePath) {
  109. optimization_guide::proto::Any metadata;
  110. metadata.set_type_url("sometypeurl");
  111. std::string encoded_metadata;
  112. metadata.SerializeToString(&encoded_metadata);
  113. base::Base64Encode(encoded_metadata, &encoded_metadata);
  114. #if BUILDFLAG(IS_WIN)
  115. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  116. switches::kModelOverride,
  117. base::StringPrintf("OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD|%s,"
  118. "OPTIMIZATION_TARGET_PAGE_TOPICS|%s|%s",
  119. kTestAbsoluteFilePath, kOtherAbsoluteFilePath,
  120. encoded_metadata.c_str()));
  121. #else
  122. base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
  123. switches::kModelOverride,
  124. base::StringPrintf("OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD:%s,"
  125. "OPTIMIZATION_TARGET_PAGE_TOPICS:%s:%s",
  126. kTestAbsoluteFilePath, kOtherAbsoluteFilePath,
  127. encoded_metadata.c_str()));
  128. #endif
  129. absl::optional<
  130. std::pair<std::string, absl::optional<optimization_guide::proto::Any>>>
  131. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  132. optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD);
  133. ASSERT_TRUE(file_path_and_metadata);
  134. EXPECT_EQ(kTestAbsoluteFilePath, file_path_and_metadata->first);
  135. file_path_and_metadata = GetModelOverrideForOptimizationTarget(
  136. optimization_guide::proto::OPTIMIZATION_TARGET_PAGE_TOPICS);
  137. ASSERT_TRUE(file_path_and_metadata);
  138. EXPECT_EQ(kOtherAbsoluteFilePath, file_path_and_metadata->first);
  139. EXPECT_EQ("sometypeurl", file_path_and_metadata->second->type_url());
  140. }
  141. } // namespace optimization_guide