Create the test suite responsible for running the consistency tests.
Also includes the first golden file with a few test cases.
Bug: 935711
Change-Id: Ife7bb83aee8789bf81aaeea8f20e173b81a69097
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1494676
Commit-Queue: G. Silva <gfaus@chromium.org>
Reviewed-by: Aga Wronska <agawronska@chromium.org>
Reviewed-by: Henrique Grandinetti <hgrandinetti@chromium.org>
Cr-Commit-Position: refs/heads/master@{#641175}
diff --git a/chrome/browser/chromeos/child_accounts/time_limit_consistency_test/consistency_test.cc b/chrome/browser/chromeos/child_accounts/time_limit_consistency_test/consistency_test.cc
new file mode 100644
index 0000000..eff33624
--- /dev/null
+++ b/chrome/browser/chromeos/child_accounts/time_limit_consistency_test/consistency_test.cc
@@ -0,0 +1,62 @@
+// 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.
+//
+// Test for the time limit processor which checks its behavior against golden
+// files. This is a parameterized test, so the single test method will actually
+// produce one test case for each case listed inside each golden file.
+
+#include "base/time/time.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_converter.h"
+#include "chrome/browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_loader.h"
+#include "chrome/browser/chromeos/child_accounts/time_limit_consistency_test/goldens/consistency_golden.pb.h"
+#include "chrome/browser/chromeos/child_accounts/time_limit_consistency_test/proto_matcher.h"
+#include "chrome/browser/chromeos/child_accounts/usage_time_limit_processor.h"
+#include "chromeos/settings/timezone_settings.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+namespace time_limit_consistency {
+
+using TimeLimitConsistencyTest = testing::TestWithParam<GoldenParam>;
+
+// The main test case for the consistency tests, which will be run once for each
+// golden case.
+TEST_P(TimeLimitConsistencyTest, OutputMatchesGolden) {
+ const ConsistencyGoldenCase golden_case = GetParam().golden_case;
+ const ConsistencyGoldenCurrentState current_state =
+ golden_case.current_state();
+
+ icu::TimeZone* timezone(
+ icu::TimeZone::createTimeZone(current_state.timezone().c_str()));
+ base::Time current_time =
+ base::Time::FromJavaTime(current_state.time_millis());
+
+ std::unique_ptr<base::DictionaryValue> policy =
+ ConvertGoldenInputToProcessorInput(golden_case.input());
+ usage_time_limit::State state = usage_time_limit::GetState(
+ policy, /* local_override */ nullptr, base::TimeDelta::FromMinutes(0),
+ current_time, current_time, timezone, /* previous_state */ base::nullopt);
+ ConsistencyGoldenOutput actual_output =
+ ConvertProcessorOutputToGoldenOutput(state);
+
+ EXPECT_THAT(actual_output, EqualsProto(golden_case.output()));
+}
+
+// Generate the test case name from the metadata included in GoldenParam.
+static std::string GetTestCaseName(
+ testing::TestParamInfo<GoldenParam> param_info) {
+ return param_info.param.suite_name + "_" +
+ std::to_string(param_info.param.index);
+}
+
+// Instantiate the test suite, creating one test case for each golden case
+// loaded and providing it as a parameter.
+INSTANTIATE_TEST_SUITE_P(Parameterized,
+ TimeLimitConsistencyTest,
+ testing::ValuesIn(LoadGoldenCases()),
+ GetTestCaseName);
+
+} // namespace time_limit_consistency
+} // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/time_limit_consistency_test/goldens/simple_bedtimes.textproto b/chrome/browser/chromeos/child_accounts/time_limit_consistency_test/goldens/simple_bedtimes.textproto
new file mode 100644
index 0000000..e5196ec3
--- /dev/null
+++ b/chrome/browser/chromeos/child_accounts/time_limit_consistency_test/goldens/simple_bedtimes.textproto
@@ -0,0 +1,62 @@
+supported_platforms: CHROME_OS
+cases {
+ input {
+ window_limits {
+ effective_day: MONDAY
+ starts_at {
+ hour: 23
+ minute: 0
+ }
+ ends_at {
+ hour: 8
+ minute: 0
+ }
+ }
+ }
+ current_state {
+ # Monday, Jan 28th 2019 at 11:30pm
+ time_millis: 1548718200000
+ timezone: "GMT"
+ }
+ output {
+ is_locked: true
+ active_policy: FIXED_LIMIT
+ # Tuesday, Jan 29th 2019 at 8:00am
+ next_unlocking_time_millis: 1548748800000
+ }
+}
+cases {
+ input {
+ window_limits {
+ effective_day: WEDNESDAY
+ starts_at {
+ hour: 12
+ minute: 0
+ }
+ ends_at {
+ hour: 21
+ minute: 30
+ }
+ }
+ window_limits {
+ effective_day: FRIDAY
+ starts_at {
+ hour: 15
+ minute: 0
+ }
+ ends_at {
+ hour: 5
+ minute: 30
+ }
+ }
+ }
+ current_state {
+ # Wednesday, Jan 30th 2019 at 9:40pm
+ time_millis: 1548884400000
+ timezone: "GMT"
+ }
+ output {
+ is_locked: false
+ active_policy: NO_ACTIVE_POLICY
+ }
+}
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 382f7ba2..d038ed6 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -5951,9 +5951,13 @@
test("usage_time_limit_unittests") {
testonly = true
sources = [
+ "../browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_converter.cc",
+ "../browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_converter.h",
+ "../browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_converter_unittest.cc",
"../browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_loader.cc",
"../browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_loader.h",
"../browser/chromeos/child_accounts/time_limit_consistency_test/consistency_golden_loader_unittest.cc",
+ "../browser/chromeos/child_accounts/time_limit_consistency_test/consistency_test.cc",
"../browser/chromeos/child_accounts/time_limit_consistency_test/proto_matcher.h",
"../browser/chromeos/child_accounts/time_limit_consistency_test/run_all_unittests.cc",
"../browser/chromeos/child_accounts/time_limit_override.cc",