Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: chrome/browser/configuration_policy_provider_win_unittest.cc

Issue 2119005: [Win] Implement core mechanism to honor Windows Group Policy (Closed)
Patch Set: merge with latest Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <gtest/gtest.h>
6
7 #include <windows.h>
8
9 #include "base/logging.h"
10 #include "base/registry.h"
11 #include "base/scoped_ptr.h"
12 #include "chrome/browser/configuration_policy_provider_win.h"
13 #include "chrome/browser/mock_configuration_policy_store.h"
14 #include "chrome/common/pref_names.h"
15
16 namespace {
17 const wchar_t kUnitTestRegistrySubKey[] = L"SOFTWARE\\Chromium Unit Tests";
18 const wchar_t kUnitTestMachineOverrideSubKey[] =
19 L"SOFTWARE\\Chromium Unit Tests\\HKLM Override";
20 const wchar_t kUnitTestUserOverrideSubKey[] =
21 L"SOFTWARE\\Chromium Unit Tests\\HKCU Override";
22 }
23
24 // A subclass of |WinConfigurationPolicyProvider| providing access to
25 // internal protected constants without an orgy of FRIEND_TESTS.
26 class TestWinConfigurationPolicyProvider
27 : public WinConfigurationPolicyProvider {
28 public:
29 TestWinConfigurationPolicyProvider() : WinConfigurationPolicyProvider() { }
30 virtual ~TestWinConfigurationPolicyProvider() { }
31
32 void SetHomepageRegistryValue(HKEY hive, const wchar_t* value);
33 void SetHomepageRegistryValueWrongType(HKEY hive);
34 void SetHomepageIsNewTabPage(HKEY hive, bool value);
35 void SetCookiesMode(HKEY hive, uint32 value);
36 };
37
38 void TestWinConfigurationPolicyProvider::SetHomepageRegistryValue(
39 HKEY hive,
40 const wchar_t* value) {
41 RegKey key(hive,
42 WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
43 KEY_ALL_ACCESS);
44 EXPECT_TRUE(key.WriteValue(
45 WinConfigurationPolicyProvider::kHomepageRegistryValueName,
46 value));
47 }
48
49 void TestWinConfigurationPolicyProvider::SetHomepageRegistryValueWrongType(
50 HKEY hive) {
51 RegKey key(hive,
52 WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
53 KEY_ALL_ACCESS);
54 EXPECT_TRUE(key.WriteValue(
55 WinConfigurationPolicyProvider::kHomepageRegistryValueName,
56 5));
57 }
58
59 void TestWinConfigurationPolicyProvider::SetHomepageIsNewTabPage(
60 HKEY hive,
61 bool value) {
62 RegKey key(hive,
63 WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
64 KEY_ALL_ACCESS);
65 EXPECT_TRUE(key.WriteValue(
66 WinConfigurationPolicyProvider::kHomepageIsNewTabPageRegistryValueName,
67 value));
68 }
69
70 void TestWinConfigurationPolicyProvider::SetCookiesMode(
71 HKEY hive,
72 uint32 value) {
73 RegKey key(hive,
74 WinConfigurationPolicyProvider::kPolicyRegistrySubKey,
75 KEY_ALL_ACCESS);
76 EXPECT_TRUE(key.WriteValue(
77 WinConfigurationPolicyProvider::kCookiesModeRegistryValueName,
78 value));
79 }
80
81 // This test class provides sandboxing and mocking for the parts of the
82 // Windows Registry implementing Group Policy. The |SetUp| method prepares
83 // two temporary sandbox keys in |kUnitTestRegistrySubKey|, one for HKLM and one
84 // for HKCU. A test's calls to the registry are redirected by Windows to these
85 // sandboxes, allowing the tests to manipulate and access policy as if it
86 // were active, but without actually changing the parts of the Registry that
87 // are managed by Group Policy.
88 class WinConfigurationPolicyProviderTest : public testing::Test {
89 public:
90 WinConfigurationPolicyProviderTest();
91
92 // testing::Test method overrides:
93 virtual void SetUp();
94 virtual void TearDown();
95
96 void ActivateOverrides();
97 void DeactivateOverrides();
98
99 // Deletes the registry key created during the tests.
100 void DeleteRegistrySandbox();
101
102 private:
103 // Keys are created for the lifetime of a test to contain
104 // the sandboxed HKCU and HKLM hives, respectively.
105 RegKey temp_hkcu_hive_key_;
106 RegKey temp_hklm_hive_key_;
107 };
108
109 WinConfigurationPolicyProviderTest::WinConfigurationPolicyProviderTest()
110 : temp_hklm_hive_key_(HKEY_CURRENT_USER, kUnitTestMachineOverrideSubKey),
111 temp_hkcu_hive_key_(HKEY_CURRENT_USER, kUnitTestUserOverrideSubKey) {
112 }
113
114 void WinConfigurationPolicyProviderTest::SetUp() {
115 // Cleanup any remnants of previous tests.
116 DeleteRegistrySandbox();
117
118 // Create the subkeys to hold the overridden HKLM and HKCU
119 // policy settings.
120 temp_hklm_hive_key_.Create(HKEY_CURRENT_USER,
121 kUnitTestMachineOverrideSubKey,
122 KEY_ALL_ACCESS);
123 temp_hkcu_hive_key_.Create(HKEY_CURRENT_USER,
124 kUnitTestUserOverrideSubKey,
125 KEY_ALL_ACCESS);
126
127 ActivateOverrides();
128 }
129
130 void WinConfigurationPolicyProviderTest::ActivateOverrides() {
131 HRESULT result = RegOverridePredefKey(HKEY_LOCAL_MACHINE,
132 temp_hklm_hive_key_.Handle());
133 EXPECT_EQ(ERROR_SUCCESS, result);
134 result = RegOverridePredefKey(HKEY_CURRENT_USER,
135 temp_hkcu_hive_key_.Handle());
136 EXPECT_EQ(ERROR_SUCCESS, result);
137 }
138
139 void WinConfigurationPolicyProviderTest::DeactivateOverrides() {
140 uint32 result = RegOverridePredefKey(HKEY_LOCAL_MACHINE, 0);
141 EXPECT_EQ(ERROR_SUCCESS, result);
142 result = RegOverridePredefKey(HKEY_CURRENT_USER, 0);
143 EXPECT_EQ(ERROR_SUCCESS, result);
144 }
145
146 void WinConfigurationPolicyProviderTest::TearDown() {
147 DeactivateOverrides();
148 DeleteRegistrySandbox();
149 }
150
151 void WinConfigurationPolicyProviderTest::DeleteRegistrySandbox() {
152 temp_hklm_hive_key_.Close();
153 temp_hkcu_hive_key_.Close();
154 RegKey key(HKEY_CURRENT_USER, kUnitTestRegistrySubKey, KEY_ALL_ACCESS);
155 key.DeleteKey(L"");
156 }
157 TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyDefault) {
158 MockConfigurationPolicyStore store;
159 TestWinConfigurationPolicyProvider provider;
160
161 provider.Provide(&store);
162
163 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
164 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
165 map.find(ConfigurationPolicyStore::kPolicyHomePage);
166 EXPECT_TRUE(i == map.end());
167 }
168
169 TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKCU) {
170 MockConfigurationPolicyStore store;
171 TestWinConfigurationPolicyProvider provider;
172 provider.SetHomepageRegistryValue(HKEY_CURRENT_USER,
173 L"http://chromium.org");
174
175 provider.Provide(&store);
176
177 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
178 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
179 map.find(ConfigurationPolicyStore::kPolicyHomePage);
180 EXPECT_TRUE(i != map.end());
181 string16 value;
182 i->second->GetAsString(&value);
183 EXPECT_EQ(L"http://chromium.org", value);
184 }
185
186 TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKCUWrongType) {
187 MockConfigurationPolicyStore store;
188 TestWinConfigurationPolicyProvider provider;
189 provider.SetHomepageRegistryValueWrongType(HKEY_CURRENT_USER);
190
191 provider.Provide(&store);
192
193 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
194 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
195 map.find(ConfigurationPolicyStore::kPolicyHomePage);
196 EXPECT_TRUE(i == map.end());
197 }
198
199 TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKLM) {
200 MockConfigurationPolicyStore store;
201 TestWinConfigurationPolicyProvider provider;
202 provider.SetHomepageRegistryValue(HKEY_LOCAL_MACHINE,
203 L"http://chromium.org");
204
205 provider.Provide(&store);
206
207 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
208 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
209 map.find(ConfigurationPolicyStore::kPolicyHomePage);
210 EXPECT_TRUE(i != map.end());
211 string16 value;
212 i->second->GetAsString(&value);
213 EXPECT_EQ(L"http://chromium.org", value);
214 }
215
216 TEST_F(WinConfigurationPolicyProviderTest, TestHomePagePolicyHKLMOverHKCU) {
217 MockConfigurationPolicyStore store;
218 TestWinConfigurationPolicyProvider provider;
219 provider.SetHomepageRegistryValue(HKEY_CURRENT_USER,
220 L"http://chromium.org");
221 provider.SetHomepageRegistryValue(HKEY_LOCAL_MACHINE,
222 L"http://crbug.com");
223
224 provider.Provide(&store);
225
226 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
227 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
228 map.find(ConfigurationPolicyStore::kPolicyHomePage);
229 EXPECT_TRUE(i != map.end());
230 string16 value;
231 i->second->GetAsString(&value);
232 EXPECT_EQ(L"http://crbug.com", value);
233 }
234
235 TEST_F(WinConfigurationPolicyProviderTest,
236 TestHomepageIsNewTabPagePolicyDefault) {
237 MockConfigurationPolicyStore store;
238 TestWinConfigurationPolicyProvider provider;
239
240 provider.Provide(&store);
241
242 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
243 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
244 map.find(ConfigurationPolicyStore::kPolicyHomepageIsNewTabPage);
245 EXPECT_TRUE(i == map.end());
246 }
247
248 TEST_F(WinConfigurationPolicyProviderTest,
249 TestHomepageIsNewTabPagePolicyHKLM) {
250 MockConfigurationPolicyStore store;
251 TestWinConfigurationPolicyProvider provider;
252 provider.SetHomepageIsNewTabPage(HKEY_LOCAL_MACHINE, true);
253
254 provider.Provide(&store);
255
256 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
257 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
258 map.find(ConfigurationPolicyStore::kPolicyHomepageIsNewTabPage);
259 EXPECT_TRUE(i != map.end());
260 bool value = false;
261 i->second->GetAsBoolean(&value);
262 EXPECT_EQ(true, value);
263 }
264
265 TEST_F(WinConfigurationPolicyProviderTest,
266 TestCookiesModePolicyDefault) {
267 MockConfigurationPolicyStore store;
268 TestWinConfigurationPolicyProvider provider;
269
270 provider.Provide(&store);
271
272 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
273 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
274 map.find(ConfigurationPolicyStore::kPolicyCookiesMode);
275 EXPECT_TRUE(i == map.end());
276 }
277
278 TEST_F(WinConfigurationPolicyProviderTest,
279 TestCookiesModePolicyHKLM) {
280 MockConfigurationPolicyStore store;
281 TestWinConfigurationPolicyProvider provider;
282 provider.SetCookiesMode(HKEY_LOCAL_MACHINE, 2);
283
284 provider.Provide(&store);
285
286 const MockConfigurationPolicyStore::PolicyMap& map(store.policy_map());
287 MockConfigurationPolicyStore::PolicyMap::const_iterator i =
288 map.find(ConfigurationPolicyStore::kPolicyCookiesMode);
289 EXPECT_TRUE(i != map.end());
290 int value = 0;
291 i->second->GetAsInteger(&value);
292 EXPECT_EQ(2, value);
293 }
294
OLDNEW
« no previous file with comments | « chrome/browser/configuration_policy_provider_win.cc ('k') | chrome/browser/configuration_policy_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698