1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/configuration_policy_provider_test.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/configuration_policy_provider.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/mock_configuration_policy_provider.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_bundle.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_namespace.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Mock; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char kTestChromeSchema[] = 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"StringPolicy\": { \"type\": \"string\" }," 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"BooleanPolicy\": { \"type\": \"boolean\" }," 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"IntegerPolicy\": { \"type\": \"integer\" }," 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"StringListPolicy\": {" 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"array\"," 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"items\": { \"type\": \"string\" }" 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }," 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"DictionaryPolicy\": {" 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"bool\": { \"type\": \"boolean\" }," 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"double\": { \"type\": \"number\" }," 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"int\": { \"type\": \"integer\" }," 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"string\": { \"type\": \"string\" }," 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"array\": {" 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"array\"," 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"items\": { \"type\": \"string\" }" 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }," 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"dictionary\": {" 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"sub\": { \"type\": \"string\" }," 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"sublist\": {" 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"array\"," 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"items\": {" 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"aaa\": { \"type\": \"integer\" }," 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"bbb\": { \"type\": \"integer\" }," 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"ccc\": { \"type\": \"string\" }," 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"ddd\": { \"type\": \"string\" }" 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }," 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"list\": {" 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"array\"," 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"items\": {" 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"subdictindex\": { \"type\": \"integer\" }," 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"subdict\": {" 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"bool\": { \"type\": \"boolean\" }," 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"double\": { \"type\": \"number\" }," 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"int\": { \"type\": \"integer\" }," 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"string\": { \"type\": \"string\" }" 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }," 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"dict\": {" 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"bool\": { \"type\": \"boolean\" }," 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"double\": { \"type\": \"number\" }," 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"int\": { \"type\": \"integer\" }," 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"string\": { \"type\": \"string\" }," 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"list\": {" 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"array\"," 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"items\": {" 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"subdictindex\": { \"type\": \"integer\" }," 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"subdict\": {" 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"type\": \"object\"," 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"properties\": {" 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"bool\": { \"type\": \"boolean\" }," 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"double\": { \"type\": \"number\" }," 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"int\": { \"type\": \"integer\" }," 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " \"string\": { \"type\": \"string\" }" 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) " }" 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "}"; 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace test_keys { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyString[] = "StringPolicy"; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyBoolean[] = "BooleanPolicy"; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyInteger[] = "IntegerPolicy"; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyStringList[] = "StringListPolicy"; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyDictionary[] = "DictionaryPolicy"; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace test_keys 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)PolicyTestBase::PolicyTestBase() {} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyTestBase::~PolicyTestBase() {} 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PolicyTestBase::SetUp() { 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const PolicyNamespace ns(POLICY_DOMAIN_CHROME, ""); 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(RegisterSchema(ns, kTestChromeSchema)); 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PolicyTestBase::TearDown() { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool PolicyTestBase::RegisterSchema(const PolicyNamespace& ns, 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& schema_string) { 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string error; 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Schema schema = Schema::Parse(schema_string, &error); 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (schema.valid()) { 142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) schema_registry_.RegisterComponent(ns, schema); 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return true; 144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ADD_FAILURE() << error; 146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyProviderTestHarness::PolicyProviderTestHarness(PolicyLevel level, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyScope scope) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : level_(level), scope_(scope) {} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyProviderTestHarness::~PolicyProviderTestHarness() {} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyLevel PolicyProviderTestHarness::policy_level() const { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return level_; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PolicyScope PolicyProviderTestHarness::policy_scope() const { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scope_; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PolicyProviderTestHarness::Install3rdPartyPolicy( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* policies) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FAIL(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConfigurationPolicyProviderTest::ConfigurationPolicyProviderTest() {} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConfigurationPolicyProviderTest::~ConfigurationPolicyProviderTest() {} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConfigurationPolicyProviderTest::SetUp() { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyTestBase::SetUp(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_.reset((*GetParam())()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->SetUp(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); 179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Schema chrome_schema = *schema_registry_.schema_map()->GetSchema(chrome_ns); 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Schema extension_schema = 181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) chrome_schema.GetKnownProperty(test_keys::kKeyDictionary); 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(extension_schema.valid()); 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) schema_registry_.RegisterComponent( 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extension_schema); 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) schema_registry_.RegisterComponent( 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extension_schema); 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) schema_registry_.RegisterComponent( 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "cccccccccccccccccccccccccccccccc"), 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extension_schema); 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) provider_.reset(test_harness_->CreateProvider(&schema_registry_, 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) loop_.message_loop_proxy())); 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) provider_->Init(&schema_registry_); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some providers do a reload on init. Make sure any notifications generated 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are fired now. 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PolicyBundle kEmptyBundle; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle)); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConfigurationPolicyProviderTest::TearDown() { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Give providers the chance to clean up after themselves on the file thread. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->Shutdown(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_.reset(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyTestBase::TearDown(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConfigurationPolicyProviderTest::CheckValue( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* policy_name, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& expected_value, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure install_value) { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install the value, reload policy and check the provider for the value. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_value.Run(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->RefreshPolicies(); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyBundle expected_bundle; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Set(policy_name, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_level(), 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_scope(), 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_value.DeepCopy(), 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->policies().Equals(expected_bundle)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(joaodasilva): set the policy in the POLICY_DOMAIN_EXTENSIONS too, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and extend the |expected_bundle|, once all providers are ready. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, Empty) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->RefreshPolicies(); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PolicyBundle kEmptyBundle; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->policies().Equals(kEmptyBundle)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, StringValue) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kTestString[] = "string_value"; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringValue expected_value(kTestString); 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckValue(test_keys::kKeyString, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_value, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PolicyProviderTestHarness::InstallStringPolicy, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(test_harness_.get()), 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_keys::kKeyString, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestString)); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, BooleanValue) { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::FundamentalValue expected_value(true); 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckValue(test_keys::kKeyBoolean, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_value, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PolicyProviderTestHarness::InstallBooleanPolicy, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(test_harness_.get()), 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_keys::kKeyBoolean, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true)); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, IntegerValue) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::FundamentalValue expected_value(42); 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckValue(test_keys::kKeyInteger, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_value, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PolicyProviderTestHarness::InstallIntegerPolicy, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(test_harness_.get()), 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_keys::kKeyInteger, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42)); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, StringListValue) { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue expected_value; 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected_value.Set(0U, new base::StringValue("first")); 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected_value.Set(1U, new base::StringValue("second")); 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckValue(test_keys::kKeyStringList, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_value, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PolicyProviderTestHarness::InstallStringListPolicy, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(test_harness_.get()), 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_keys::kKeyStringList, 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &expected_value)); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, DictionaryValue) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue expected_value; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_value.SetBoolean("bool", true); 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_value.SetDouble("double", 123.456); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_value.SetInteger("int", 123); 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_value.SetString("string", "omg"); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* list = new base::ListValue(); 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) list->Set(0U, new base::StringValue("first")); 2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) list->Set(1U, new base::StringValue("second")); 295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_value.Set("array", list); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString("sub", "value"); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list = new base::ListValue(); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* sub = new base::DictionaryValue(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub->SetInteger("aaa", 111); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub->SetInteger("bbb", 222); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->Append(sub); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub = new base::DictionaryValue(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub->SetString("ccc", "333"); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub->SetString("ddd", "444"); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->Append(sub); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->Set("sublist", list); 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_value.Set("dictionary", dict); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CheckValue(test_keys::kKeyDictionary, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_value, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&PolicyProviderTestHarness::InstallDictionaryPolicy, 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(test_harness_.get()), 315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_keys::kKeyDictionary, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &expected_value)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ConfigurationPolicyProviderTest, RefreshPolicies) { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyBundle bundle; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->policies().Equals(bundle)); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnUpdatePolicy is called even when there are no changes. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockConfigurationPolicyObserver observer; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->AddObserver(&observer); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->RefreshPolicies(); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->policies().Equals(bundle)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnUpdatePolicy is called when there are changes. 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_harness_->InstallStringPolicy(test_keys::kKeyString, "value"); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnUpdatePolicy(provider_.get())).Times(1); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->RefreshPolicies(); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) .Set(test_keys::kKeyString, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_level(), 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_scope(), 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue("value"), 3457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->policies().Equals(bundle)); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->RemoveObserver(&observer); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Configuration3rdPartyPolicyProviderTest:: 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Configuration3rdPartyPolicyProviderTest() {} 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Configuration3rdPartyPolicyProviderTest:: 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Configuration3rdPartyPolicyProviderTest() {} 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(Configuration3rdPartyPolicyProviderTest, Load3rdParty) { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue policy_dict; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_dict.SetBoolean("bool", true); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_dict.SetDouble("double", 123.456); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_dict.SetInteger("int", 789); 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) policy_dict.SetString("string", "string value"); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* list = new base::ListValue(); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 2; ++i) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetInteger("subdictindex", i); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->Set("subdict", policy_dict.DeepCopy()); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->Append(dict); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_dict.Set("list", list); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_dict.Set("dict", policy_dict.DeepCopy()); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install these policies as a Chrome policy. 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test_harness_->InstallDictionaryPolicy(test_keys::kKeyDictionary, 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &policy_dict); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install them as 3rd party policies too. 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue policy_3rdparty; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_3rdparty.Set("extensions.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_dict.DeepCopy()); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_3rdparty.Set("extensions.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_dict.DeepCopy()); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install invalid 3rd party policies that shouldn't be loaded. These also 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // help detecting memory leaks in the code paths that detect invalid input. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_3rdparty.Set("invalid-domain.component", policy_dict.DeepCopy()); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_3rdparty.Set("extensions.cccccccccccccccccccccccccccccccc", 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::StringValue("invalid-value")); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->Install3rdPartyPolicy(&policy_3rdparty); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->RefreshPolicies(); 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop_.RunUntilIdle(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap expected_policy; 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_policy.Set(test_keys::kKeyDictionary, 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_level(), 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_scope(), 3967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy_dict.DeepCopy(), 3977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyBundle expected_bundle; 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .CopyFrom(expected_policy); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_policy.Clear(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_policy.LoadFrom(&policy_dict, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_level(), 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_harness_->policy_scope()); 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .CopyFrom(expected_policy); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .CopyFrom(expected_policy); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(provider_->policies().Equals(expected_bundle)); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 415