diff options
Diffstat (limited to 'chromium/components/policy/core/browser/configuration_policy_pref_store_unittest.cc')
-rw-r--r-- | chromium/components/policy/core/browser/configuration_policy_pref_store_unittest.cc | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/chromium/components/policy/core/browser/configuration_policy_pref_store_unittest.cc b/chromium/components/policy/core/browser/configuration_policy_pref_store_unittest.cc new file mode 100644 index 00000000000..abecdca8534 --- /dev/null +++ b/chromium/components/policy/core/browser/configuration_policy_pref_store_unittest.cc @@ -0,0 +1,209 @@ +// Copyright 2014 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. + +#include "components/policy/core/browser/configuration_policy_pref_store.h" + +#include <memory> +#include <string> +#include <utility> + +#include "base/callback.h" +#include "base/files/file_path.h" +#include "base/memory/ptr_util.h" +#include "base/run_loop.h" +#include "components/policy/core/browser/configuration_policy_handler.h" +#include "components/policy/core/browser/configuration_policy_pref_store_test.h" +#include "components/policy/core/common/external_data_fetcher.h" +#include "components/policy/core/common/policy_details.h" +#include "components/policy/core/common/policy_map.h" +#include "components/policy/core/common/policy_pref_names.h" +#include "components/policy/core/common/policy_service_impl.h" +#include "components/policy/core/common/policy_types.h" +#include "components/prefs/pref_store_observer_mock.h" +#include "testing/gmock/include/gmock/gmock.h" + +// Note: this file should move to components/policy/core/browser, but the +// components_unittests runner does not load the ResourceBundle as +// ChromeTestSuite::Initialize does, which leads to failures using +// PolicyErrorMap. + +using testing::Mock; +using testing::Return; +using testing::_; + +namespace { + +const char kTestPolicy[] = "test.policy"; +const char kTestPref[] = "test.pref"; + +} // namespace + +namespace policy { + +// Test cases for list-valued policy settings. +class ConfigurationPolicyPrefStoreListTest + : public ConfigurationPolicyPrefStoreTest { + void SetUp() override { + handler_list_.AddHandler( + base::WrapUnique<ConfigurationPolicyHandler>(new SimplePolicyHandler( + kTestPolicy, kTestPref, base::Value::Type::LIST))); + } +}; + +TEST_F(ConfigurationPolicyPrefStoreListTest, GetDefault) { + EXPECT_FALSE(store_->GetValue(kTestPref, nullptr)); +} + +TEST_F(ConfigurationPolicyPrefStoreListTest, SetValue) { + base::Value in_value(base::Value::Type::LIST); + in_value.Append("test1"); + in_value.Append("test2,"); + PolicyMap policy; + policy.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, + POLICY_SOURCE_CLOUD, in_value.Clone(), nullptr); + UpdateProviderPolicy(policy); + const base::Value* value = nullptr; + EXPECT_TRUE(store_->GetValue(kTestPref, &value)); + ASSERT_TRUE(value); + EXPECT_EQ(in_value, *value); +} + +// Test cases for string-valued policy settings. +class ConfigurationPolicyPrefStoreStringTest + : public ConfigurationPolicyPrefStoreTest { + void SetUp() override { + handler_list_.AddHandler( + base::WrapUnique<ConfigurationPolicyHandler>(new SimplePolicyHandler( + kTestPolicy, kTestPref, base::Value::Type::STRING))); + } +}; + +TEST_F(ConfigurationPolicyPrefStoreStringTest, GetDefault) { + EXPECT_FALSE(store_->GetValue(kTestPref, nullptr)); +} + +TEST_F(ConfigurationPolicyPrefStoreStringTest, SetValue) { + PolicyMap policy; + policy.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, + POLICY_SOURCE_CLOUD, base::Value("http://chromium.org"), nullptr); + UpdateProviderPolicy(policy); + const base::Value* value = nullptr; + EXPECT_TRUE(store_->GetValue(kTestPref, &value)); + ASSERT_TRUE(value); + EXPECT_EQ(base::Value("http://chromium.org"), *value); +} + +// Test cases for boolean-valued policy settings. +class ConfigurationPolicyPrefStoreBooleanTest + : public ConfigurationPolicyPrefStoreTest { + void SetUp() override { + handler_list_.AddHandler( + base::WrapUnique<ConfigurationPolicyHandler>(new SimplePolicyHandler( + kTestPolicy, kTestPref, base::Value::Type::BOOLEAN))); + } +}; + +TEST_F(ConfigurationPolicyPrefStoreBooleanTest, GetDefault) { + EXPECT_FALSE(store_->GetValue(kTestPref, nullptr)); +} + +TEST_F(ConfigurationPolicyPrefStoreBooleanTest, SetValue) { + PolicyMap policy; + policy.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, + POLICY_SOURCE_CLOUD, base::Value(false), nullptr); + UpdateProviderPolicy(policy); + const base::Value* value = nullptr; + EXPECT_TRUE(store_->GetValue(kTestPref, &value)); + ASSERT_TRUE(value); + ASSERT_TRUE(value->is_bool()); + EXPECT_FALSE(value->GetBool()); + + policy.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, + POLICY_SOURCE_CLOUD, base::Value(true), nullptr); + UpdateProviderPolicy(policy); + value = nullptr; + EXPECT_TRUE(store_->GetValue(kTestPref, &value)); + ASSERT_TRUE(value->is_bool()); + EXPECT_TRUE(value->GetBool()); +} + +// Test cases for integer-valued policy settings. +class ConfigurationPolicyPrefStoreIntegerTest + : public ConfigurationPolicyPrefStoreTest { + void SetUp() override { + handler_list_.AddHandler( + base::WrapUnique<ConfigurationPolicyHandler>(new SimplePolicyHandler( + kTestPolicy, kTestPref, base::Value::Type::INTEGER))); + } +}; + +TEST_F(ConfigurationPolicyPrefStoreIntegerTest, GetDefault) { + EXPECT_FALSE(store_->GetValue(kTestPref, nullptr)); +} + +TEST_F(ConfigurationPolicyPrefStoreIntegerTest, SetValue) { + PolicyMap policy; + policy.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, + POLICY_SOURCE_CLOUD, base::Value(2), nullptr); + UpdateProviderPolicy(policy); + const base::Value* value = nullptr; + EXPECT_TRUE(store_->GetValue(kTestPref, &value)); + EXPECT_EQ(base::Value(2), *value); +} + +// Exercises the policy refresh mechanism. +class ConfigurationPolicyPrefStoreRefreshTest + : public ConfigurationPolicyPrefStoreTest { + protected: + void SetUp() override { + ConfigurationPolicyPrefStoreTest::SetUp(); + store_->AddObserver(&observer_); + handler_list_.AddHandler( + base::WrapUnique<ConfigurationPolicyHandler>(new SimplePolicyHandler( + kTestPolicy, kTestPref, base::Value::Type::STRING))); + } + + void TearDown() override { + store_->RemoveObserver(&observer_); + ConfigurationPolicyPrefStoreTest::TearDown(); + } + + PrefStoreObserverMock observer_; +}; + +TEST_F(ConfigurationPolicyPrefStoreRefreshTest, Refresh) { + const base::Value* value = nullptr; + EXPECT_FALSE(store_->GetValue(kTestPolicy, nullptr)); + + PolicyMap policy; + policy.Set(kTestPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, + POLICY_SOURCE_CLOUD, base::Value("http://www.chromium.org"), + nullptr); + UpdateProviderPolicy(policy); + observer_.VerifyAndResetChangedKey(kTestPref); + EXPECT_TRUE(store_->GetValue(kTestPref, &value)); + EXPECT_EQ(base::Value("http://www.chromium.org"), *value); + + UpdateProviderPolicy(policy); + EXPECT_TRUE(observer_.changed_keys.empty()); + + policy.Erase(kTestPolicy); + UpdateProviderPolicy(policy); + observer_.VerifyAndResetChangedKey(kTestPref); + EXPECT_FALSE(store_->GetValue(kTestPref, nullptr)); +} + +TEST_F(ConfigurationPolicyPrefStoreRefreshTest, Initialization) { + EXPECT_FALSE(store_->IsInitializationComplete()); + EXPECT_CALL(provider_, IsInitializationComplete(POLICY_DOMAIN_CHROME)) + .WillRepeatedly(Return(true)); + PolicyMap policy; + UpdateProviderPolicy(policy); + EXPECT_TRUE(observer_.initialized); + EXPECT_TRUE(observer_.initialization_success); + Mock::VerifyAndClearExpectations(&observer_); + EXPECT_TRUE(store_->IsInitializationComplete()); +} + +} // namespace policy |