| Index: chrome/browser/configuration_policy_provider_win_unittest.cc
|
| diff --git a/chrome/browser/configuration_policy_provider_win_unittest.cc b/chrome/browser/configuration_policy_provider_win_unittest.cc
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..7302b9626eeb6f10b807a4b863512ec12a2e7f76
|
| --- /dev/null
|
| +++ b/chrome/browser/configuration_policy_provider_win_unittest.cc
|
| @@ -0,0 +1,294 @@
|
| +// Copyright (c) 2010 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 <gtest/gtest.h>
|
| +
|
| +#include <windows.h>
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/registry.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "chrome/browser/configuration_policy_provider_win.h"
|
| +#include "chrome/browser/mock_configuration_policy_store.h"
|
| +#include "chrome/common/pref_names.h"
|
| +
|
| +namespace {
|
| +const wchar_t kUnitTestRegistrySubKey[] = L"SOFTWARE\\Chromium Unit Tests";
|
| +const wchar_t kUnitTestMachineOverrideSubKey[] =
|
| + L"SOFTWARE\\Chromium Unit Tests\\HKLM Override";
|
| +const wchar_t kUnitTestUserOverrideSubKey[] =
|
| + L"SOFTWARE\\Chromium Unit Tests\\HKCU Override";
|
| +}
|
| +
|
| +// A subclass of |WinConfigurationPolicyProvider| providing access to
|
| +// internal protected constants without an orgy of FRIEND_TESTS.
|
| +class TestWinConfigurationPolicyProvider
|
| + : public WinConfigurationPolicyProvider {
|
| + public:
|
| + TestWinConfigurationPolicyProvider() : WinConfigurationPolicyProvider() { }
|
| + virtual ~TestWinConfigurationPolicyProvider() { }
|
| +
|
| + void SetHomepageRegistryValue(HKEY hive, const wchar_t* value);
|
| + void SetHomepageRegistryValueWrongType(HKEY hive);
|
| + void SetHomepageIsNewTabPage(HKEY hive, bool value);
|
| + void SetCookiesMode(HKEY hive, uint32 value);
|
| +};
|
| +
|
| +void TestWinConfigurationPolicyProvider::SetHomepageRegistryValue(
|
| + HKEY hive,
|
| + const wchar_t* value) {
|
| + RegKey key(hive,
|
| + WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
|
| + KEY_ALL_ACCESS);
|
| + EXPECT_TRUE(key.WriteValue(
|
| + WinConfigurationPolicyProvider::kHomepageRegistryValueName,
|
| + value));
|
| +}
|
| +
|
| +void TestWinConfigurationPolicyProvider::SetHomepageRegistryValueWrongType(
|
| + HKEY hive) {
|
| + RegKey key(hive,
|
| + WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
|
| + KEY_ALL_ACCESS);
|
| + EXPECT_TRUE(key.WriteValue(
|
| + WinConfigurationPolicyProvider::kHomepageRegistryValueName,
|
| + 5));
|
| +}
|
| +
|
| +void TestWinConfigurationPolicyProvider::SetHomepageIsNewTabPage(
|
| + HKEY hive,
|
| + bool value) {
|
| + RegKey key(hive,
|
| + WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
|
| + KEY_ALL_ACCESS);
|
| + EXPECT_TRUE(key.WriteValue(
|
| + WinConfigurationPolicyProvider::kHomepageIsNewTabPageRegistryValueName,
|
| + value));
|
| +}
|
| +
|
| +void TestWinConfigurationPolicyProvider::SetCookiesMode(
|
| + HKEY hive,
|
| + uint32 value) {
|
| + RegKey key(hive,
|
| + WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
|
| + KEY_ALL_ACCESS);
|
| + EXPECT_TRUE(key.WriteValue(
|
| + WinConfigurationPolicyProvider::kCookiesModeRegistryValueName,
|
| + value));
|
| +}
|
| +
|
| +// This test class provides sandboxing and mocking for the parts of the
|
| +// Windows Registry implementing Group Policy. The |SetUp| method prepares
|
| +// two temporary sandbox keys in |kUnitTestRegistrySubKey|, one for HKLM and one
|
| +// for HKCU. A test's calls to the registry are redirected by Windows to these
|
| +// sandboxes, allowing the tests to manipulate and access policy as if it
|
| +// were active, but without actually changing the parts of the Registry that
|
| +// are managed by Group Policy.
|
| +class WinConfigurationPolicyProviderTest : public testing::Test {
|
| + public:
|
| + WinConfigurationPolicyProviderTest();
|
| +
|
| + // testing::Test method overrides:
|
| + virtual void SetUp();
|
| + virtual void TearDown();
|
| +
|
| + void ActivateOverrides();
|
| + void DeactivateOverrides();
|
| +
|
| + // Deletes the registry key created during the tests.
|
| + void DeleteRegistrySandbox();
|
| +
|
| + private:
|
| + // Keys are created for the lifetime of a test to contain
|
| + // the sandboxed HKCU and HKLM hives, respectively.
|
| + RegKey temp_hkcu_hive_key_;
|
| + RegKey temp_hklm_hive_key_;
|
| +};
|
| +
|
| +WinConfigurationPolicyProviderTest::WinConfigurationPolicyProviderTest()
|
| + : temp_hklm_hive_key_(HKEY_CURRENT_USER, kUnitTestMachineOverrideSubKey),
|
| + temp_hkcu_hive_key_(HKEY_CURRENT_USER, kUnitTestUserOverrideSubKey) {
|
| +}
|
| +
|
| +void WinConfigurationPolicyProviderTest::SetUp() {
|
| + // Cleanup any remnants of previous tests.
|
| + DeleteRegistrySandbox();
|
| +
|
| + // Create the subkeys to hold the overridden HKLM and HKCU
|
| + // policy settings.
|
| + temp_hklm_hive_key_.Create(HKEY_CURRENT_USER,
|
| + kUnitTestMachineOverrideSubKey,
|
| + KEY_ALL_ACCESS);
|
| + temp_hkcu_hive_key_.Create(HKEY_CURRENT_USER,
|
| + kUnitTestUserOverrideSubKey,
|
| + KEY_ALL_ACCESS);
|
| +
|
| + ActivateOverrides();
|
| +}
|
| +
|
| +void WinConfigurationPolicyProviderTest::ActivateOverrides() {
|
| + HRESULT result = RegOverridePredefKey(HKEY_LOCAL_MACHINE,
|
| + temp_hklm_hive_key_.Handle());
|
| + EXPECT_EQ(ERROR_SUCCESS, result);
|
| + result = RegOverridePredefKey(HKEY_CURRENT_USER,
|
| + temp_hkcu_hive_key_.Handle());
|
| + EXPECT_EQ(ERROR_SUCCESS, result);
|
| +}
|
| +
|
| +void WinConfigurationPolicyProviderTest::DeactivateOverrides() {
|
| + uint32 result = RegOverridePredefKey(HKEY_LOCAL_MACHINE, 0);
|
| + EXPECT_EQ(ERROR_SUCCESS, result);
|
| + result = RegOverridePredefKey(HKEY_CURRENT_USER, 0);
|
| + EXPECT_EQ(ERROR_SUCCESS, result);
|
| +}
|
| +
|
| +void WinConfigurationPolicyProviderTest::TearDown() {
|
| + DeactivateOverrides();
|
| + DeleteRegistrySandbox();
|
| +}
|
| +
|
| +void WinConfigurationPolicyProviderTest::DeleteRegistrySandbox() {
|
| + temp_hklm_hive_key_.Close();
|
| + temp_hkcu_hive_key_.Close();
|
| + RegKey key(HKEY_CURRENT_USER, kUnitTestRegistrySubKey, KEY_ALL_ACCESS);
|
| + key.DeleteKey(L"");
|
| +}
|
| +TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyDefault) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyHomePage);
|
| + EXPECT_TRUE(i == map.end());
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKCU) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| + provider.SetHomepageRegistryValue(HKEY_CURRENT_USER,
|
| + L"http://chromium.org");
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyHomePage);
|
| + EXPECT_TRUE(i != map.end());
|
| + string16 value;
|
| + i->second->GetAsString(&value);
|
| + EXPECT_EQ(L"http://chromium.org", value);
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKCUWrongType) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| + provider.SetHomepageRegistryValueWrongType(HKEY_CURRENT_USER);
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyHomePage);
|
| + EXPECT_TRUE(i == map.end());
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKLM) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| + provider.SetHomepageRegistryValue(HKEY_LOCAL_MACHINE,
|
| + L"http://chromium.org");
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyHomePage);
|
| + EXPECT_TRUE(i != map.end());
|
| + string16 value;
|
| + i->second->GetAsString(&value);
|
| + EXPECT_EQ(L"http://chromium.org", value);
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKLMOverHKCU) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| + provider.SetHomepageRegistryValue(HKEY_CURRENT_USER,
|
| + L"http://chromium.org");
|
| + provider.SetHomepageRegistryValue(HKEY_LOCAL_MACHINE,
|
| + L"http://crbug.com");
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyHomePage);
|
| + EXPECT_TRUE(i != map.end());
|
| + string16 value;
|
| + i->second->GetAsString(&value);
|
| + EXPECT_EQ(L"http://crbug.com", value);
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest,
|
| + TestHomepageIsNewTabPagePolicyDefault) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyHomepageIsNewTabPage);
|
| + EXPECT_TRUE(i == map.end());
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest,
|
| + TestHomepageIsNewTabPagePolicyHKLM) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| + provider.SetHomepageIsNewTabPage(HKEY_LOCAL_MACHINE, true);
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyHomepageIsNewTabPage);
|
| + EXPECT_TRUE(i != map.end());
|
| + bool value = false;
|
| + i->second->GetAsBoolean(&value);
|
| + EXPECT_EQ(true, value);
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest,
|
| + TestCookiesModePolicyDefault) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyCookiesMode);
|
| + EXPECT_TRUE(i == map.end());
|
| +}
|
| +
|
| +TEST_F(WinConfigurationPolicyProviderTest,
|
| + TestCookiesModePolicyHKLM) {
|
| + MockConfigurationPolicyStore store;
|
| + TestWinConfigurationPolicyProvider provider;
|
| + provider.SetCookiesMode(HKEY_LOCAL_MACHINE, 2);
|
| +
|
| + provider.Provide(&store);
|
| +
|
| + const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
|
| + MockConfigurationPolicyStore::PolicyMap::const_iterator i =
|
| + map.find(ConfigurationPolicyStore::kPolicyCookiesMode);
|
| + EXPECT_TRUE(i != map.end());
|
| + int value = 0;
|
| + i->second->GetAsInteger(&value);
|
| + EXPECT_EQ(2, value);
|
| +}
|
| +
|
|
|