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

Side by Side Diff: chrome/browser/policy/configuration_policy_reader_unittest.cc

Issue 7585036: First CL for the about:policy page. This only implements the policy section of the page. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created MockConfigurationPolicyReader and fixed other nits. Created 9 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "base/scoped_ptr.h"
6 #include "base/string16.h"
7 #include "base/utf_string_conversions.h"
8 #include "chrome/browser/policy/configuration_policy_pref_store.h"
9 #include "chrome/browser/policy/configuration_policy_reader.h"
10 #include "chrome/browser/policy/mock_configuration_policy_provider.h"
11 #include "chrome/browser/policy/mock_configuration_policy_reader.h"
12 #include "policy/policy_constants.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace policy {
16
17 class ConfigurationPolicyReaderTest : public testing::Test {
18 protected:
19 ConfigurationPolicyReaderTest() : provider_() {
20 managed_reader_.reset(new ConfigurationPolicyReader(&provider_,
21 PolicyStatusInfo::MANDATORY));
Mattias Nissler (ping if slow) 2011/08/29 11:24:40 indentation
22 recommended_reader_.reset(new ConfigurationPolicyReader(&provider_,
23 PolicyStatusInfo::RECOMMENDED));
Mattias Nissler (ping if slow) 2011/08/29 11:24:40 indentation
24 status_ok_ = ASCIIToUTF16("ok");
25 }
26
27 DictionaryValue* CreateDictionary(const char* policy_name,
28 Value* policy_value) {
29 DictionaryValue* dict = new DictionaryValue();
30 dict->SetString(
31 PolicyStatusInfo::name_dict_path, ASCIIToUTF16(policy_name));
32 dict->SetString(PolicyStatusInfo::level_dict_path,
33 PolicyStatusInfo::GetPolicyLevelString(PolicyStatusInfo::MANDATORY));
34 dict->SetString(PolicyStatusInfo::source_type_dict_path,
35 PolicyStatusInfo::GetSourceTypeString(PolicyStatusInfo::USER));
36 dict->Set(PolicyStatusInfo::value_dict_path, policy_value);
37 dict->SetBoolean(PolicyStatusInfo::set_dict_path, true);
38 dict->SetString(PolicyStatusInfo::status_dict_path, status_ok_);
39
40 return dict;
41 }
42
43 MockConfigurationPolicyProvider provider_;
44 scoped_ptr<ConfigurationPolicyReader> managed_reader_;
45 scoped_ptr<ConfigurationPolicyReader> recommended_reader_;
46 string16 status_ok_;
47 };
48
49 TEST_F(ConfigurationPolicyReaderTest, GetDefault) {
50 EXPECT_EQ(NULL, managed_reader_->GetPolicyStatus(kPolicyHomepageLocation));
51 }
52
53 // Test for list-valued policy settings.
54 TEST_F(ConfigurationPolicyReaderTest, SetListValue) {
55 ListValue* in_value = new ListValue();
56 in_value->Append(Value::CreateStringValue("test1"));
57 in_value->Append(Value::CreateStringValue("test2"));
58 provider_.AddPolicy(kPolicyRestoreOnStartupURLs, in_value);
59 managed_reader_->OnUpdatePolicy();
60
61 scoped_ptr<DictionaryValue>
62 dict(CreateDictionary(key::kRestoreOnStartupURLs, in_value->DeepCopy()));
63 EXPECT_TRUE(
64 dict->Equals(managed_reader_->
65 GetPolicyStatus(kPolicyRestoreOnStartupURLs)));
Mattias Nissler (ping if slow) 2011/08/29 11:24:40 another 4 spaces indentation (or break after the o
66
67 recommended_reader_->OnUpdatePolicy();
68 dict->SetString("level",
69 PolicyStatusInfo::GetPolicyLevelString(PolicyStatusInfo::RECOMMENDED));
70 EXPECT_TRUE(dict->Equals(
71 recommended_reader_->GetPolicyStatus(kPolicyRestoreOnStartupURLs)));
72 }
73
74 // Test for string-valued policy settings.
75 TEST_F(ConfigurationPolicyReaderTest, SetStringValue) {
76 provider_.AddPolicy(kPolicyHomepageLocation,
77 Value::CreateStringValue("http://chromium.org"));
78 managed_reader_->OnUpdatePolicy();
79 scoped_ptr<DictionaryValue> dict(CreateDictionary(key::kHomepageLocation,
80 Value::CreateStringValue("http://chromium.org")));
81 EXPECT_TRUE(
82 dict->Equals(managed_reader_->GetPolicyStatus(kPolicyHomepageLocation)));
83
84 recommended_reader_->OnUpdatePolicy();
85 dict->SetString("level",
86 PolicyStatusInfo::GetPolicyLevelString(PolicyStatusInfo::RECOMMENDED));
87 EXPECT_TRUE(dict->Equals(
88 recommended_reader_->GetPolicyStatus(kPolicyHomepageLocation)));
89 }
90
91 // Test for boolean-valued policy settings.
92 TEST_F(ConfigurationPolicyReaderTest, SetBooleanValue) {
93 provider_.AddPolicy(kPolicyShowHomeButton, Value::CreateBooleanValue(true));
94 managed_reader_->OnUpdatePolicy();
95 scoped_ptr<DictionaryValue> dict(CreateDictionary(key::kShowHomeButton,
96 Value::CreateBooleanValue(true)));
97 EXPECT_TRUE(dict->Equals(
98 managed_reader_->GetPolicyStatus(kPolicyShowHomeButton)));
99
100 recommended_reader_->OnUpdatePolicy();
101 dict->SetString("level",
102 PolicyStatusInfo::GetPolicyLevelString(PolicyStatusInfo::RECOMMENDED));
103 EXPECT_TRUE(dict->Equals(
104 recommended_reader_->GetPolicyStatus(kPolicyShowHomeButton)));
105
106 provider_.AddPolicy(kPolicyShowHomeButton, Value::CreateBooleanValue(false));
107 managed_reader_->OnUpdatePolicy();
108 dict->Set(
109 PolicyStatusInfo::value_dict_path, Value::CreateBooleanValue(false));
110 dict->SetString("level",
111 PolicyStatusInfo::GetPolicyLevelString(PolicyStatusInfo::MANDATORY));
112 EXPECT_TRUE(
113 dict->Equals(managed_reader_->GetPolicyStatus(kPolicyShowHomeButton)));
114
115 recommended_reader_->OnUpdatePolicy();
116 dict->SetString("level",
117 PolicyStatusInfo::GetPolicyLevelString(PolicyStatusInfo::RECOMMENDED));
118 EXPECT_TRUE(dict->Equals(
119 recommended_reader_->GetPolicyStatus(kPolicyShowHomeButton)));
120 }
121
122 // Test for integer-valued policy settings.
123 TEST_F(ConfigurationPolicyReaderTest, SetValue) {
124 provider_.AddPolicy(kPolicyRestoreOnStartup, Value::CreateIntegerValue(3));
125 managed_reader_->OnUpdatePolicy();
126 scoped_ptr<DictionaryValue> dict(CreateDictionary(key::kRestoreOnStartup,
127 Value::CreateIntegerValue(3)));
128 EXPECT_TRUE(dict->Equals(
129 managed_reader_->GetPolicyStatus(kPolicyRestoreOnStartup)));
130
131 recommended_reader_->OnUpdatePolicy();
132 dict->SetString("level",
133 PolicyStatusInfo::GetPolicyLevelString(PolicyStatusInfo::RECOMMENDED));
134 EXPECT_TRUE(dict->Equals(
135 recommended_reader_->GetPolicyStatus(kPolicyRestoreOnStartup)));
136 }
137
138 class PolicyStatusTest : public testing::Test {
139 protected:
140 typedef ConfigurationPolicyProvider::PolicyDefinitionList
141 PolicyDefinitionList;
142
143 PolicyStatusTest()
144 : managed_platform_provider_(),
145 managed_cloud_provider_(),
146 recommended_platform_provider_(),
147 recommended_cloud_provider_() {
148 managed_platform_ =
149 new MockConfigurationPolicyReader(&managed_platform_provider_,
150 PolicyStatusInfo::MANDATORY);
151 managed_cloud_ =
152 new MockConfigurationPolicyReader(&managed_cloud_provider_,
153 PolicyStatusInfo::MANDATORY);
154 recommended_platform_ =
155 new MockConfigurationPolicyReader(&recommended_platform_provider_,
156 PolicyStatusInfo::RECOMMENDED);
157 recommended_cloud_ =
158 new MockConfigurationPolicyReader(&recommended_cloud_provider_,
159 PolicyStatusInfo::RECOMMENDED);
160
161 policy_status_.reset(new PolicyStatus(managed_platform_,
162 managed_cloud_,
163 recommended_platform_,
164 recommended_cloud_));
165 policy_list_ =
166 ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList();
167 status_ok_ = ASCIIToUTF16("ok");
168 }
169
170 void UpdatePolicyReaders() {
171 managed_platform_->OnUpdatePolicy();
172 managed_cloud_->OnUpdatePolicy();
173 recommended_platform_->OnUpdatePolicy();
174 recommended_cloud_->OnUpdatePolicy();
175 }
176
177 void SetDictionaryPaths(DictionaryValue* dict,
178 const char* policy_name,
179 bool defined,
180 PolicyStatusInfo::PolicyLevel level) {
181 dict->SetString(PolicyStatusInfo::name_dict_path,
182 ASCIIToUTF16(policy_name));
183 if (defined) {
184 dict->SetString(PolicyStatusInfo::level_dict_path,
185 PolicyStatusInfo::GetPolicyLevelString(level));
186 }
187 }
188
189 MockConfigurationPolicyProvider managed_platform_provider_;
Mattias Nissler (ping if slow) 2011/08/29 11:24:40 Why do you still need providers? I think you can j
190 MockConfigurationPolicyProvider managed_cloud_provider_;
191 MockConfigurationPolicyProvider recommended_platform_provider_;
192 MockConfigurationPolicyProvider recommended_cloud_provider_;
193 MockConfigurationPolicyReader* managed_platform_;
194 MockConfigurationPolicyReader* managed_cloud_;
195 MockConfigurationPolicyReader* recommended_platform_;
196 MockConfigurationPolicyReader* recommended_cloud_;
197 scoped_ptr<PolicyStatus> policy_status_;
198 const PolicyDefinitionList* policy_list_;
199 string16 status_ok_;
200 };
201
202 TEST_F(PolicyStatusTest, GetPolicyStatusList) {
203 bool any_policies_sent;
204 scoped_ptr<ListValue> status_list(
205 policy_status_->GetPolicyStatusList(&any_policies_sent));
206
207 EXPECT_FALSE(any_policies_sent);
208
209 size_t policy_list_size =
210 static_cast<size_t>(policy_list_->end - policy_list_->begin);
211
212 EXPECT_EQ(policy_list_size, status_list->GetSize());
213
214 managed_platform_provider_.AddPolicy(kPolicyInstantEnabled,
215 Value::CreateBooleanValue(true));
216 managed_cloud_provider_.AddPolicy(kPolicyDisablePluginFinder,
217 Value::CreateBooleanValue(true));
218 recommended_platform_provider_.AddPolicy(kPolicySyncDisabled,
219 Value::CreateBooleanValue(true));
220 recommended_cloud_provider_.AddPolicy(kPolicyTranslateEnabled,
221 Value::CreateBooleanValue(true));
222 UpdatePolicyReaders();
223
224 status_list.reset(policy_status_->GetPolicyStatusList(&any_policies_sent));
225 EXPECT_TRUE(any_policies_sent);
226 EXPECT_EQ(policy_list_size, status_list->GetSize());
227
228 scoped_ptr<DictionaryValue> undefined_dict(new DictionaryValue());
229 undefined_dict->SetString(PolicyStatusInfo::level_dict_path,
230 PolicyStatusInfo::GetPolicyLevelString(
231 PolicyStatusInfo::LEVEL_UNDEFINED));
232 undefined_dict->SetString(PolicyStatusInfo::source_type_dict_path,
233 PolicyStatusInfo::GetSourceTypeString(
234 PolicyStatusInfo::SOURCE_TYPE_UNDEFINED));
235 undefined_dict->Set(PolicyStatusInfo::value_dict_path,
236 Value::CreateNullValue());
237 undefined_dict->SetBoolean(PolicyStatusInfo::set_dict_path, false);
238 undefined_dict->SetString(PolicyStatusInfo::status_dict_path, string16());
239
240 scoped_ptr<DictionaryValue> defined_dict(new DictionaryValue());
241 defined_dict->SetString(PolicyStatusInfo::source_type_dict_path,
242 PolicyStatusInfo::GetSourceTypeString(
243 PolicyStatusInfo::USER));
244 defined_dict->Set(PolicyStatusInfo::value_dict_path,
245 Value::CreateBooleanValue(true));
246 defined_dict->SetBoolean(PolicyStatusInfo::set_dict_path, true);
247 defined_dict->SetString(PolicyStatusInfo::status_dict_path, status_ok_);
248
249 for (const PolicyDefinitionList::Entry* entry = policy_list_->begin;
250 entry != policy_list_->end; ++entry) {
251 Value* status_dict = NULL;
252
253 // Every policy in |policy_list_| has to appear in the returned ListValue.
254 string16 name = ASCIIToUTF16(entry->name);
255 for (ListValue::const_iterator status_entry = status_list->begin();
256 status_entry != status_list->end();
257 ++status_entry) {
258 string16 value;
259 ASSERT_TRUE((*status_entry)->IsType(Value::TYPE_DICTIONARY));
260 DictionaryValue* dict = static_cast<DictionaryValue*>(*status_entry);
261 ASSERT_TRUE(dict->GetString(PolicyStatusInfo::name_dict_path, &value));
262
263 if (value == name)
264 status_dict = *status_entry;
265 }
266
267 ASSERT_FALSE(status_dict == NULL);
268
269 switch (entry->policy_type) {
270 case kPolicyInstantEnabled:
271 SetDictionaryPaths(defined_dict.get(),
272 entry->name,
273 true,
274 PolicyStatusInfo::MANDATORY);
275 EXPECT_TRUE(defined_dict->Equals(status_dict));
276 break;
277 case kPolicyDisablePluginFinder:
278 SetDictionaryPaths(defined_dict.get(),
279 entry->name,
280 true,
281 PolicyStatusInfo::MANDATORY);
282 EXPECT_TRUE(defined_dict->Equals(status_dict));
283 break;
284 case kPolicySyncDisabled:
285 SetDictionaryPaths(defined_dict.get(),
286 entry->name,
287 true,
288 PolicyStatusInfo::RECOMMENDED);
289 EXPECT_TRUE(defined_dict->Equals(status_dict));
290 break;
291 case kPolicyTranslateEnabled:
292 SetDictionaryPaths(defined_dict.get(),
293 entry->name,
294 true,
295 PolicyStatusInfo::RECOMMENDED);
296 EXPECT_TRUE(defined_dict->Equals(status_dict));
297 break;
298 default:
299 SetDictionaryPaths(undefined_dict.get(),
300 entry->name,
301 false,
302 PolicyStatusInfo::LEVEL_UNDEFINED);
303 EXPECT_TRUE(undefined_dict->Equals(status_dict));
304 break;
305 }
306 }
307 }
308
309 TEST_F(PolicyStatusTest, GetPolicyName) {
310 for (const PolicyDefinitionList::Entry* entry = policy_list_->begin;
311 entry != policy_list_->end; ++entry) {
312 EXPECT_EQ(ASCIIToUTF16(entry->name),
313 PolicyStatus::GetPolicyName(entry->policy_type));
314 }
315 }
316
317 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698