| Index: chrome/browser/policy/schema_map_unittest.cc
|
| diff --git a/chrome/browser/policy/policy_domain_descriptor_unittest.cc b/chrome/browser/policy/schema_map_unittest.cc
|
| similarity index 53%
|
| copy from chrome/browser/policy/policy_domain_descriptor_unittest.cc
|
| copy to chrome/browser/policy/schema_map_unittest.cc
|
| index 7841a8a6c687814fac2b3da15346decc6495c381..b72336c1d2b77ea3ddd409cb28e707de21744d99 100644
|
| --- a/chrome/browser/policy/policy_domain_descriptor_unittest.cc
|
| +++ b/chrome/browser/policy/schema_map_unittest.cc
|
| @@ -1,76 +1,118 @@
|
| -// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Copyright 2013 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 "chrome/browser/policy/policy_domain_descriptor.h"
|
| +#include "chrome/browser/policy/schema_map.h"
|
|
|
| -#include <string>
|
| -
|
| -#include "base/callback.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/policy/external_data_fetcher.h"
|
| #include "chrome/browser/policy/external_data_manager.h"
|
| #include "chrome/browser/policy/policy_bundle.h"
|
| #include "chrome/browser/policy/policy_map.h"
|
| +#include "components/policy/core/common/schema.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace policy {
|
|
|
| -class PolicyDomainDescriptorTest : public testing::Test {
|
| +namespace {
|
| +
|
| +const char kTestSchema[] =
|
| + "{"
|
| + " \"type\": \"object\","
|
| + " \"properties\": {"
|
| + " \"string\": { \"type\": \"string\" },"
|
| + " \"integer\": { \"type\": \"integer\" },"
|
| + " \"boolean\": { \"type\": \"boolean\" },"
|
| + " \"null\": { \"type\": \"null\" },"
|
| + " \"double\": { \"type\": \"number\" },"
|
| + " \"list\": {"
|
| + " \"type\": \"array\","
|
| + " \"items\": { \"type\": \"string\" }"
|
| + " },"
|
| + " \"object\": {"
|
| + " \"type\": \"object\","
|
| + " \"properties\": {"
|
| + " \"a\": { \"type\": \"string\" },"
|
| + " \"b\": { \"type\": \"integer\" }"
|
| + " }"
|
| + " }"
|
| + " }"
|
| + "}";
|
| +
|
| +} // namespace
|
| +
|
| +class SchemaMapTest : public testing::Test {
|
| protected:
|
| - scoped_ptr<ExternalDataFetcher> CreateExternalDataFetcher() const;
|
| + scoped_refptr<SchemaMap> CreateTestMap() {
|
| + std::string error;
|
| + Schema schema = Schema::Parse(kTestSchema, &error);
|
| + if (!schema.valid()) {
|
| + ADD_FAILURE() << error;
|
| + return NULL;
|
| + }
|
| +
|
| + ComponentMap component_map;
|
| + component_map["extension-1"] = schema;
|
| + component_map["extension-2"] = schema;
|
| + component_map["legacy-extension"] = Schema();
|
| +
|
| + DomainMap domain_map;
|
| + domain_map[POLICY_DOMAIN_EXTENSIONS] = component_map;
|
| +
|
| + return new SchemaMap(domain_map);
|
| + }
|
| };
|
|
|
| -scoped_ptr<ExternalDataFetcher>
|
| - PolicyDomainDescriptorTest::CreateExternalDataFetcher() const {
|
| - return make_scoped_ptr(
|
| - new ExternalDataFetcher(base::WeakPtr<ExternalDataManager>(),
|
| - std::string()));
|
| +TEST_F(SchemaMapTest, Empty) {
|
| + scoped_refptr<SchemaMap> map = new SchemaMap();
|
| + EXPECT_TRUE(map->GetDomains().empty());
|
| + EXPECT_FALSE(map->GetComponents(POLICY_DOMAIN_CHROME));
|
| + EXPECT_FALSE(map->GetComponents(POLICY_DOMAIN_EXTENSIONS));
|
| + EXPECT_FALSE(map->GetSchema(PolicyNamespace(POLICY_DOMAIN_CHROME, "")));
|
| }
|
|
|
| -TEST_F(PolicyDomainDescriptorTest, FilterBundle) {
|
| - scoped_refptr<PolicyDomainDescriptor> descriptor =
|
| - new PolicyDomainDescriptor(POLICY_DOMAIN_EXTENSIONS);
|
| - EXPECT_EQ(POLICY_DOMAIN_EXTENSIONS, descriptor->domain());
|
| - EXPECT_TRUE(descriptor->components().empty());
|
| +TEST_F(SchemaMapTest, Lookups) {
|
| + scoped_refptr<SchemaMap> map = CreateTestMap();
|
| + ASSERT_TRUE(map);
|
| +
|
| + EXPECT_FALSE(map->GetSchema(
|
| + PolicyNamespace(POLICY_DOMAIN_CHROME, "")));
|
| + EXPECT_FALSE(map->GetSchema(
|
| + PolicyNamespace(POLICY_DOMAIN_CHROME, "extension-1")));
|
| + EXPECT_FALSE(map->GetSchema(
|
| + PolicyNamespace(POLICY_DOMAIN_CHROME, "legacy-extension")));
|
| + EXPECT_FALSE(map->GetSchema(
|
| + PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "")));
|
| + EXPECT_FALSE(map->GetSchema(
|
| + PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "extension-3")));
|
| +
|
| + const Schema* schema =
|
| + map->GetSchema(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "extension-1"));
|
| + ASSERT_TRUE(schema);
|
| + EXPECT_TRUE(schema->valid());
|
| +
|
| + schema = map->GetSchema(
|
| + PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "legacy-extension"));
|
| + ASSERT_TRUE(schema);
|
| + EXPECT_FALSE(schema->valid());
|
| +}
|
|
|
| +TEST_F(SchemaMapTest, FilterBundle) {
|
| std::string error;
|
| - Schema schema = Schema::Parse(
|
| - "{"
|
| - " \"type\":\"object\","
|
| - " \"properties\": {"
|
| - " \"Array\": {"
|
| - " \"type\": \"array\","
|
| - " \"items\": { \"type\": \"string\" }"
|
| - " },"
|
| - " \"Boolean\": { \"type\": \"boolean\" },"
|
| - " \"Integer\": { \"type\": \"integer\" },"
|
| - " \"Null\": { \"type\": \"null\" },"
|
| - " \"Number\": { \"type\": \"number\" },"
|
| - " \"Object\": {"
|
| - " \"type\": \"object\","
|
| - " \"properties\": {"
|
| - " \"a\": { \"type\": \"string\" },"
|
| - " \"b\": { \"type\": \"integer\" }"
|
| - " }"
|
| - " },"
|
| - " \"String\": { \"type\": \"string\" }"
|
| - " }"
|
| - "}", &error);
|
| + Schema schema = Schema::Parse(kTestSchema, &error);
|
| ASSERT_TRUE(schema.valid()) << error;
|
|
|
| - descriptor->RegisterComponent("abc", schema);
|
| -
|
| - EXPECT_EQ(1u, descriptor->components().size());
|
| - EXPECT_EQ(1u, descriptor->components().count("abc"));
|
| + DomainMap domain_map;
|
| + domain_map[POLICY_DOMAIN_EXTENSIONS]["abc"] = schema;
|
| + scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map);
|
|
|
| PolicyBundle bundle;
|
| - descriptor->FilterBundle(&bundle);
|
| + schema_map->FilterBundle(&bundle);
|
| const PolicyBundle empty_bundle;
|
| EXPECT_TRUE(bundle.Equals(empty_bundle));
|
|
|
| - // Other namespaces aren't filtered.
|
| + // The Chrome namespace isn't filtered.
|
| PolicyBundle expected_bundle;
|
| PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, "");
|
| expected_bundle.Get(chrome_ns).Set("ChromePolicy",
|
| @@ -79,7 +121,8 @@ TEST_F(PolicyDomainDescriptorTest, FilterBundle) {
|
| base::Value::CreateStringValue("value"),
|
| NULL);
|
| bundle.CopyFrom(expected_bundle);
|
| - // Unknown components of the domain are filtered out.
|
| +
|
| + // Unknown components are filtered out.
|
| PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz");
|
| bundle.Get(another_extension_ns).Set(
|
| "AnotherExtensionPolicy",
|
| @@ -87,7 +130,7 @@ TEST_F(PolicyDomainDescriptorTest, FilterBundle) {
|
| POLICY_SCOPE_USER,
|
| base::Value::CreateStringValue("value"),
|
| NULL);
|
| - descriptor->FilterBundle(&bundle);
|
| + schema_map->FilterBundle(&bundle);
|
| EXPECT_TRUE(bundle.Equals(expected_bundle));
|
|
|
| PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc");
|
| @@ -95,22 +138,22 @@ TEST_F(PolicyDomainDescriptorTest, FilterBundle) {
|
| base::ListValue list;
|
| list.AppendString("a");
|
| list.AppendString("b");
|
| - map.Set("Array", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| list.DeepCopy(), NULL);
|
| - map.Set("Boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + map.Set("boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateBooleanValue(true), NULL);
|
| - map.Set("Integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + map.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateIntegerValue(1), NULL);
|
| - map.Set("Null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateNullValue(), NULL);
|
| - map.Set("Number", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateDoubleValue(1.2), NULL);
|
| base::DictionaryValue dict;
|
| dict.SetString("a", "b");
|
| dict.SetInteger("b", 2);
|
| - map.Set("Object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| dict.DeepCopy(), NULL);
|
| - map.Set("String", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + map.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateStringValue("value"), NULL);
|
|
|
| bundle.MergeFrom(expected_bundle);
|
| @@ -120,37 +163,34 @@ TEST_F(PolicyDomainDescriptorTest, FilterBundle) {
|
| base::Value::CreateStringValue("to-be-removed"),
|
| NULL);
|
|
|
| - descriptor->FilterBundle(&bundle);
|
| + schema_map->FilterBundle(&bundle);
|
| EXPECT_TRUE(bundle.Equals(expected_bundle));
|
|
|
| // Mismatched types are also removed.
|
| bundle.Clear();
|
| PolicyMap& badmap = bundle.Get(extension_ns);
|
| - badmap.Set("Array", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + badmap.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateBooleanValue(false), NULL);
|
| - badmap.Set("Boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + badmap.Set("boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateIntegerValue(0), NULL);
|
| - badmap.Set("Integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + badmap.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateBooleanValue(false), NULL);
|
| - badmap.Set("Null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + badmap.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateBooleanValue(false), NULL);
|
| - badmap.Set("Number", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + badmap.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateBooleanValue(false), NULL);
|
| - badmap.Set("Object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + badmap.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| base::Value::CreateBooleanValue(false), NULL);
|
| - badmap.Set("String", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| - NULL, CreateExternalDataFetcher().release());
|
| + badmap.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + NULL,
|
| + new ExternalDataFetcher(base::WeakPtr<ExternalDataManager>(),
|
| + std::string()));
|
|
|
| - descriptor->FilterBundle(&bundle);
|
| + schema_map->FilterBundle(&bundle);
|
| EXPECT_TRUE(bundle.Equals(empty_bundle));
|
| }
|
|
|
| -TEST_F(PolicyDomainDescriptorTest, LegacyComponents) {
|
| - scoped_refptr<PolicyDomainDescriptor> descriptor =
|
| - new PolicyDomainDescriptor(POLICY_DOMAIN_EXTENSIONS);
|
| - EXPECT_EQ(POLICY_DOMAIN_EXTENSIONS, descriptor->domain());
|
| - EXPECT_TRUE(descriptor->components().empty());
|
| -
|
| +TEST_F(SchemaMapTest, LegacyComponents) {
|
| std::string error;
|
| Schema schema = Schema::Parse(
|
| "{"
|
| @@ -161,10 +201,10 @@ TEST_F(PolicyDomainDescriptorTest, LegacyComponents) {
|
| "}", &error);
|
| ASSERT_TRUE(schema.valid()) << error;
|
|
|
| - descriptor->RegisterComponent("with-schema", schema);
|
| - descriptor->RegisterComponent("without-schema", Schema());
|
| -
|
| - EXPECT_EQ(2u, descriptor->components().size());
|
| + DomainMap domain_map;
|
| + domain_map[POLICY_DOMAIN_EXTENSIONS]["with-schema"] = schema;
|
| + domain_map[POLICY_DOMAIN_EXTENSIONS]["without-schema"] = Schema();
|
| + scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map);
|
|
|
| // |bundle| contains policies loaded by a policy provider.
|
| PolicyBundle bundle;
|
| @@ -185,7 +225,7 @@ TEST_F(PolicyDomainDescriptorTest, LegacyComponents) {
|
| base::Value::CreateStringValue("value 2"),
|
| NULL);
|
|
|
| - // Other namespaces aren't filtered.
|
| + // The Chrome namespace isn't filtered.
|
| PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, "");
|
| bundle.Get(chrome_ns).Set("ChromePolicy",
|
| POLICY_LEVEL_MANDATORY,
|
| @@ -211,7 +251,7 @@ TEST_F(PolicyDomainDescriptorTest, LegacyComponents) {
|
| base::Value::CreateStringValue("value 5"),
|
| NULL);
|
|
|
| - descriptor->FilterBundle(&bundle);
|
| + schema_map->FilterBundle(&bundle);
|
| EXPECT_TRUE(bundle.Equals(expected_bundle));
|
| }
|
|
|
|
|