OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/policy/core/common/policy_bundle.h" | 5 #include "components/policy/core/common/policy_bundle.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 const char kPolicy1[] = "policy-1"; | 25 const char kPolicy1[] = "policy-1"; |
26 const char kPolicy2[] = "policy-2"; | 26 const char kPolicy2[] = "policy-2"; |
27 const char kExtension0[] = "extension-0"; | 27 const char kExtension0[] = "extension-0"; |
28 const char kExtension1[] = "extension-1"; | 28 const char kExtension1[] = "extension-1"; |
29 const char kExtension2[] = "extension-2"; | 29 const char kExtension2[] = "extension-2"; |
30 const char kExtension3[] = "extension-3"; | 30 const char kExtension3[] = "extension-3"; |
31 | 31 |
32 // Adds test policies to |policy|. | 32 // Adds test policies to |policy|. |
33 void AddTestPolicies(PolicyMap* policy) { | 33 void AddTestPolicies(PolicyMap* policy) { |
34 policy->Set("mandatory-user", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 34 policy->Set("mandatory-user", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
35 POLICY_SOURCE_CLOUD, | 35 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(123), nullptr); |
36 base::MakeUnique<base::FundamentalValue>(123), nullptr); | |
37 policy->Set("mandatory-machine", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 36 policy->Set("mandatory-machine", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
38 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("omg"), | 37 POLICY_SOURCE_CLOUD, base::MakeUnique<base::StringValue>("omg"), |
39 nullptr); | 38 nullptr); |
40 policy->Set("recommended-user", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, | 39 policy->Set("recommended-user", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
41 POLICY_SOURCE_CLOUD, | 40 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(true), |
42 base::MakeUnique<base::FundamentalValue>(true), nullptr); | 41 nullptr); |
43 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 42 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
44 dict->SetBoolean("false", false); | 43 dict->SetBoolean("false", false); |
45 dict->SetInteger("int", 456); | 44 dict->SetInteger("int", 456); |
46 dict->SetString("str", "bbq"); | 45 dict->SetString("str", "bbq"); |
47 policy->Set("recommended-machine", POLICY_LEVEL_RECOMMENDED, | 46 policy->Set("recommended-machine", POLICY_LEVEL_RECOMMENDED, |
48 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(dict), | 47 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(dict), |
49 nullptr); | 48 nullptr); |
50 } | 49 } |
51 | 50 |
52 // Adds test policies to |policy| based on the parameters: | 51 // Adds test policies to |policy| based on the parameters: |
53 // - kPolicyClashing0 mapped to |value|, user mandatory | 52 // - kPolicyClashing0 mapped to |value|, user mandatory |
54 // - kPolicyClashing1 mapped to |value|, with |level| and |scope| | 53 // - kPolicyClashing1 mapped to |value|, with |level| and |scope| |
55 // - |name| mapped to |value|, user mandatory | 54 // - |name| mapped to |value|, user mandatory |
56 void AddTestPoliciesWithParams(PolicyMap *policy, | 55 void AddTestPoliciesWithParams(PolicyMap *policy, |
57 const char* name, | 56 const char* name, |
58 int value, | 57 int value, |
59 PolicyLevel level, | 58 PolicyLevel level, |
60 PolicyScope scope) { | 59 PolicyScope scope) { |
61 policy->Set(kPolicyClashing0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 60 policy->Set(kPolicyClashing0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
62 POLICY_SOURCE_CLOUD, | 61 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(value), |
63 base::MakeUnique<base::FundamentalValue>(value), nullptr); | 62 nullptr); |
64 policy->Set(kPolicyClashing1, level, scope, POLICY_SOURCE_CLOUD, | 63 policy->Set(kPolicyClashing1, level, scope, POLICY_SOURCE_CLOUD, |
65 base::MakeUnique<base::FundamentalValue>(value), nullptr); | 64 base::MakeUnique<base::Value>(value), nullptr); |
66 policy->Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 65 policy->Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
67 POLICY_SOURCE_CLOUD, | 66 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(value), |
68 base::MakeUnique<base::FundamentalValue>(value), nullptr); | 67 nullptr); |
69 } | 68 } |
70 | 69 |
71 // Returns true if |bundle| is empty. | 70 // Returns true if |bundle| is empty. |
72 bool IsEmpty(const PolicyBundle& bundle) { | 71 bool IsEmpty(const PolicyBundle& bundle) { |
73 return bundle.begin() == bundle.end(); | 72 return bundle.begin() == bundle.end(); |
74 } | 73 } |
75 | 74 |
76 } // namespace | 75 } // namespace |
77 | 76 |
78 TEST(PolicyBundleTest, Get) { | 77 TEST(PolicyBundleTest, Get) { |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 PolicyBundle empty_bundle; | 185 PolicyBundle empty_bundle; |
187 merged.MergeFrom(empty_bundle); | 186 merged.MergeFrom(empty_bundle); |
188 | 187 |
189 // chrome and kExtension3 policies are merged: | 188 // chrome and kExtension3 policies are merged: |
190 // - kPolicyClashing0 comes from bundle0, which has the highest priority; | 189 // - kPolicyClashing0 comes from bundle0, which has the highest priority; |
191 // - kPolicyClashing1 comes from bundle1, which has the highest level/scope | 190 // - kPolicyClashing1 comes from bundle1, which has the highest level/scope |
192 // combination; | 191 // combination; |
193 // - kPolicyN are merged from each bundle. | 192 // - kPolicyN are merged from each bundle. |
194 PolicyMap expected; | 193 PolicyMap expected; |
195 expected.Set(kPolicyClashing0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 194 expected.Set(kPolicyClashing0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
196 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(0), | 195 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(0), nullptr); |
197 nullptr); | |
198 expected.Set(kPolicyClashing1, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 196 expected.Set(kPolicyClashing1, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
199 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 197 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), nullptr); |
200 nullptr); | |
201 expected.Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 198 expected.Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
202 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(0), | 199 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(0), nullptr); |
203 nullptr); | |
204 expected.Set(kPolicy1, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 200 expected.Set(kPolicy1, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
205 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(1), | 201 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(1), nullptr); |
206 nullptr); | |
207 expected.Set(kPolicy2, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 202 expected.Set(kPolicy2, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
208 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(2), | 203 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(2), nullptr); |
209 nullptr); | |
210 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, | 204 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, |
211 std::string())).Equals(expected)); | 205 std::string())).Equals(expected)); |
212 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 206 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
213 kExtension3)).Equals(expected)); | 207 kExtension3)).Equals(expected)); |
214 // extension0 comes only from bundle0. | 208 // extension0 comes only from bundle0. |
215 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 209 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
216 kExtension0)).Equals(policy0)); | 210 kExtension0)).Equals(policy0)); |
217 // extension1 comes only from bundle1. | 211 // extension1 comes only from bundle1. |
218 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 212 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
219 kExtension1)).Equals(policy1)); | 213 kExtension1)).Equals(policy1)); |
(...skipping 19 matching lines...) Expand all Loading... |
239 EXPECT_FALSE(bundle.Equals(other)); | 233 EXPECT_FALSE(bundle.Equals(other)); |
240 other.CopyFrom(bundle); | 234 other.CopyFrom(bundle); |
241 EXPECT_TRUE(bundle.Equals(other)); | 235 EXPECT_TRUE(bundle.Equals(other)); |
242 AddTestPolicies(&other.Get( | 236 AddTestPolicies(&other.Get( |
243 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2))); | 237 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2))); |
244 EXPECT_FALSE(bundle.Equals(other)); | 238 EXPECT_FALSE(bundle.Equals(other)); |
245 | 239 |
246 other.CopyFrom(bundle); | 240 other.CopyFrom(bundle); |
247 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 241 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
248 .Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 242 .Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
249 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(123), | 243 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(123), nullptr); |
250 nullptr); | |
251 EXPECT_FALSE(bundle.Equals(other)); | 244 EXPECT_FALSE(bundle.Equals(other)); |
252 other.CopyFrom(bundle); | 245 other.CopyFrom(bundle); |
253 EXPECT_TRUE(bundle.Equals(other)); | 246 EXPECT_TRUE(bundle.Equals(other)); |
254 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 247 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
255 .Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, | 248 .Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
256 POLICY_SOURCE_CLOUD, base::MakeUnique<base::FundamentalValue>(123), | 249 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(123), nullptr); |
257 nullptr); | |
258 EXPECT_FALSE(bundle.Equals(other)); | 250 EXPECT_FALSE(bundle.Equals(other)); |
259 | 251 |
260 // Test non-const Get(). | 252 // Test non-const Get(). |
261 bundle.Clear(); | 253 bundle.Clear(); |
262 other.Clear(); | 254 other.Clear(); |
263 PolicyMap& policy_map = | 255 PolicyMap& policy_map = |
264 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 256 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
265 EXPECT_TRUE(bundle.Equals(other)); | 257 EXPECT_TRUE(bundle.Equals(other)); |
266 policy_map.Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 258 policy_map.Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
267 POLICY_SOURCE_CLOUD, | 259 POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(123), |
268 base::MakeUnique<base::FundamentalValue>(123), nullptr); | 260 nullptr); |
269 EXPECT_FALSE(bundle.Equals(other)); | 261 EXPECT_FALSE(bundle.Equals(other)); |
270 } | 262 } |
271 | 263 |
272 } // namespace policy | 264 } // namespace policy |
OLD | NEW |