summaryrefslogtreecommitdiffstats
path: root/chromium/components/policy/core/common/configuration_policy_provider_test.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/policy/core/common/configuration_policy_provider_test.h')
-rw-r--r--chromium/components/policy/core/common/configuration_policy_provider_test.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/chromium/components/policy/core/common/configuration_policy_provider_test.h b/chromium/components/policy/core/common/configuration_policy_provider_test.h
new file mode 100644
index 00000000000..210055da579
--- /dev/null
+++ b/chromium/components/policy/core/common/configuration_policy_provider_test.h
@@ -0,0 +1,162 @@
+// Copyright 2013 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.
+
+#ifndef COMPONENTS_POLICY_CORE_COMMON_CONFIGURATION_POLICY_PROVIDER_TEST_H_
+#define COMPONENTS_POLICY_CORE_COMMON_CONFIGURATION_POLICY_PROVIDER_TEST_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback_forward.h"
+#include "base/memory/ref_counted.h"
+#include "base/test/task_environment.h"
+#include "build/build_config.h"
+#include "components/policy/core/common/policy_types.h"
+#include "components/policy/core/common/schema.h"
+#include "components/policy/core/common/schema_registry.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+class DictionaryValue;
+class ListValue;
+class SequencedTaskRunner;
+class Value;
+}
+
+namespace policy {
+
+class ConfigurationPolicyProvider;
+
+namespace test_keys {
+
+extern const char kKeyString[];
+extern const char kKeyBoolean[];
+extern const char kKeyInteger[];
+extern const char kKeyStringList[];
+extern const char kKeyDictionary[];
+
+} // namespace test_keys
+
+class PolicyTestBase : public testing::Test {
+ public:
+ PolicyTestBase();
+ PolicyTestBase(const PolicyTestBase&) = delete;
+ PolicyTestBase& operator=(const PolicyTestBase&) = delete;
+ ~PolicyTestBase() override;
+
+ // testing::Test:
+ void SetUp() override;
+ void TearDown() override;
+
+ protected:
+ bool RegisterSchema(const PolicyNamespace& ns,
+ const std::string& schema);
+
+ // Needs to be the first member
+ base::test::TaskEnvironment task_environment_;
+ SchemaRegistry schema_registry_;
+};
+
+// An interface for creating a test policy provider and creating a policy
+// provider instance for testing. Used as the parameter to the abstract
+// ConfigurationPolicyProviderTest below.
+class PolicyProviderTestHarness {
+ public:
+ // |level|, |scope| and |source| are the level, scope and source of the
+ // policies returned by the providers from CreateProvider().
+ PolicyProviderTestHarness(PolicyLevel level,
+ PolicyScope scope,
+ PolicySource source);
+ PolicyProviderTestHarness(const PolicyProviderTestHarness&) = delete;
+ PolicyProviderTestHarness& operator=(const PolicyProviderTestHarness&) =
+ delete;
+ virtual ~PolicyProviderTestHarness();
+
+ // Actions to run at gtest SetUp() time.
+ virtual void SetUp() = 0;
+
+ // Create a new policy provider.
+ virtual ConfigurationPolicyProvider* CreateProvider(
+ SchemaRegistry* registry,
+ scoped_refptr<base::SequencedTaskRunner> task_runner) = 0;
+
+ // Returns the policy level, scope and source set by the policy provider.
+ PolicyLevel policy_level() const;
+ PolicyScope policy_scope() const;
+ PolicySource policy_source() const;
+
+ // Helpers to configure the environment the policy provider reads from.
+ virtual void InstallEmptyPolicy() = 0;
+ virtual void InstallStringPolicy(const std::string& policy_name,
+ const std::string& policy_value) = 0;
+ virtual void InstallIntegerPolicy(const std::string& policy_name,
+ int policy_value) = 0;
+ virtual void InstallBooleanPolicy(const std::string& policy_name,
+ bool policy_value) = 0;
+ virtual void InstallStringListPolicy(const std::string& policy_name,
+ const base::ListValue* policy_value) = 0;
+ virtual void InstallDictionaryPolicy(const std::string& policy_name,
+ const base::Value* policy_value) = 0;
+
+ // Not every provider supports installing 3rd party policy. Those who do
+ // should override this method; the default just makes the test fail.
+ virtual void Install3rdPartyPolicy(const base::DictionaryValue* policies);
+
+ private:
+ PolicyLevel level_;
+ PolicyScope scope_;
+ PolicySource source_;
+};
+
+// A factory method for creating a test harness.
+typedef PolicyProviderTestHarness* (*CreatePolicyProviderTestHarness)();
+
+// Abstract policy provider test. This is meant to be instantiated for each
+// policy provider implementation, passing in a suitable harness factory
+// function as the test parameter.
+class ConfigurationPolicyProviderTest
+ : public PolicyTestBase,
+ public testing::WithParamInterface<CreatePolicyProviderTestHarness> {
+ public:
+ ConfigurationPolicyProviderTest(const ConfigurationPolicyProviderTest&) =
+ delete;
+ ConfigurationPolicyProviderTest& operator=(
+ const ConfigurationPolicyProviderTest&) = delete;
+
+ protected:
+ ConfigurationPolicyProviderTest();
+ ~ConfigurationPolicyProviderTest() override;
+
+ void SetUp() override;
+ void TearDown() override;
+
+ // Installs a valid policy and checks whether the provider returns the
+ // |expected_value|.
+ void CheckValue(const char* policy_name,
+ const base::Value& expected_value,
+ base::OnceClosure install_value);
+
+ std::unique_ptr<PolicyProviderTestHarness> test_harness_;
+ std::unique_ptr<ConfigurationPolicyProvider> provider_;
+};
+
+// An extension of ConfigurationPolicyProviderTest that also tests loading of
+// 3rd party policy. Policy provider implementations that support loading of
+// 3rd party policy should also instantiate these tests.
+class Configuration3rdPartyPolicyProviderTest
+ : public ConfigurationPolicyProviderTest {
+ public:
+ Configuration3rdPartyPolicyProviderTest(
+ const Configuration3rdPartyPolicyProviderTest&) = delete;
+ Configuration3rdPartyPolicyProviderTest& operator=(
+ const Configuration3rdPartyPolicyProviderTest&) = delete;
+
+ protected:
+ Configuration3rdPartyPolicyProviderTest();
+ virtual ~Configuration3rdPartyPolicyProviderTest();
+};
+
+} // namespace policy
+
+#endif // COMPONENTS_POLICY_CORE_COMMON_CONFIGURATION_POLICY_PROVIDER_TEST_H_