OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/policy/configuration_policy_provider_test.h" | 5 #include "chrome/browser/policy/configuration_policy_provider_test.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 " }" | 104 " }" |
105 " }" | 105 " }" |
106 " }" | 106 " }" |
107 " }" | 107 " }" |
108 " }" | 108 " }" |
109 " }" | 109 " }" |
110 " }" | 110 " }" |
111 " }" | 111 " }" |
112 "}"; | 112 "}"; |
113 | 113 |
114 namespace test_policy_definitions { | 114 namespace test_keys { |
115 | 115 |
116 const char kKeyString[] = "StringPolicy"; | 116 const char kKeyString[] = "StringPolicy"; |
117 const char kKeyBoolean[] = "BooleanPolicy"; | 117 const char kKeyBoolean[] = "BooleanPolicy"; |
118 const char kKeyInteger[] = "IntegerPolicy"; | 118 const char kKeyInteger[] = "IntegerPolicy"; |
119 const char kKeyStringList[] = "StringListPolicy"; | 119 const char kKeyStringList[] = "StringListPolicy"; |
120 const char kKeyDictionary[] = "DictionaryPolicy"; | 120 const char kKeyDictionary[] = "DictionaryPolicy"; |
121 | 121 |
122 static const PolicyDefinitionList::Entry kEntries[] = { | 122 } // namespace test_keys |
123 { kKeyString, base::Value::TYPE_STRING }, | |
124 { kKeyBoolean, base::Value::TYPE_BOOLEAN }, | |
125 { kKeyInteger, base::Value::TYPE_INTEGER }, | |
126 { kKeyStringList, base::Value::TYPE_LIST }, | |
127 { kKeyDictionary, base::Value::TYPE_DICTIONARY }, | |
128 }; | |
129 | |
130 const PolicyDefinitionList kList = { | |
131 kEntries, kEntries + arraysize(kEntries) | |
132 }; | |
133 | |
134 } // namespace test_policy_definitions | |
135 | 123 |
136 PolicyTestBase::PolicyTestBase() {} | 124 PolicyTestBase::PolicyTestBase() {} |
137 | 125 |
138 PolicyTestBase::~PolicyTestBase() {} | 126 PolicyTestBase::~PolicyTestBase() {} |
139 | 127 |
140 void PolicyTestBase::SetUp() { | 128 void PolicyTestBase::SetUp() { |
141 std::string error; | 129 std::string error; |
142 chrome_schema_ = Schema::Parse(kTestChromeSchema, &error); | 130 chrome_schema_ = Schema::Parse(kTestChromeSchema, &error); |
143 ASSERT_TRUE(chrome_schema_.valid()) << error; | 131 ASSERT_TRUE(chrome_schema_.valid()) << error; |
144 schema_registry_.RegisterComponent(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), | 132 schema_registry_.RegisterComponent(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), |
(...skipping 27 matching lines...) Expand all Loading... |
172 | 160 |
173 ConfigurationPolicyProviderTest::~ConfigurationPolicyProviderTest() {} | 161 ConfigurationPolicyProviderTest::~ConfigurationPolicyProviderTest() {} |
174 | 162 |
175 void ConfigurationPolicyProviderTest::SetUp() { | 163 void ConfigurationPolicyProviderTest::SetUp() { |
176 PolicyTestBase::SetUp(); | 164 PolicyTestBase::SetUp(); |
177 | 165 |
178 test_harness_.reset((*GetParam())()); | 166 test_harness_.reset((*GetParam())()); |
179 test_harness_->SetUp(); | 167 test_harness_->SetUp(); |
180 | 168 |
181 Schema extension_schema = | 169 Schema extension_schema = |
182 chrome_schema_.GetKnownProperty(test_policy_definitions::kKeyDictionary); | 170 chrome_schema_.GetKnownProperty(test_keys::kKeyDictionary); |
183 ASSERT_TRUE(extension_schema.valid()); | 171 ASSERT_TRUE(extension_schema.valid()); |
184 schema_registry_.RegisterComponent( | 172 schema_registry_.RegisterComponent( |
185 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 173 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
186 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), | 174 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), |
187 extension_schema); | 175 extension_schema); |
188 schema_registry_.RegisterComponent( | 176 schema_registry_.RegisterComponent( |
189 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 177 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
190 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), | 178 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), |
191 extension_schema); | 179 extension_schema); |
192 schema_registry_.RegisterComponent( | 180 schema_registry_.RegisterComponent( |
193 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 181 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
194 "cccccccccccccccccccccccccccccccc"), | 182 "cccccccccccccccccccccccccccccccc"), |
195 extension_schema); | 183 extension_schema); |
196 | 184 |
197 provider_.reset(test_harness_->CreateProvider( | 185 provider_.reset(test_harness_->CreateProvider(&schema_registry_, |
198 &schema_registry_, | 186 loop_.message_loop_proxy())); |
199 loop_.message_loop_proxy(), | |
200 &test_policy_definitions::kList)); | |
201 provider_->Init(&schema_registry_); | 187 provider_->Init(&schema_registry_); |
202 // Some providers do a reload on init. Make sure any notifications generated | 188 // Some providers do a reload on init. Make sure any notifications generated |
203 // are fired now. | 189 // are fired now. |
204 loop_.RunUntilIdle(); | 190 loop_.RunUntilIdle(); |
205 | 191 |
206 const PolicyBundle kEmptyBundle; | 192 const PolicyBundle kEmptyBundle; |
207 EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle)); | 193 EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle)); |
208 } | 194 } |
209 | 195 |
210 void ConfigurationPolicyProviderTest::TearDown() { | 196 void ConfigurationPolicyProviderTest::TearDown() { |
(...skipping 27 matching lines...) Expand all Loading... |
238 TEST_P(ConfigurationPolicyProviderTest, Empty) { | 224 TEST_P(ConfigurationPolicyProviderTest, Empty) { |
239 provider_->RefreshPolicies(); | 225 provider_->RefreshPolicies(); |
240 loop_.RunUntilIdle(); | 226 loop_.RunUntilIdle(); |
241 const PolicyBundle kEmptyBundle; | 227 const PolicyBundle kEmptyBundle; |
242 EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle)); | 228 EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle)); |
243 } | 229 } |
244 | 230 |
245 TEST_P(ConfigurationPolicyProviderTest, StringValue) { | 231 TEST_P(ConfigurationPolicyProviderTest, StringValue) { |
246 const char kTestString[] = "string_value"; | 232 const char kTestString[] = "string_value"; |
247 base::StringValue expected_value(kTestString); | 233 base::StringValue expected_value(kTestString); |
248 CheckValue(test_policy_definitions::kKeyString, | 234 CheckValue(test_keys::kKeyString, |
249 expected_value, | 235 expected_value, |
250 base::Bind(&PolicyProviderTestHarness::InstallStringPolicy, | 236 base::Bind(&PolicyProviderTestHarness::InstallStringPolicy, |
251 base::Unretained(test_harness_.get()), | 237 base::Unretained(test_harness_.get()), |
252 test_policy_definitions::kKeyString, | 238 test_keys::kKeyString, |
253 kTestString)); | 239 kTestString)); |
254 } | 240 } |
255 | 241 |
256 TEST_P(ConfigurationPolicyProviderTest, BooleanValue) { | 242 TEST_P(ConfigurationPolicyProviderTest, BooleanValue) { |
257 base::FundamentalValue expected_value(true); | 243 base::FundamentalValue expected_value(true); |
258 CheckValue(test_policy_definitions::kKeyBoolean, | 244 CheckValue(test_keys::kKeyBoolean, |
259 expected_value, | 245 expected_value, |
260 base::Bind(&PolicyProviderTestHarness::InstallBooleanPolicy, | 246 base::Bind(&PolicyProviderTestHarness::InstallBooleanPolicy, |
261 base::Unretained(test_harness_.get()), | 247 base::Unretained(test_harness_.get()), |
262 test_policy_definitions::kKeyBoolean, | 248 test_keys::kKeyBoolean, |
263 true)); | 249 true)); |
264 } | 250 } |
265 | 251 |
266 TEST_P(ConfigurationPolicyProviderTest, IntegerValue) { | 252 TEST_P(ConfigurationPolicyProviderTest, IntegerValue) { |
267 base::FundamentalValue expected_value(42); | 253 base::FundamentalValue expected_value(42); |
268 CheckValue(test_policy_definitions::kKeyInteger, | 254 CheckValue(test_keys::kKeyInteger, |
269 expected_value, | 255 expected_value, |
270 base::Bind(&PolicyProviderTestHarness::InstallIntegerPolicy, | 256 base::Bind(&PolicyProviderTestHarness::InstallIntegerPolicy, |
271 base::Unretained(test_harness_.get()), | 257 base::Unretained(test_harness_.get()), |
272 test_policy_definitions::kKeyInteger, | 258 test_keys::kKeyInteger, |
273 42)); | 259 42)); |
274 } | 260 } |
275 | 261 |
276 TEST_P(ConfigurationPolicyProviderTest, StringListValue) { | 262 TEST_P(ConfigurationPolicyProviderTest, StringListValue) { |
277 base::ListValue expected_value; | 263 base::ListValue expected_value; |
278 expected_value.Set(0U, base::Value::CreateStringValue("first")); | 264 expected_value.Set(0U, base::Value::CreateStringValue("first")); |
279 expected_value.Set(1U, base::Value::CreateStringValue("second")); | 265 expected_value.Set(1U, base::Value::CreateStringValue("second")); |
280 CheckValue(test_policy_definitions::kKeyStringList, | 266 CheckValue(test_keys::kKeyStringList, |
281 expected_value, | 267 expected_value, |
282 base::Bind(&PolicyProviderTestHarness::InstallStringListPolicy, | 268 base::Bind(&PolicyProviderTestHarness::InstallStringListPolicy, |
283 base::Unretained(test_harness_.get()), | 269 base::Unretained(test_harness_.get()), |
284 test_policy_definitions::kKeyStringList, | 270 test_keys::kKeyStringList, |
285 &expected_value)); | 271 &expected_value)); |
286 } | 272 } |
287 | 273 |
288 TEST_P(ConfigurationPolicyProviderTest, DictionaryValue) { | 274 TEST_P(ConfigurationPolicyProviderTest, DictionaryValue) { |
289 base::DictionaryValue expected_value; | 275 base::DictionaryValue expected_value; |
290 expected_value.SetBoolean("bool", true); | 276 expected_value.SetBoolean("bool", true); |
291 expected_value.SetDouble("double", 123.456); | 277 expected_value.SetDouble("double", 123.456); |
292 expected_value.SetInteger("int", 123); | 278 expected_value.SetInteger("int", 123); |
293 expected_value.SetString("string", "omg"); | 279 expected_value.SetString("string", "omg"); |
294 | 280 |
295 base::ListValue* list = new base::ListValue(); | 281 base::ListValue* list = new base::ListValue(); |
296 list->Set(0U, base::Value::CreateStringValue("first")); | 282 list->Set(0U, base::Value::CreateStringValue("first")); |
297 list->Set(1U, base::Value::CreateStringValue("second")); | 283 list->Set(1U, base::Value::CreateStringValue("second")); |
298 expected_value.Set("array", list); | 284 expected_value.Set("array", list); |
299 | 285 |
300 base::DictionaryValue* dict = new base::DictionaryValue(); | 286 base::DictionaryValue* dict = new base::DictionaryValue(); |
301 dict->SetString("sub", "value"); | 287 dict->SetString("sub", "value"); |
302 list = new base::ListValue(); | 288 list = new base::ListValue(); |
303 base::DictionaryValue* sub = new base::DictionaryValue(); | 289 base::DictionaryValue* sub = new base::DictionaryValue(); |
304 sub->SetInteger("aaa", 111); | 290 sub->SetInteger("aaa", 111); |
305 sub->SetInteger("bbb", 222); | 291 sub->SetInteger("bbb", 222); |
306 list->Append(sub); | 292 list->Append(sub); |
307 sub = new base::DictionaryValue(); | 293 sub = new base::DictionaryValue(); |
308 sub->SetString("ccc", "333"); | 294 sub->SetString("ccc", "333"); |
309 sub->SetString("ddd", "444"); | 295 sub->SetString("ddd", "444"); |
310 list->Append(sub); | 296 list->Append(sub); |
311 dict->Set("sublist", list); | 297 dict->Set("sublist", list); |
312 expected_value.Set("dictionary", dict); | 298 expected_value.Set("dictionary", dict); |
313 | 299 |
314 CheckValue(test_policy_definitions::kKeyDictionary, | 300 CheckValue(test_keys::kKeyDictionary, |
315 expected_value, | 301 expected_value, |
316 base::Bind(&PolicyProviderTestHarness::InstallDictionaryPolicy, | 302 base::Bind(&PolicyProviderTestHarness::InstallDictionaryPolicy, |
317 base::Unretained(test_harness_.get()), | 303 base::Unretained(test_harness_.get()), |
318 test_policy_definitions::kKeyDictionary, | 304 test_keys::kKeyDictionary, |
319 &expected_value)); | 305 &expected_value)); |
320 } | 306 } |
321 | 307 |
322 TEST_P(ConfigurationPolicyProviderTest, RefreshPolicies) { | 308 TEST_P(ConfigurationPolicyProviderTest, RefreshPolicies) { |
323 PolicyBundle bundle; | 309 PolicyBundle bundle; |
324 EXPECT_TRUE(provider_->policies().Equals(bundle)); | 310 EXPECT_TRUE(provider_->policies().Equals(bundle)); |
325 | 311 |
326 // OnUpdatePolicy is called even when there are no changes. | 312 // OnUpdatePolicy is called even when there are no changes. |
327 MockConfigurationPolicyObserver observer; | 313 MockConfigurationPolicyObserver observer; |
328 provider_->AddObserver(&observer); | 314 provider_->AddObserver(&observer); |
329 EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1); | 315 EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1); |
330 provider_->RefreshPolicies(); | 316 provider_->RefreshPolicies(); |
331 loop_.RunUntilIdle(); | 317 loop_.RunUntilIdle(); |
332 Mock::VerifyAndClearExpectations(&observer); | 318 Mock::VerifyAndClearExpectations(&observer); |
333 | 319 |
334 EXPECT_TRUE(provider_->policies().Equals(bundle)); | 320 EXPECT_TRUE(provider_->policies().Equals(bundle)); |
335 | 321 |
336 // OnUpdatePolicy is called when there are changes. | 322 // OnUpdatePolicy is called when there are changes. |
337 test_harness_->InstallStringPolicy(test_policy_definitions::kKeyString, | 323 test_harness_->InstallStringPolicy(test_keys::kKeyString, "value"); |
338 "value"); | |
339 EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1); | 324 EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1); |
340 provider_->RefreshPolicies(); | 325 provider_->RefreshPolicies(); |
341 loop_.RunUntilIdle(); | 326 loop_.RunUntilIdle(); |
342 Mock::VerifyAndClearExpectations(&observer); | 327 Mock::VerifyAndClearExpectations(&observer); |
343 | 328 |
344 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 329 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
345 .Set(test_policy_definitions::kKeyString, | 330 .Set(test_keys::kKeyString, |
346 test_harness_->policy_level(), | 331 test_harness_->policy_level(), |
347 test_harness_->policy_scope(), | 332 test_harness_->policy_scope(), |
348 base::Value::CreateStringValue("value"), | 333 base::Value::CreateStringValue("value"), |
349 NULL); | 334 NULL); |
350 EXPECT_TRUE(provider_->policies().Equals(bundle)); | 335 EXPECT_TRUE(provider_->policies().Equals(bundle)); |
351 provider_->RemoveObserver(&observer); | 336 provider_->RemoveObserver(&observer); |
352 } | 337 } |
353 | 338 |
354 TEST(ConfigurationPolicyProviderTest, FixDeprecatedPolicies) { | 339 TEST(ConfigurationPolicyProviderTest, FixDeprecatedPolicies) { |
355 PolicyMap policy_map; | 340 PolicyMap policy_map; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 for (int i = 0; i < 2; ++i) { | 391 for (int i = 0; i < 2; ++i) { |
407 base::DictionaryValue* dict = new base::DictionaryValue(); | 392 base::DictionaryValue* dict = new base::DictionaryValue(); |
408 dict->SetInteger("subdictindex", i); | 393 dict->SetInteger("subdictindex", i); |
409 dict->Set("subdict", policy_dict.DeepCopy()); | 394 dict->Set("subdict", policy_dict.DeepCopy()); |
410 list->Append(dict); | 395 list->Append(dict); |
411 } | 396 } |
412 policy_dict.Set("list", list); | 397 policy_dict.Set("list", list); |
413 policy_dict.Set("dict", policy_dict.DeepCopy()); | 398 policy_dict.Set("dict", policy_dict.DeepCopy()); |
414 | 399 |
415 // Install these policies as a Chrome policy. | 400 // Install these policies as a Chrome policy. |
416 test_harness_->InstallDictionaryPolicy( | 401 test_harness_->InstallDictionaryPolicy(test_keys::kKeyDictionary, |
417 test_policy_definitions::kKeyDictionary, &policy_dict); | 402 &policy_dict); |
418 // Install them as 3rd party policies too. | 403 // Install them as 3rd party policies too. |
419 base::DictionaryValue policy_3rdparty; | 404 base::DictionaryValue policy_3rdparty; |
420 policy_3rdparty.Set("extensions.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", | 405 policy_3rdparty.Set("extensions.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
421 policy_dict.DeepCopy()); | 406 policy_dict.DeepCopy()); |
422 policy_3rdparty.Set("extensions.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", | 407 policy_3rdparty.Set("extensions.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", |
423 policy_dict.DeepCopy()); | 408 policy_dict.DeepCopy()); |
424 // Install invalid 3rd party policies that shouldn't be loaded. These also | 409 // Install invalid 3rd party policies that shouldn't be loaded. These also |
425 // help detecting memory leaks in the code paths that detect invalid input. | 410 // help detecting memory leaks in the code paths that detect invalid input. |
426 policy_3rdparty.Set("invalid-domain.component", policy_dict.DeepCopy()); | 411 policy_3rdparty.Set("invalid-domain.component", policy_dict.DeepCopy()); |
427 policy_3rdparty.Set("extensions.cccccccccccccccccccccccccccccccc", | 412 policy_3rdparty.Set("extensions.cccccccccccccccccccccccccccccccc", |
428 base::Value::CreateStringValue("invalid-value")); | 413 base::Value::CreateStringValue("invalid-value")); |
429 test_harness_->Install3rdPartyPolicy(&policy_3rdparty); | 414 test_harness_->Install3rdPartyPolicy(&policy_3rdparty); |
430 | 415 |
431 provider_->RefreshPolicies(); | 416 provider_->RefreshPolicies(); |
432 loop_.RunUntilIdle(); | 417 loop_.RunUntilIdle(); |
433 | 418 |
434 PolicyMap expected_policy; | 419 PolicyMap expected_policy; |
435 expected_policy.Set(test_policy_definitions::kKeyDictionary, | 420 expected_policy.Set(test_keys::kKeyDictionary, |
436 test_harness_->policy_level(), | 421 test_harness_->policy_level(), |
437 test_harness_->policy_scope(), | 422 test_harness_->policy_scope(), |
438 policy_dict.DeepCopy(), | 423 policy_dict.DeepCopy(), |
439 NULL); | 424 NULL); |
440 PolicyBundle expected_bundle; | 425 PolicyBundle expected_bundle; |
441 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 426 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
442 .CopyFrom(expected_policy); | 427 .CopyFrom(expected_policy); |
443 expected_policy.Clear(); | 428 expected_policy.Clear(); |
444 expected_policy.LoadFrom(&policy_dict, | 429 expected_policy.LoadFrom(&policy_dict, |
445 test_harness_->policy_level(), | 430 test_harness_->policy_level(), |
446 test_harness_->policy_scope()); | 431 test_harness_->policy_scope()); |
447 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 432 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
448 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) | 433 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) |
449 .CopyFrom(expected_policy); | 434 .CopyFrom(expected_policy); |
450 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 435 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
451 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")) | 436 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")) |
452 .CopyFrom(expected_policy); | 437 .CopyFrom(expected_policy); |
453 EXPECT_TRUE(provider_->policies().Equals(expected_bundle)); | 438 EXPECT_TRUE(provider_->policies().Equals(expected_bundle)); |
454 } | 439 } |
455 | 440 |
456 } // namespace policy | 441 } // namespace policy |
OLD | NEW |