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 | 9 |
9 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/memory/ptr_util.h" |
10 #include "base/values.h" | 12 #include "base/values.h" |
11 #include "components/policy/core/common/external_data_fetcher.h" | 13 #include "components/policy/core/common/external_data_fetcher.h" |
12 #include "components/policy/core/common/policy_map.h" | 14 #include "components/policy/core/common/policy_map.h" |
13 #include "components/policy/core/common/policy_types.h" | 15 #include "components/policy/core/common/policy_types.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
15 | 17 |
16 namespace policy { | 18 namespace policy { |
17 | 19 |
18 namespace { | 20 namespace { |
19 | 21 |
20 const char kPolicyClashing0[] = "policy-clashing-0"; | 22 const char kPolicyClashing0[] = "policy-clashing-0"; |
21 const char kPolicyClashing1[] = "policy-clashing-1"; | 23 const char kPolicyClashing1[] = "policy-clashing-1"; |
22 const char kPolicy0[] = "policy-0"; | 24 const char kPolicy0[] = "policy-0"; |
23 const char kPolicy1[] = "policy-1"; | 25 const char kPolicy1[] = "policy-1"; |
24 const char kPolicy2[] = "policy-2"; | 26 const char kPolicy2[] = "policy-2"; |
25 const char kExtension0[] = "extension-0"; | 27 const char kExtension0[] = "extension-0"; |
26 const char kExtension1[] = "extension-1"; | 28 const char kExtension1[] = "extension-1"; |
27 const char kExtension2[] = "extension-2"; | 29 const char kExtension2[] = "extension-2"; |
28 const char kExtension3[] = "extension-3"; | 30 const char kExtension3[] = "extension-3"; |
29 | 31 |
30 // Adds test policies to |policy|. | 32 // Adds test policies to |policy|. |
31 void AddTestPolicies(PolicyMap* policy) { | 33 void AddTestPolicies(PolicyMap* policy) { |
32 policy->Set("mandatory-user", | 34 policy->Set("mandatory-user", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
33 POLICY_LEVEL_MANDATORY, | |
34 POLICY_SCOPE_USER, | |
35 POLICY_SOURCE_CLOUD, | 35 POLICY_SOURCE_CLOUD, |
36 new base::FundamentalValue(123), | 36 base::WrapUnique(new base::FundamentalValue(123)), nullptr); |
37 NULL); | 37 policy->Set("mandatory-machine", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
38 policy->Set("mandatory-machine", | |
39 POLICY_LEVEL_MANDATORY, | |
40 POLICY_SCOPE_MACHINE, | |
41 POLICY_SOURCE_CLOUD, | 38 POLICY_SOURCE_CLOUD, |
42 new base::StringValue("omg"), | 39 base::WrapUnique(new base::StringValue("omg")), nullptr); |
43 NULL); | 40 policy->Set("recommended-user", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, |
44 policy->Set("recommended-user", | |
45 POLICY_LEVEL_RECOMMENDED, | |
46 POLICY_SCOPE_USER, | |
47 POLICY_SOURCE_CLOUD, | 41 POLICY_SOURCE_CLOUD, |
48 new base::FundamentalValue(true), | 42 base::WrapUnique(new base::FundamentalValue(true)), nullptr); |
49 NULL); | 43 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
50 base::DictionaryValue* dict = new base::DictionaryValue(); | |
51 dict->SetBoolean("false", false); | 44 dict->SetBoolean("false", false); |
52 dict->SetInteger("int", 456); | 45 dict->SetInteger("int", 456); |
53 dict->SetString("str", "bbq"); | 46 dict->SetString("str", "bbq"); |
54 policy->Set("recommended-machine", POLICY_LEVEL_RECOMMENDED, | 47 policy->Set("recommended-machine", POLICY_LEVEL_RECOMMENDED, |
55 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, dict, nullptr); | 48 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(dict), |
| 49 nullptr); |
56 } | 50 } |
57 | 51 |
58 // Adds test policies to |policy| based on the parameters: | 52 // Adds test policies to |policy| based on the parameters: |
59 // - kPolicyClashing0 mapped to |value|, user mandatory | 53 // - kPolicyClashing0 mapped to |value|, user mandatory |
60 // - kPolicyClashing1 mapped to |value|, with |level| and |scope| | 54 // - kPolicyClashing1 mapped to |value|, with |level| and |scope| |
61 // - |name| mapped to |value|, user mandatory | 55 // - |name| mapped to |value|, user mandatory |
62 void AddTestPoliciesWithParams(PolicyMap *policy, | 56 void AddTestPoliciesWithParams(PolicyMap *policy, |
63 const char* name, | 57 const char* name, |
64 int value, | 58 int value, |
65 PolicyLevel level, | 59 PolicyLevel level, |
66 PolicyScope scope) { | 60 PolicyScope scope) { |
67 policy->Set(kPolicyClashing0, | 61 policy->Set(kPolicyClashing0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
68 POLICY_LEVEL_MANDATORY, | |
69 POLICY_SCOPE_USER, | |
70 POLICY_SOURCE_CLOUD, | 62 POLICY_SOURCE_CLOUD, |
71 new base::FundamentalValue(value), | 63 base::WrapUnique(new base::FundamentalValue(value)), nullptr); |
72 NULL); | |
73 policy->Set(kPolicyClashing1, level, scope, POLICY_SOURCE_CLOUD, | 64 policy->Set(kPolicyClashing1, level, scope, POLICY_SOURCE_CLOUD, |
74 new base::FundamentalValue(value), nullptr); | 65 base::WrapUnique(new base::FundamentalValue(value)), nullptr); |
75 policy->Set(name, | 66 policy->Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
76 POLICY_LEVEL_MANDATORY, | |
77 POLICY_SCOPE_USER, | |
78 POLICY_SOURCE_CLOUD, | 67 POLICY_SOURCE_CLOUD, |
79 new base::FundamentalValue(value), | 68 base::WrapUnique(new base::FundamentalValue(value)), nullptr); |
80 NULL); | |
81 } | 69 } |
82 | 70 |
83 // Returns true if |bundle| is empty. | 71 // Returns true if |bundle| is empty. |
84 bool IsEmpty(const PolicyBundle& bundle) { | 72 bool IsEmpty(const PolicyBundle& bundle) { |
85 return bundle.begin() == bundle.end(); | 73 return bundle.begin() == bundle.end(); |
86 } | 74 } |
87 | 75 |
88 } // namespace | 76 } // namespace |
89 | 77 |
90 TEST(PolicyBundleTest, Get) { | 78 TEST(PolicyBundleTest, Get) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 merged.MergeFrom(bundle2); | 185 merged.MergeFrom(bundle2); |
198 PolicyBundle empty_bundle; | 186 PolicyBundle empty_bundle; |
199 merged.MergeFrom(empty_bundle); | 187 merged.MergeFrom(empty_bundle); |
200 | 188 |
201 // chrome and kExtension3 policies are merged: | 189 // chrome and kExtension3 policies are merged: |
202 // - kPolicyClashing0 comes from bundle0, which has the highest priority; | 190 // - kPolicyClashing0 comes from bundle0, which has the highest priority; |
203 // - kPolicyClashing1 comes from bundle1, which has the highest level/scope | 191 // - kPolicyClashing1 comes from bundle1, which has the highest level/scope |
204 // combination; | 192 // combination; |
205 // - kPolicyN are merged from each bundle. | 193 // - kPolicyN are merged from each bundle. |
206 PolicyMap expected; | 194 PolicyMap expected; |
207 expected.Set(kPolicyClashing0, | 195 expected.Set(kPolicyClashing0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
208 POLICY_LEVEL_MANDATORY, | |
209 POLICY_SCOPE_USER, | |
210 POLICY_SOURCE_CLOUD, | 196 POLICY_SOURCE_CLOUD, |
211 new base::FundamentalValue(0), | 197 base::WrapUnique(new base::FundamentalValue(0)), nullptr); |
212 NULL); | 198 expected.Set(kPolicyClashing1, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
213 expected.Set(kPolicyClashing1, | |
214 POLICY_LEVEL_MANDATORY, | |
215 POLICY_SCOPE_MACHINE, | |
216 POLICY_SOURCE_CLOUD, | 199 POLICY_SOURCE_CLOUD, |
217 new base::FundamentalValue(1), | 200 base::WrapUnique(new base::FundamentalValue(1)), nullptr); |
218 NULL); | 201 expected.Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
219 expected.Set(kPolicy0, | |
220 POLICY_LEVEL_MANDATORY, | |
221 POLICY_SCOPE_USER, | |
222 POLICY_SOURCE_CLOUD, | 202 POLICY_SOURCE_CLOUD, |
223 new base::FundamentalValue(0), | 203 base::WrapUnique(new base::FundamentalValue(0)), nullptr); |
224 NULL); | 204 expected.Set(kPolicy1, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
225 expected.Set(kPolicy1, | |
226 POLICY_LEVEL_MANDATORY, | |
227 POLICY_SCOPE_USER, | |
228 POLICY_SOURCE_CLOUD, | 205 POLICY_SOURCE_CLOUD, |
229 new base::FundamentalValue(1), | 206 base::WrapUnique(new base::FundamentalValue(1)), nullptr); |
230 NULL); | 207 expected.Set(kPolicy2, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
231 expected.Set(kPolicy2, | |
232 POLICY_LEVEL_MANDATORY, | |
233 POLICY_SCOPE_USER, | |
234 POLICY_SOURCE_CLOUD, | 208 POLICY_SOURCE_CLOUD, |
235 new base::FundamentalValue(2), | 209 base::WrapUnique(new base::FundamentalValue(2)), nullptr); |
236 NULL); | |
237 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, | 210 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, |
238 std::string())).Equals(expected)); | 211 std::string())).Equals(expected)); |
239 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 212 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
240 kExtension3)).Equals(expected)); | 213 kExtension3)).Equals(expected)); |
241 // extension0 comes only from bundle0. | 214 // extension0 comes only from bundle0. |
242 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 215 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
243 kExtension0)).Equals(policy0)); | 216 kExtension0)).Equals(policy0)); |
244 // extension1 comes only from bundle1. | 217 // extension1 comes only from bundle1. |
245 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, | 218 EXPECT_TRUE(merged.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, |
246 kExtension1)).Equals(policy1)); | 219 kExtension1)).Equals(policy1)); |
(...skipping 18 matching lines...) Expand all Loading... |
265 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1))); | 238 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension1))); |
266 EXPECT_FALSE(bundle.Equals(other)); | 239 EXPECT_FALSE(bundle.Equals(other)); |
267 other.CopyFrom(bundle); | 240 other.CopyFrom(bundle); |
268 EXPECT_TRUE(bundle.Equals(other)); | 241 EXPECT_TRUE(bundle.Equals(other)); |
269 AddTestPolicies(&other.Get( | 242 AddTestPolicies(&other.Get( |
270 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2))); | 243 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kExtension2))); |
271 EXPECT_FALSE(bundle.Equals(other)); | 244 EXPECT_FALSE(bundle.Equals(other)); |
272 | 245 |
273 other.CopyFrom(bundle); | 246 other.CopyFrom(bundle); |
274 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 247 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
275 .Set(kPolicy0, | 248 .Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
276 POLICY_LEVEL_MANDATORY, | |
277 POLICY_SCOPE_USER, | |
278 POLICY_SOURCE_CLOUD, | 249 POLICY_SOURCE_CLOUD, |
279 new base::FundamentalValue(123), | 250 base::WrapUnique(new base::FundamentalValue(123)), nullptr); |
280 NULL); | |
281 EXPECT_FALSE(bundle.Equals(other)); | 251 EXPECT_FALSE(bundle.Equals(other)); |
282 other.CopyFrom(bundle); | 252 other.CopyFrom(bundle); |
283 EXPECT_TRUE(bundle.Equals(other)); | 253 EXPECT_TRUE(bundle.Equals(other)); |
284 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) | 254 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) |
285 .Set(kPolicy0, | 255 .Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, |
286 POLICY_LEVEL_MANDATORY, | |
287 POLICY_SCOPE_MACHINE, | |
288 POLICY_SOURCE_CLOUD, | 256 POLICY_SOURCE_CLOUD, |
289 new base::FundamentalValue(123), | 257 base::WrapUnique(new base::FundamentalValue(123)), nullptr); |
290 NULL); | |
291 EXPECT_FALSE(bundle.Equals(other)); | 258 EXPECT_FALSE(bundle.Equals(other)); |
292 | 259 |
293 // Test non-const Get(). | 260 // Test non-const Get(). |
294 bundle.Clear(); | 261 bundle.Clear(); |
295 other.Clear(); | 262 other.Clear(); |
296 PolicyMap& policy_map = | 263 PolicyMap& policy_map = |
297 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 264 bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
298 EXPECT_TRUE(bundle.Equals(other)); | 265 EXPECT_TRUE(bundle.Equals(other)); |
299 policy_map.Set(kPolicy0, | 266 policy_map.Set(kPolicy0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
300 POLICY_LEVEL_MANDATORY, | |
301 POLICY_SCOPE_USER, | |
302 POLICY_SOURCE_CLOUD, | 267 POLICY_SOURCE_CLOUD, |
303 new base::FundamentalValue(123), | 268 base::WrapUnique(new base::FundamentalValue(123)), nullptr); |
304 NULL); | |
305 EXPECT_FALSE(bundle.Equals(other)); | 269 EXPECT_FALSE(bundle.Equals(other)); |
306 } | 270 } |
307 | 271 |
308 } // namespace policy | 272 } // namespace policy |
OLD | NEW |