Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 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/policy_map.h" | 5 #include "chrome/browser/policy/policy_map.h" |
| 6 | 6 |
| 7 #include <set> | |
| 8 #include <string> | |
| 9 | |
| 7 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 8 #include "policy/configuration_policy_type.h" | 11 #include "policy/policy_constants.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 13 |
| 11 namespace policy { | 14 namespace policy { |
| 12 | 15 |
| 16 namespace { | |
| 17 | |
| 18 // Utility function for the tests. | |
| 19 void Set(PolicyMap* map, const char* name, Value* value) { | |
|
Mattias Nissler (ping if slow)
2012/01/17 09:52:45
Asking for name clashes.
Joao da Silva
2012/01/17 13:09:29
Renamed to SetPolicy.
| |
| 20 map->Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, value); | |
| 21 } | |
| 22 | |
| 13 TEST(PolicyMapTest, SetAndGet) { | 23 TEST(PolicyMapTest, SetAndGet) { |
| 14 PolicyMap map; | 24 PolicyMap map; |
| 15 map.Set(kPolicyHomepageLocation, Value::CreateStringValue("aaa")); | 25 Set(&map, key::kHomepageLocation, Value::CreateStringValue("aaa")); |
| 16 StringValue expected("aaa"); | 26 StringValue expected("aaa"); |
| 17 EXPECT_TRUE(expected.Equals(map.Get(kPolicyHomepageLocation))); | 27 EXPECT_TRUE(expected.Equals(map.GetValue(key::kHomepageLocation))); |
| 18 map.Set(kPolicyHomepageLocation, Value::CreateStringValue("bbb")); | 28 Set(&map, key::kHomepageLocation, Value::CreateStringValue("bbb")); |
| 19 StringValue expected_b("bbb"); | 29 StringValue expected_b("bbb"); |
| 20 EXPECT_TRUE(expected_b.Equals(map.Get(kPolicyHomepageLocation))); | 30 EXPECT_TRUE(expected_b.Equals(map.GetValue(key::kHomepageLocation))); |
| 31 const PolicyMap::Entry* entry = map.Get(key::kHomepageLocation); | |
| 32 ASSERT_TRUE(entry != NULL); | |
| 33 EXPECT_EQ(POLICY_LEVEL_MANDATORY, entry->level); | |
| 34 EXPECT_EQ(POLICY_SCOPE_USER, entry->scope); | |
| 35 map.Set(key::kHomepageLocation, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_DEVICE, | |
| 36 NULL); | |
| 37 entry = map.Get(key::kHomepageLocation); | |
| 38 ASSERT_TRUE(entry != NULL); | |
| 39 EXPECT_EQ(POLICY_LEVEL_RECOMMENDED, entry->level); | |
| 40 EXPECT_EQ(POLICY_SCOPE_DEVICE, entry->scope); | |
| 21 } | 41 } |
| 22 | 42 |
| 23 TEST(PolicyMapTest, Equals) { | 43 TEST(PolicyMapTest, Equals) { |
| 24 PolicyMap a; | 44 PolicyMap a; |
| 25 a.Set(kPolicyHomepageLocation, Value::CreateStringValue("aaa")); | 45 Set(&a, key::kHomepageLocation, Value::CreateStringValue("aaa")); |
| 26 PolicyMap a2; | 46 PolicyMap a2; |
| 27 a2.Set(kPolicyHomepageLocation, Value::CreateStringValue("aaa")); | 47 Set(&a2, key::kHomepageLocation, Value::CreateStringValue("aaa")); |
| 28 PolicyMap b; | 48 PolicyMap b; |
| 29 b.Set(kPolicyHomepageLocation, Value::CreateStringValue("bbb")); | 49 Set(&b, key::kHomepageLocation, Value::CreateStringValue("bbb")); |
| 30 PolicyMap c; | 50 PolicyMap c; |
| 31 c.Set(kPolicyHomepageLocation, Value::CreateStringValue("aaa")); | 51 Set(&c, key::kHomepageLocation, Value::CreateStringValue("aaa")); |
| 32 c.Set(kPolicyHomepageIsNewTabPage, Value::CreateBooleanValue(true)); | 52 Set(&c, key::kHomepageIsNewTabPage, Value::CreateBooleanValue(true)); |
| 33 EXPECT_FALSE(a.Equals(b)); | 53 EXPECT_FALSE(a.Equals(b)); |
| 34 EXPECT_FALSE(b.Equals(a)); | 54 EXPECT_FALSE(b.Equals(a)); |
| 35 EXPECT_FALSE(a.Equals(c)); | 55 EXPECT_FALSE(a.Equals(c)); |
| 36 EXPECT_FALSE(c.Equals(a)); | 56 EXPECT_FALSE(c.Equals(a)); |
| 37 EXPECT_TRUE(a.Equals(a2)); | 57 EXPECT_TRUE(a.Equals(a2)); |
| 38 EXPECT_TRUE(a2.Equals(a)); | 58 EXPECT_TRUE(a2.Equals(a)); |
| 39 PolicyMap empty1; | 59 PolicyMap empty1; |
| 40 PolicyMap empty2; | 60 PolicyMap empty2; |
| 41 EXPECT_TRUE(empty1.Equals(empty2)); | 61 EXPECT_TRUE(empty1.Equals(empty2)); |
| 42 EXPECT_TRUE(empty2.Equals(empty1)); | 62 EXPECT_TRUE(empty2.Equals(empty1)); |
| 43 EXPECT_FALSE(empty1.Equals(a)); | 63 EXPECT_FALSE(empty1.Equals(a)); |
| 44 EXPECT_FALSE(a.Equals(empty1)); | 64 EXPECT_FALSE(a.Equals(empty1)); |
| 45 } | 65 } |
| 46 | 66 |
| 47 TEST(PolicyMapTest, Swap) { | 67 TEST(PolicyMapTest, Swap) { |
| 48 PolicyMap a; | 68 PolicyMap a; |
| 49 a.Set(kPolicyHomepageLocation, Value::CreateStringValue("aaa")); | 69 Set(&a, key::kHomepageLocation, Value::CreateStringValue("aaa")); |
| 50 PolicyMap b; | 70 PolicyMap b; |
| 51 b.Set(kPolicyHomepageLocation, Value::CreateStringValue("bbb")); | 71 Set(&b, key::kHomepageLocation, Value::CreateStringValue("bbb")); |
| 52 b.Set(kPolicyHomepageIsNewTabPage, Value::CreateBooleanValue(true)); | 72 Set(&b, key::kHomepageIsNewTabPage, Value::CreateBooleanValue(true)); |
| 53 a.Swap(&b); | 73 a.Swap(&b); |
| 54 base::StringValue expected("bbb"); | 74 base::StringValue expected("bbb"); |
| 55 EXPECT_TRUE(expected.Equals(a.Get(kPolicyHomepageLocation))); | 75 EXPECT_TRUE(expected.Equals(a.GetValue(key::kHomepageLocation))); |
| 56 base::FundamentalValue expected_bool(true); | 76 base::FundamentalValue expected_bool(true); |
| 57 EXPECT_TRUE(expected_bool.Equals(a.Get(kPolicyHomepageIsNewTabPage))); | 77 EXPECT_TRUE(expected_bool.Equals(a.GetValue(key::kHomepageIsNewTabPage))); |
| 58 StringValue expected_a("aaa"); | 78 StringValue expected_a("aaa"); |
| 59 EXPECT_TRUE(expected_a.Equals(b.Get(kPolicyHomepageLocation))); | 79 EXPECT_TRUE(expected_a.Equals(b.GetValue(key::kHomepageLocation))); |
| 60 | 80 |
| 61 b.Clear(); | 81 b.Clear(); |
| 62 a.Swap(&b); | 82 a.Swap(&b); |
| 63 PolicyMap empty; | 83 PolicyMap empty; |
| 64 EXPECT_TRUE(a.Equals(empty)); | 84 EXPECT_TRUE(a.Equals(empty)); |
| 65 EXPECT_FALSE(b.Equals(empty)); | 85 EXPECT_FALSE(b.Equals(empty)); |
| 66 } | 86 } |
| 67 | 87 |
| 88 TEST(PolicyMapTest, MergeFrom) { | |
| 89 PolicyMap a; | |
| 90 a.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 91 Value::CreateStringValue("google.com")); | |
| 92 a.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_DEVICE, | |
| 93 Value::CreateBooleanValue(true)); | |
| 94 a.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | |
| 95 Value::CreateBooleanValue(false)); | |
| 96 a.Set(key::kDefaultSearchProviderSearchURL, POLICY_LEVEL_RECOMMENDED, | |
| 97 POLICY_SCOPE_DEVICE, Value::CreateStringValue("google.com/q={x}")); | |
| 98 | |
| 99 PolicyMap b; | |
| 100 b.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_DEVICE, | |
| 101 Value::CreateStringValue("chromium.org")); | |
| 102 b.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_DEVICE, | |
| 103 Value::CreateBooleanValue(false)); | |
| 104 b.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_DEVICE, | |
| 105 Value::CreateBooleanValue(true)); | |
| 106 b.Set(key::kDefaultSearchProviderSearchURL, POLICY_LEVEL_MANDATORY, | |
| 107 POLICY_SCOPE_DEVICE, Value::CreateStringValue("")); | |
| 108 b.Set(key::kDisableSpdy, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | |
| 109 Value::CreateBooleanValue(true)); | |
| 110 | |
| 111 a.MergeFrom(b); | |
| 112 | |
| 113 PolicyMap c; | |
| 114 // POLICY_SCOPE_DEVICE over POLICY_SCOPE_USER. | |
| 115 c.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_DEVICE, | |
| 116 Value::CreateStringValue("chromium.org")); | |
| 117 // |a| has precedence over |b|. | |
| 118 c.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_DEVICE, | |
| 119 Value::CreateBooleanValue(true)); | |
| 120 // POLICY_SCOPE_DEVICE over POLICY_SCOPE_USER for POLICY_LEVEL_RECOMMENDED. | |
| 121 c.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_DEVICE, | |
| 122 Value::CreateBooleanValue(true)); | |
| 123 // POLICY_LEVEL_MANDATORY over POLICY_LEVEL_RECOMMENDED. | |
| 124 c.Set(key::kDefaultSearchProviderSearchURL, POLICY_LEVEL_MANDATORY, | |
| 125 POLICY_SCOPE_DEVICE, Value::CreateStringValue("")); | |
| 126 // Merge new ones. | |
| 127 c.Set(key::kDisableSpdy, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | |
| 128 Value::CreateBooleanValue(true)); | |
| 129 | |
| 130 EXPECT_TRUE(a.Equals(c)); | |
| 131 } | |
| 132 | |
| 133 TEST(PolicyMapTest, GetDifferingKeys) { | |
| 134 PolicyMap a; | |
| 135 a.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 136 Value::CreateStringValue("google.com")); | |
| 137 a.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_DEVICE, | |
| 138 Value::CreateBooleanValue(true)); | |
| 139 a.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | |
| 140 Value::CreateBooleanValue(false)); | |
| 141 a.Set(key::kDefaultSearchProviderSearchURL, POLICY_LEVEL_RECOMMENDED, | |
| 142 POLICY_SCOPE_DEVICE, Value::CreateStringValue("google.com/q={x}")); | |
| 143 a.Set(key::kDisable3DAPIs, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 144 Value::CreateBooleanValue(true)); | |
| 145 | |
| 146 PolicyMap b; | |
| 147 b.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 148 Value::CreateStringValue("google.com")); | |
| 149 b.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_DEVICE, | |
| 150 Value::CreateBooleanValue(false)); | |
| 151 b.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
| 152 Value::CreateBooleanValue(false)); | |
| 153 b.Set(key::kDefaultSearchProviderSearchURL, POLICY_LEVEL_RECOMMENDED, | |
| 154 POLICY_SCOPE_USER, Value::CreateStringValue("google.com/q={x}")); | |
| 155 b.Set(key::kDisableSpdy, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | |
| 156 Value::CreateBooleanValue(true)); | |
| 157 | |
| 158 std::set<std::string> diff; | |
| 159 std::set<std::string> diff2; | |
| 160 a.GetDifferingKeys(b, &diff); | |
| 161 b.GetDifferingKeys(a, &diff2); | |
| 162 // Order shouldn't matter. | |
| 163 EXPECT_EQ(diff, diff2); | |
| 164 // No change. | |
| 165 EXPECT_TRUE(diff.find(key::kHomepageLocation) == diff.end()); | |
| 166 // Different values. | |
| 167 EXPECT_TRUE(diff.find(key::kShowHomeButton) != diff.end()); | |
| 168 // Different levels. | |
| 169 EXPECT_TRUE(diff.find(key::kBookmarkBarEnabled) != diff.end()); | |
| 170 // Different scopes. | |
| 171 EXPECT_TRUE(diff.find(key::kDefaultSearchProviderSearchURL) != diff.end()); | |
| 172 // Not in |a|. | |
| 173 EXPECT_TRUE(diff.find(key::kDisableSpdy) != diff.end()); | |
| 174 // Not in |b|. | |
| 175 EXPECT_TRUE(diff.find(key::kDisable3DAPIs) != diff.end()); | |
| 176 // No surprises. | |
| 177 EXPECT_EQ(5u, diff.size()); | |
| 178 } | |
| 179 | |
| 180 } // namespace | |
| 181 | |
| 68 } // namespace policy | 182 } // namespace policy |
| OLD | NEW |