summaryrefslogtreecommitdiffstats
path: root/chrome/browser/configuration_policy_provider_win_unittest.cc
diff options
context:
space:
mode:
authordanno@chromium.org <danno@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-21 11:04:50 +0000
committerdanno@chromium.org <danno@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-21 11:04:50 +0000
commit633877bd6ded864ddc9d89487a7e34c1fcf0b17f (patch)
tree94bef71e7670430e2498926ebe02ef31989d4f6a /chrome/browser/configuration_policy_provider_win_unittest.cc
parent5eac6029cdecb6e15a014f8185f0bac5e118418f (diff)
downloadchromium_src-633877bd6ded864ddc9d89487a7e34c1fcf0b17f.zip
chromium_src-633877bd6ded864ddc9d89487a7e34c1fcf0b17f.tar.gz
chromium_src-633877bd6ded864ddc9d89487a7e34c1fcf0b17f.tar.bz2
[Win] Implement core mechanism to honor Windows Group Policy
BUG=42640 TEST=--gtest_filter=WinConfigurationPolicyProviderTest* Review URL: http://codereview.chromium.org/2119005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47910 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/configuration_policy_provider_win_unittest.cc')
-rwxr-xr-xchrome/browser/configuration_policy_provider_win_unittest.cc294
1 files changed, 294 insertions, 0 deletions
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 0000000..7302b96
--- /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);
+}
+