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/schema_map.h" | 5 #include "components/policy/core/common/schema_map.h" |
6 | 6 |
7 #include "base/memory/weak_ptr.h" | 7 #include "base/memory/weak_ptr.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "components/policy/core/common/external_data_fetcher.h" | 9 #include "components/policy/core/common/external_data_fetcher.h" |
10 #include "components/policy/core/common/external_data_manager.h" | 10 #include "components/policy/core/common/external_data_manager.h" |
11 #include "components/policy/core/common/policy_bundle.h" | 11 #include "components/policy/core/common/policy_bundle.h" |
12 #include "components/policy/core/common/policy_map.h" | 12 #include "components/policy/core/common/policy_map.h" |
13 #include "components/policy/core/common/policy_types.h" | |
14 #include "components/policy/core/common/schema.h" | 13 #include "components/policy/core/common/schema.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
16 | 15 |
17 namespace policy { | 16 namespace policy { |
18 | 17 |
19 namespace { | 18 namespace { |
20 | 19 |
21 const char kTestSchema[] = | 20 const char kTestSchema[] = |
22 "{" | 21 "{" |
23 " \"type\": \"object\"," | 22 " \"type\": \"object\"," |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 schema_map->FilterBundle(&bundle); | 134 schema_map->FilterBundle(&bundle); |
136 const PolicyBundle empty_bundle; | 135 const PolicyBundle empty_bundle; |
137 EXPECT_TRUE(bundle.Equals(empty_bundle)); | 136 EXPECT_TRUE(bundle.Equals(empty_bundle)); |
138 | 137 |
139 // The Chrome namespace isn't filtered. | 138 // The Chrome namespace isn't filtered. |
140 PolicyBundle expected_bundle; | 139 PolicyBundle expected_bundle; |
141 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 140 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
142 expected_bundle.Get(chrome_ns).Set("ChromePolicy", | 141 expected_bundle.Get(chrome_ns).Set("ChromePolicy", |
143 POLICY_LEVEL_MANDATORY, | 142 POLICY_LEVEL_MANDATORY, |
144 POLICY_SCOPE_USER, | 143 POLICY_SCOPE_USER, |
145 POLICY_SOURCE_CLOUD, | |
146 new base::StringValue("value"), | 144 new base::StringValue("value"), |
147 NULL); | 145 NULL); |
148 bundle.CopyFrom(expected_bundle); | 146 bundle.CopyFrom(expected_bundle); |
149 | 147 |
150 // Unknown components are filtered out. | 148 // Unknown components are filtered out. |
151 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 149 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); |
152 bundle.Get(another_extension_ns).Set("AnotherExtensionPolicy", | 150 bundle.Get(another_extension_ns).Set("AnotherExtensionPolicy", |
153 POLICY_LEVEL_MANDATORY, | 151 POLICY_LEVEL_MANDATORY, |
154 POLICY_SCOPE_USER, | 152 POLICY_SCOPE_USER, |
155 POLICY_SOURCE_CLOUD, | |
156 new base::StringValue("value"), | 153 new base::StringValue("value"), |
157 NULL); | 154 NULL); |
158 schema_map->FilterBundle(&bundle); | 155 schema_map->FilterBundle(&bundle); |
159 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 156 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
160 | 157 |
161 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc"); | 158 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc"); |
162 PolicyMap& map = expected_bundle.Get(extension_ns); | 159 PolicyMap& map = expected_bundle.Get(extension_ns); |
163 base::ListValue list; | 160 base::ListValue list; |
164 list.AppendString("a"); | 161 list.AppendString("a"); |
165 list.AppendString("b"); | 162 list.AppendString("b"); |
166 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 163 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
167 POLICY_SOURCE_CLOUD, list.DeepCopy(), nullptr); | 164 list.DeepCopy(), NULL); |
168 map.Set("boolean", | 165 map.Set("boolean", |
169 POLICY_LEVEL_MANDATORY, | 166 POLICY_LEVEL_MANDATORY, |
170 POLICY_SCOPE_USER, | 167 POLICY_SCOPE_USER, |
171 POLICY_SOURCE_CLOUD, | |
172 new base::FundamentalValue(true), | 168 new base::FundamentalValue(true), |
173 NULL); | 169 NULL); |
174 map.Set("integer", | 170 map.Set("integer", |
175 POLICY_LEVEL_MANDATORY, | 171 POLICY_LEVEL_MANDATORY, |
176 POLICY_SCOPE_USER, | 172 POLICY_SCOPE_USER, |
177 POLICY_SOURCE_CLOUD, | |
178 new base::FundamentalValue(1), | 173 new base::FundamentalValue(1), |
179 NULL); | 174 NULL); |
180 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 175 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
181 POLICY_SOURCE_CLOUD, base::Value::CreateNullValue().release(), | 176 base::Value::CreateNullValue().release(), NULL); |
182 nullptr); | |
183 map.Set("double", | 177 map.Set("double", |
184 POLICY_LEVEL_MANDATORY, | 178 POLICY_LEVEL_MANDATORY, |
185 POLICY_SCOPE_USER, | 179 POLICY_SCOPE_USER, |
186 POLICY_SOURCE_CLOUD, | |
187 new base::FundamentalValue(1.2), | 180 new base::FundamentalValue(1.2), |
188 NULL); | 181 NULL); |
189 base::DictionaryValue dict; | 182 base::DictionaryValue dict; |
190 dict.SetString("a", "b"); | 183 dict.SetString("a", "b"); |
191 dict.SetInteger("b", 2); | 184 dict.SetInteger("b", 2); |
192 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 185 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
193 POLICY_SOURCE_CLOUD, dict.DeepCopy(), nullptr); | 186 dict.DeepCopy(), NULL); |
194 map.Set("string", | 187 map.Set("string", |
195 POLICY_LEVEL_MANDATORY, | 188 POLICY_LEVEL_MANDATORY, |
196 POLICY_SCOPE_USER, | 189 POLICY_SCOPE_USER, |
197 POLICY_SOURCE_CLOUD, | |
198 new base::StringValue("value"), | 190 new base::StringValue("value"), |
199 NULL); | 191 NULL); |
200 | 192 |
201 bundle.MergeFrom(expected_bundle); | 193 bundle.MergeFrom(expected_bundle); |
202 bundle.Get(extension_ns).Set("Unexpected", | 194 bundle.Get(extension_ns).Set("Unexpected", |
203 POLICY_LEVEL_MANDATORY, | 195 POLICY_LEVEL_MANDATORY, |
204 POLICY_SCOPE_USER, | 196 POLICY_SCOPE_USER, |
205 POLICY_SOURCE_CLOUD, | |
206 new base::StringValue("to-be-removed"), | 197 new base::StringValue("to-be-removed"), |
207 NULL); | 198 NULL); |
208 | 199 |
209 schema_map->FilterBundle(&bundle); | 200 schema_map->FilterBundle(&bundle); |
210 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 201 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
211 | 202 |
212 // Mismatched types are also removed. | 203 // Mismatched types are also removed. |
213 bundle.Clear(); | 204 bundle.Clear(); |
214 PolicyMap& badmap = bundle.Get(extension_ns); | 205 PolicyMap& badmap = bundle.Get(extension_ns); |
215 badmap.Set("list", | 206 badmap.Set("list", |
216 POLICY_LEVEL_MANDATORY, | 207 POLICY_LEVEL_MANDATORY, |
217 POLICY_SCOPE_USER, | 208 POLICY_SCOPE_USER, |
218 POLICY_SOURCE_CLOUD, | |
219 new base::FundamentalValue(false), | 209 new base::FundamentalValue(false), |
220 NULL); | 210 NULL); |
221 badmap.Set("boolean", | 211 badmap.Set("boolean", |
222 POLICY_LEVEL_MANDATORY, | 212 POLICY_LEVEL_MANDATORY, |
223 POLICY_SCOPE_USER, | 213 POLICY_SCOPE_USER, |
224 POLICY_SOURCE_CLOUD, | |
225 new base::FundamentalValue(0), | 214 new base::FundamentalValue(0), |
226 NULL); | 215 NULL); |
227 badmap.Set("integer", | 216 badmap.Set("integer", |
228 POLICY_LEVEL_MANDATORY, | 217 POLICY_LEVEL_MANDATORY, |
229 POLICY_SCOPE_USER, | 218 POLICY_SCOPE_USER, |
230 POLICY_SOURCE_CLOUD, | |
231 new base::FundamentalValue(false), | 219 new base::FundamentalValue(false), |
232 NULL); | 220 NULL); |
233 badmap.Set("null", | 221 badmap.Set("null", |
234 POLICY_LEVEL_MANDATORY, | 222 POLICY_LEVEL_MANDATORY, |
235 POLICY_SCOPE_USER, | 223 POLICY_SCOPE_USER, |
236 POLICY_SOURCE_CLOUD, | |
237 new base::FundamentalValue(false), | 224 new base::FundamentalValue(false), |
238 NULL); | 225 NULL); |
239 badmap.Set("double", | 226 badmap.Set("double", |
240 POLICY_LEVEL_MANDATORY, | 227 POLICY_LEVEL_MANDATORY, |
241 POLICY_SCOPE_USER, | 228 POLICY_SCOPE_USER, |
242 POLICY_SOURCE_CLOUD, | |
243 new base::FundamentalValue(false), | 229 new base::FundamentalValue(false), |
244 NULL); | 230 NULL); |
245 badmap.Set("object", | 231 badmap.Set("object", |
246 POLICY_LEVEL_MANDATORY, | 232 POLICY_LEVEL_MANDATORY, |
247 POLICY_SCOPE_USER, | 233 POLICY_SCOPE_USER, |
248 POLICY_SOURCE_CLOUD, | |
249 new base::FundamentalValue(false), | 234 new base::FundamentalValue(false), |
250 NULL); | 235 NULL); |
251 badmap.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 236 badmap.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
252 POLICY_SOURCE_CLOUD, nullptr, | 237 NULL, |
253 new ExternalDataFetcher(base::WeakPtr<ExternalDataManager>(), | 238 new ExternalDataFetcher(base::WeakPtr<ExternalDataManager>(), |
254 std::string())); | 239 std::string())); |
255 | 240 |
256 schema_map->FilterBundle(&bundle); | 241 schema_map->FilterBundle(&bundle); |
257 EXPECT_TRUE(bundle.Equals(empty_bundle)); | 242 EXPECT_TRUE(bundle.Equals(empty_bundle)); |
258 } | 243 } |
259 | 244 |
260 TEST_F(SchemaMapTest, LegacyComponents) { | 245 TEST_F(SchemaMapTest, LegacyComponents) { |
261 std::string error; | 246 std::string error; |
262 Schema schema = Schema::Parse( | 247 Schema schema = Schema::Parse( |
(...skipping 11 matching lines...) Expand all Loading... |
274 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); | 259 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); |
275 | 260 |
276 // |bundle| contains policies loaded by a policy provider. | 261 // |bundle| contains policies loaded by a policy provider. |
277 PolicyBundle bundle; | 262 PolicyBundle bundle; |
278 | 263 |
279 // Known components with schemas are filtered. | 264 // Known components with schemas are filtered. |
280 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); | 265 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); |
281 bundle.Get(extension_ns).Set("String", | 266 bundle.Get(extension_ns).Set("String", |
282 POLICY_LEVEL_MANDATORY, | 267 POLICY_LEVEL_MANDATORY, |
283 POLICY_SCOPE_USER, | 268 POLICY_SCOPE_USER, |
284 POLICY_SOURCE_CLOUD, | |
285 new base::StringValue("value 1"), | 269 new base::StringValue("value 1"), |
286 NULL); | 270 NULL); |
287 | 271 |
288 // The Chrome namespace isn't filtered. | 272 // The Chrome namespace isn't filtered. |
289 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 273 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
290 bundle.Get(chrome_ns).Set("ChromePolicy", | 274 bundle.Get(chrome_ns).Set("ChromePolicy", |
291 POLICY_LEVEL_MANDATORY, | 275 POLICY_LEVEL_MANDATORY, |
292 POLICY_SCOPE_USER, | 276 POLICY_SCOPE_USER, |
293 POLICY_SOURCE_CLOUD, | |
294 new base::StringValue("value 3"), | 277 new base::StringValue("value 3"), |
295 NULL); | 278 NULL); |
296 | 279 |
297 PolicyBundle expected_bundle; | 280 PolicyBundle expected_bundle; |
298 expected_bundle.MergeFrom(bundle); | 281 expected_bundle.MergeFrom(bundle); |
299 | 282 |
300 // Known components without a schema are filtered out completely. | 283 // Known components without a schema are filtered out completely. |
301 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); | 284 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); |
302 bundle.Get(without_schema_ns).Set("Schemaless", | 285 bundle.Get(without_schema_ns).Set("Schemaless", |
303 POLICY_LEVEL_MANDATORY, | 286 POLICY_LEVEL_MANDATORY, |
304 POLICY_SCOPE_USER, | 287 POLICY_SCOPE_USER, |
305 POLICY_SOURCE_CLOUD, | |
306 new base::StringValue("value 2"), | 288 new base::StringValue("value 2"), |
307 NULL); | 289 NULL); |
308 | 290 |
309 // Unknown policies of known components with a schema are removed. | 291 // Unknown policies of known components with a schema are removed. |
310 bundle.Get(extension_ns).Set("Surprise", | 292 bundle.Get(extension_ns).Set("Surprise", |
311 POLICY_LEVEL_MANDATORY, | 293 POLICY_LEVEL_MANDATORY, |
312 POLICY_SCOPE_USER, | 294 POLICY_SCOPE_USER, |
313 POLICY_SOURCE_CLOUD, | |
314 new base::StringValue("value 4"), | 295 new base::StringValue("value 4"), |
315 NULL); | 296 NULL); |
316 | 297 |
317 // Unknown components are removed. | 298 // Unknown components are removed. |
318 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); | 299 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); |
319 bundle.Get(unknown_ns).Set("Surprise", | 300 bundle.Get(unknown_ns).Set("Surprise", |
320 POLICY_LEVEL_MANDATORY, | 301 POLICY_LEVEL_MANDATORY, |
321 POLICY_SCOPE_USER, | 302 POLICY_SCOPE_USER, |
322 POLICY_SOURCE_CLOUD, | |
323 new base::StringValue("value 5"), | 303 new base::StringValue("value 5"), |
324 NULL); | 304 NULL); |
325 | 305 |
326 schema_map->FilterBundle(&bundle); | 306 schema_map->FilterBundle(&bundle); |
327 EXPECT_TRUE(bundle.Equals(expected_bundle)); | 307 EXPECT_TRUE(bundle.Equals(expected_bundle)); |
328 } | 308 } |
329 | 309 |
330 TEST_F(SchemaMapTest, GetChanges) { | 310 TEST_F(SchemaMapTest, GetChanges) { |
331 DomainMap map; | 311 DomainMap map; |
332 map[POLICY_DOMAIN_CHROME][""] = Schema(); | 312 map[POLICY_DOMAIN_CHROME][""] = Schema(); |
(...skipping 20 matching lines...) Expand all Loading... |
353 newer = new SchemaMap(map); | 333 newer = new SchemaMap(map); |
354 newer->GetChanges(older, &removed, &added); | 334 newer->GetChanges(older, &removed, &added); |
355 ASSERT_EQ(2u, removed.size()); | 335 ASSERT_EQ(2u, removed.size()); |
356 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); | 336 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); |
357 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); | 337 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); |
358 ASSERT_EQ(1u, added.size()); | 338 ASSERT_EQ(1u, added.size()); |
359 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); | 339 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); |
360 } | 340 } |
361 | 341 |
362 } // namespace policy | 342 } // namespace policy |
OLD | NEW |