Index: components/task_scheduler_util/common/variations_util_unittest.cc |
diff --git a/components/task_scheduler_util/common/variations_util_unittest.cc b/components/task_scheduler_util/common/variations_util_unittest.cc |
index 386d0b0163c0b015ab572786c6db4299302f3985..efdad2f029287aeec775f66e4e5edf9dcfe43727 100644 |
--- a/components/task_scheduler_util/common/variations_util_unittest.cc |
+++ b/components/task_scheduler_util/common/variations_util_unittest.cc |
@@ -8,8 +8,13 @@ |
#include <string> |
#include <vector> |
+#include "build/build_config.h" |
+#include "base/command_line.h" |
+#include "base/macros.h" |
+#include "base/metrics/field_trial.h" |
#include "base/task_scheduler/scheduler_worker_pool_params.h" |
#include "base/threading/platform_thread.h" |
+#include "components/variations/variations_associated_data.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace task_scheduler_util { |
@@ -20,6 +25,13 @@ using StandbyThreadPolicy = |
base::SchedulerWorkerPoolParams::StandbyThreadPolicy; |
using ThreadPriority = base::ThreadPriority; |
+#if !defined(OS_IOS) |
+constexpr char kFieldTrialName[] = "BrowserScheduler"; |
+constexpr char kFieldTrialTestGroup[] = "Test"; |
+constexpr char kTaskSchedulerVariationParamsSwitch[] = |
+ "task-scheduler-variation-params"; |
+#endif // !defined(OS_IOS) |
+ |
std::vector<SchedulerImmutableWorkerPoolParams> GetImmutableWorkerPoolParams() { |
std::vector<SchedulerImmutableWorkerPoolParams> constant_worker_pool_params; |
constant_worker_pool_params.emplace_back("Background", |
@@ -33,9 +45,25 @@ std::vector<SchedulerImmutableWorkerPoolParams> GetImmutableWorkerPoolParams() { |
return constant_worker_pool_params; |
} |
+class TaskSchedulerUtilVariationsUtilTest : public testing::Test { |
+ public: |
+ TaskSchedulerUtilVariationsUtilTest() : field_trial_list_(nullptr) {} |
+ ~TaskSchedulerUtilVariationsUtilTest() override { |
+ // Ensure that the maps are cleared between tests, since they are stored as |
+ // process singletons. |
+ variations::testing::ClearAllVariationIDs(); |
+ variations::testing::ClearAllVariationParams(); |
+ } |
+ |
+ private: |
+ base::FieldTrialList field_trial_list_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TaskSchedulerUtilVariationsUtilTest); |
+}; |
+ |
} // namespace |
-TEST(TaskSchedulerUtilVariationsUtilTest, OrderingParams5) { |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams5) { |
std::map<std::string, std::string> variation_params; |
variation_params["Background"] = "1;1;1;0;42"; |
variation_params["BackgroundFileIO"] = "2;2;1;0;52"; |
@@ -75,7 +103,7 @@ TEST(TaskSchedulerUtilVariationsUtilTest, OrderingParams5) { |
params_vector[3].suggested_reclaim_time()); |
} |
-TEST(TaskSchedulerUtilVariationsUtilTest, OrderingParams6) { |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams6) { |
std::map<std::string, std::string> variation_params; |
variation_params["Background"] = "1;1;1;0;42;lazy"; |
variation_params["BackgroundFileIO"] = "2;2;1;0;52;one"; |
@@ -117,13 +145,13 @@ TEST(TaskSchedulerUtilVariationsUtilTest, OrderingParams6) { |
params_vector[3].suggested_reclaim_time()); |
} |
-TEST(TaskSchedulerUtilVariationsUtilTest, NoData) { |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, NoData) { |
EXPECT_TRUE(GetWorkerPoolParams(GetImmutableWorkerPoolParams(), |
std::map<std::string, std::string>()) |
.empty()); |
} |
-TEST(TaskSchedulerUtilVariationsUtilTest, IncompleteParameters) { |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, IncompleteParameters) { |
std::map<std::string, std::string> variation_params; |
variation_params["Background"] = "1;1;1;0"; |
variation_params["BackgroundFileIO"] = "2;2;1;0"; |
@@ -134,7 +162,7 @@ TEST(TaskSchedulerUtilVariationsUtilTest, IncompleteParameters) { |
.empty()); |
} |
-TEST(TaskSchedulerUtilVariationsUtilTest, InvalidParameters) { |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, InvalidParameters) { |
std::map<std::string, std::string> variation_params; |
variation_params["Background"] = "a;b;c;d;e"; |
variation_params["BackgroundFileIO"] = "a;b;c;d;e"; |
@@ -145,4 +173,76 @@ TEST(TaskSchedulerUtilVariationsUtilTest, InvalidParameters) { |
.empty()); |
} |
+#if !defined(OS_IOS) |
+// Verify that AddVariationParamsToCommandLine() serializes BrowserScheduler |
+// variation params that start with the specified prefix to the command line and |
+// that GetVariationParamsFromCommandLine() correctly deserializes them. |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLine) { |
+ std::map<std::string, std::string> in_variation_params; |
+ in_variation_params["PrefixFoo"] = "Foo"; |
+ in_variation_params["PrefixBar"] = "Bar"; |
+ in_variation_params["NoPrefix"] = "NoPrefix"; |
+ ASSERT_TRUE(variations::AssociateVariationParams( |
+ kFieldTrialName, kFieldTrialTestGroup, in_variation_params)); |
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kFieldTrialTestGroup); |
+ |
+ base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
+ AddVariationParamsToCommandLine("Prefix", &command_line); |
+ const std::map<std::string, std::string> out_variation_params = |
+ GetVariationParamsFromCommandLine(command_line); |
+ |
+ std::map<std::string, std::string> expected_out_variation_params; |
+ expected_out_variation_params["PrefixFoo"] = "Foo"; |
+ expected_out_variation_params["PrefixBar"] = "Bar"; |
+ EXPECT_EQ(expected_out_variation_params, out_variation_params); |
+} |
+ |
+// Verify that AddVariationParamsToCommandLine() doesn't add anything to the |
+// command line when a BrowserScheduler variation param key contains |. A key |
+// that contains | wouldn't be deserialized correctly by |
+// GetVariationParamsFromCommandLine(). |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, |
+ CommandLineSeparatorInVariationParamsKey) { |
+ std::map<std::string, std::string> in_variation_params; |
+ in_variation_params["PrefixFoo"] = "Foo"; |
+ in_variation_params["PrefixKey|"] = "Value"; |
+ ASSERT_TRUE(variations::AssociateVariationParams( |
+ kFieldTrialName, kFieldTrialTestGroup, in_variation_params)); |
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kFieldTrialTestGroup); |
+ |
+ base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
+ AddVariationParamsToCommandLine("Prefix", &command_line); |
+ EXPECT_TRUE( |
+ command_line.GetSwitchValueASCII(kTaskSchedulerVariationParamsSwitch) |
+ .empty()); |
+} |
+ |
+// Verify that AddVariationParamsToCommandLine() doesn't add anything to the |
+// command line when a BrowserScheduler variation param value contains |. A |
+// value that contains | wouldn't be deserialized correctly by |
+// GetVariationParamsFromCommandLine(). |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, |
+ CommandLineSeparatorInVariationParamsValue) { |
+ std::map<std::string, std::string> in_variation_params; |
+ in_variation_params["PrefixFoo"] = "Foo"; |
+ in_variation_params["PrefixKey"] = "Value|"; |
+ ASSERT_TRUE(variations::AssociateVariationParams( |
+ kFieldTrialName, kFieldTrialTestGroup, in_variation_params)); |
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kFieldTrialTestGroup); |
+ |
+ base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
+ AddVariationParamsToCommandLine("Prefix", &command_line); |
+ EXPECT_TRUE( |
+ command_line.GetSwitchValueASCII(kTaskSchedulerVariationParamsSwitch) |
+ .empty()); |
+} |
+ |
+// Verify that GetVariationParamsFromCommandLine() returns an empty map when the |
+// command line doesn't have a --task-scheduler-variation-params switch. |
+TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLineNoSwitch) { |
+ base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
+ EXPECT_TRUE(GetVariationParamsFromCommandLine(command_line).empty()); |
+} |
+#endif // !defined(OS_IOS) |
+ |
} // namespace task_scheduler_util |