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",