Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(346)

Side by Side Diff: chrome/browser/policy/cloud_policy_cache_unittest.cc

Issue 6523058: New policy protobuf protocol. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/policy/cloud_policy_cache.h"
6
7 #include <limits>
8 #include <string>
9
10 #include "base/file_util.h"
11 #include "base/message_loop.h"
12 #include "base/scoped_temp_dir.h"
13 #include "base/values.h"
14 #include "chrome/browser/browser_thread.h"
15 #include "chrome/browser/policy/proto/cloud_policy.pb.h"
16 #include "chrome/browser/policy/proto/device_management_backend.pb.h"
17 // TODO(jkummerow): remove this import when removing old DMPC test cases.
18 #include "chrome/browser/policy/proto/device_management_constants.h"
19 #include "chrome/browser/policy/proto/device_management_local.pb.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21
22 namespace policy {
23
24 // Decodes a CloudPolicySettings object into two maps with mandatory and
25 // recommended settings, respectively. The implementation is generated code
26 // in policy/cloud_policy_generated.cc.
27 void DecodePolicy(const em::CloudPolicySettings& policy,
28 ConfigurationPolicyProvider::PolicyMapType* mandatory,
29 ConfigurationPolicyProvider::PolicyMapType* recommended);
30
31 // The implementations of these methods are in cloud_policy_generated.cc.
32 Value* DecodeIntegerValue(google::protobuf::int64 value);
33 ListValue* DecodeStringList(const em::StringList& string_list);
34
35 // Tests the device management policy cache.
36 class CloudPolicyCacheTest : public testing::Test {
37 protected:
38 typedef ConfigurationPolicyProvider::PolicyMapType PolicyMapType;
39
40 CloudPolicyCacheTest()
41 : loop_(MessageLoop::TYPE_UI),
42 ui_thread_(BrowserThread::UI, &loop_),
43 file_thread_(BrowserThread::FILE, &loop_) {}
44
45 void SetUp() {
46 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
47 }
48
49 void TearDown() {
50 loop_.RunAllPending();
51 }
52
53 // Creates a (signed) CloudPolicyResponse setting the given |homepage| and
54 // featuring the given |timestamp| (as issued by the server).
55 // Mildly hacky special feature: pass an empty string as |homepage| to get
56 // a completely empty policy.
57 em::CloudPolicyResponse* CreateHomepagePolicy(
58 const std::string& homepage,
59 const base::Time& timestamp,
60 const em::PolicyOptions::PolicyMode policy_mode) {
61 em::SignedCloudPolicyResponse signed_response;
62 if (homepage != "") {
63 em::CloudPolicySettings* settings = signed_response.mutable_settings();
64 em::HomepageLocationProto* homepagelocation_proto =
65 settings->mutable_homepagelocation();
66 homepagelocation_proto->set_homepagelocation(homepage);
67 homepagelocation_proto->mutable_policy_options()->set_mode(policy_mode);
68 }
69 signed_response.set_timestamp(timestamp.ToTimeT());
70 std::string serialized_signed_response;
71 EXPECT_TRUE(signed_response.SerializeToString(&serialized_signed_response));
72
73 em::CloudPolicyResponse* response = new em::CloudPolicyResponse;
74 response->set_signed_response(serialized_signed_response);
75 // TODO(jkummerow): Set proper certificate_chain and signature (when
76 // implementing support for signature verification).
77 response->set_signature("TODO");
78 response->add_certificate_chain("TODO");
79 return response;
80 }
81
82 void WritePolicy(const em::CloudPolicyResponse& policy) {
83 std::string data;
84 em::CachedCloudPolicyResponse cached_policy;
85 cached_policy.mutable_cloud_policy()->CopyFrom(policy);
86 EXPECT_TRUE(cached_policy.SerializeToString(&data));
87 int size = static_cast<int>(data.size());
88 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size));
89 }
90
91 FilePath test_file() {
92 return temp_dir_.path().AppendASCII("CloudPolicyCacheTest");
93 }
94
95 bool Equals(const PolicyMapType& a, const PolicyMapType& b) const {
96 return CloudPolicyCache::Equals(a, b);
97 }
98
99 MessageLoop loop_;
100
101 private:
102 ScopedTempDir temp_dir_;
103 BrowserThread ui_thread_;
104 BrowserThread file_thread_;
105 };
106
107 TEST_F(CloudPolicyCacheTest, Equals) {
108 PolicyMapType a;
109 a.insert(std::make_pair(kPolicyHomepageLocation,
110 Value::CreateStringValue("aaa")));
111 PolicyMapType a2;
112 a2.insert(std::make_pair(kPolicyHomepageLocation,
113 Value::CreateStringValue("aaa")));
114 PolicyMapType b;
115 b.insert(std::make_pair(kPolicyHomepageLocation,
116 Value::CreateStringValue("bbb")));
117 PolicyMapType c;
118 c.insert(std::make_pair(kPolicyHomepageLocation,
119 Value::CreateStringValue("aaa")));
120 c.insert(std::make_pair(kPolicyHomepageIsNewTabPage,
121 Value::CreateBooleanValue(true)));
122 EXPECT_FALSE(Equals(a, b));
123 EXPECT_FALSE(Equals(b, a));
124 EXPECT_FALSE(Equals(a, c));
125 EXPECT_FALSE(Equals(c, a));
126 EXPECT_TRUE(Equals(a, a2));
127 EXPECT_TRUE(Equals(a2, a));
128 PolicyMapType empty1;
129 PolicyMapType empty2;
130 EXPECT_TRUE(Equals(empty1, empty2));
131 EXPECT_TRUE(Equals(empty2, empty1));
132 EXPECT_FALSE(Equals(empty1, a));
133 EXPECT_FALSE(Equals(a, empty1));
134 }
135
136 TEST_F(CloudPolicyCacheTest, DecodePolicy) {
137 em::CloudPolicySettings settings;
138 settings.mutable_homepagelocation()->set_homepagelocation("chromium.org");
139 settings.mutable_javascriptenabled()->set_javascriptenabled(true);
140 settings.mutable_javascriptenabled()->mutable_policy_options()->set_mode(
141 em::PolicyOptions::MANDATORY);
142 settings.mutable_policyrefreshrate()->set_policyrefreshrate(5);
143 settings.mutable_policyrefreshrate()->mutable_policy_options()->set_mode(
144 em::PolicyOptions::RECOMMENDED);
145 PolicyMapType mandatory_policy;
146 PolicyMapType recommended_policy;
147 DecodePolicy(settings, &mandatory_policy, &recommended_policy);
148 PolicyMapType mandatory;
149 mandatory.insert(std::make_pair(kPolicyHomepageLocation,
150 Value::CreateStringValue("chromium.org")));
151 mandatory.insert(std::make_pair(kPolicyJavascriptEnabled,
152 Value::CreateBooleanValue(true)));
153 PolicyMapType recommended;
154 recommended.insert(std::make_pair(kPolicyPolicyRefreshRate,
155 Value::CreateIntegerValue(5)));
156 EXPECT_TRUE(Equals(mandatory, mandatory_policy));
157 EXPECT_TRUE(Equals(recommended, recommended_policy));
158 }
159
160 TEST_F(CloudPolicyCacheTest, DecodeIntegerValue) {
161 const int min = std::numeric_limits<int>::min();
162 const int max = std::numeric_limits<int>::max();
163 scoped_ptr<Value> value(
164 DecodeIntegerValue(static_cast<google::protobuf::int64>(42)));
165 ASSERT_TRUE(value.get());
166 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(42)));
167 value.reset(
168 DecodeIntegerValue(static_cast<google::protobuf::int64>(min - 1LL)));
169 EXPECT_EQ(NULL, value.get());
170 value.reset(DecodeIntegerValue(static_cast<google::protobuf::int64>(min)));
171 ASSERT_TRUE(value.get());
172 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(min)));
173 value.reset(
174 DecodeIntegerValue(static_cast<google::protobuf::int64>(max + 1LL)));
175 EXPECT_EQ(NULL, value.get());
176 value.reset(DecodeIntegerValue(static_cast<google::protobuf::int64>(max)));
177 ASSERT_TRUE(value.get());
178 EXPECT_TRUE(value->Equals(Value::CreateIntegerValue(max)));
179 }
180
181 TEST_F(CloudPolicyCacheTest, DecodeStringList) {
182 em::StringList string_list;
183 string_list.add_entries("ponies");
184 string_list.add_entries("more ponies");
185 scoped_ptr<ListValue> decoded(DecodeStringList(string_list));
186 ListValue expected;
187 expected.Append(Value::CreateStringValue("ponies"));
188 expected.Append(Value::CreateStringValue("more ponies"));
189 EXPECT_TRUE(decoded->Equals(&expected));
190 }
191
192 TEST_F(CloudPolicyCacheTest, Empty) {
193 CloudPolicyCache cache(test_file());
194 PolicyMapType empty;
195 EXPECT_TRUE(Equals(empty, *cache.GetMandatoryPolicy()));
196 EXPECT_TRUE(Equals(empty, *cache.GetRecommendedPolicy()));
197 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
198 }
199
200 TEST_F(CloudPolicyCacheTest, LoadNoFile) {
201 CloudPolicyCache cache(test_file());
202 cache.LoadPolicyFromFile();
203 PolicyMapType empty;
204 EXPECT_TRUE(Equals(empty, *cache.GetMandatoryPolicy()));
205 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
206 }
207
208 TEST_F(CloudPolicyCacheTest, RejectFuture) {
209 scoped_ptr<em::CloudPolicyResponse> policy_response(
210 CreateHomepagePolicy("", base::Time::NowFromSystemTime() +
211 base::TimeDelta::FromMinutes(5),
212 em::PolicyOptions::MANDATORY));
213 WritePolicy(*policy_response);
214 CloudPolicyCache cache(test_file());
215 cache.LoadPolicyFromFile();
216 PolicyMapType empty;
217 EXPECT_TRUE(Equals(empty, *cache.GetMandatoryPolicy()));
218 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
219 }
220
221 TEST_F(CloudPolicyCacheTest, LoadWithFile) {
222 scoped_ptr<em::CloudPolicyResponse> policy_response(
223 CreateHomepagePolicy("", base::Time::NowFromSystemTime(),
224 em::PolicyOptions::MANDATORY));
225 WritePolicy(*policy_response);
226 CloudPolicyCache cache(test_file());
227 cache.LoadPolicyFromFile();
228 PolicyMapType empty;
229 EXPECT_TRUE(Equals(empty, *cache.GetMandatoryPolicy()));
230 EXPECT_NE(base::Time(), cache.last_policy_refresh_time());
231 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time());
232 }
233
234 TEST_F(CloudPolicyCacheTest, LoadWithData) {
235 scoped_ptr<em::CloudPolicyResponse> policy(
236 CreateHomepagePolicy("http://www.example.com",
237 base::Time::NowFromSystemTime(),
238 em::PolicyOptions::MANDATORY));
239 WritePolicy(*policy);
240 CloudPolicyCache cache(test_file());
241 cache.LoadPolicyFromFile();
242 PolicyMapType expected;
243 expected.insert(
244 std::make_pair(kPolicyHomepageLocation,
245 Value::CreateStringValue("http://www.example.com")));
246 EXPECT_TRUE(Equals(expected, *cache.GetMandatoryPolicy()));
247 }
248
249 TEST_F(CloudPolicyCacheTest, SetPolicy) {
250 CloudPolicyCache cache(test_file());
251 scoped_ptr<em::CloudPolicyResponse> policy(
252 CreateHomepagePolicy("http://www.example.com",
253 base::Time::NowFromSystemTime(),
254 em::PolicyOptions::MANDATORY));
255 EXPECT_TRUE(cache.SetPolicy(*policy));
256 scoped_ptr<em::CloudPolicyResponse> policy2(
257 CreateHomepagePolicy("http://www.example.com",
258 base::Time::NowFromSystemTime(),
259 em::PolicyOptions::MANDATORY));
260 EXPECT_FALSE(cache.SetPolicy(*policy2));
261 PolicyMapType expected;
262 expected.insert(
263 std::make_pair(kPolicyHomepageLocation,
264 Value::CreateStringValue("http://www.example.com")));
265 PolicyMapType empty;
266 EXPECT_TRUE(Equals(expected, *cache.GetMandatoryPolicy()));
267 EXPECT_TRUE(Equals(empty, *cache.GetRecommendedPolicy()));
268 policy.reset(CreateHomepagePolicy("http://www.example.com",
269 base::Time::NowFromSystemTime(),
270 em::PolicyOptions::RECOMMENDED));
271 EXPECT_TRUE(cache.SetPolicy(*policy));
272 EXPECT_TRUE(Equals(expected, *cache.GetRecommendedPolicy()));
273 EXPECT_TRUE(Equals(empty, *cache.GetMandatoryPolicy()));
274 }
275
276 TEST_F(CloudPolicyCacheTest, ResetPolicy) {
277 CloudPolicyCache cache(test_file());
278
279 scoped_ptr<em::CloudPolicyResponse> policy(
280 CreateHomepagePolicy("http://www.example.com",
281 base::Time::NowFromSystemTime(),
282 em::PolicyOptions::MANDATORY));
283 EXPECT_TRUE(cache.SetPolicy(*policy));
284 PolicyMapType expected;
285 expected.insert(
286 std::make_pair(kPolicyHomepageLocation,
287 Value::CreateStringValue("http://www.example.com")));
288 EXPECT_TRUE(Equals(expected, *cache.GetMandatoryPolicy()));
289
290 scoped_ptr<em::CloudPolicyResponse> empty_policy(
291 CreateHomepagePolicy("", base::Time::NowFromSystemTime(),
292 em::PolicyOptions::MANDATORY));
293 EXPECT_TRUE(cache.SetPolicy(*empty_policy));
294 PolicyMapType empty;
295 EXPECT_TRUE(Equals(empty, *cache.GetMandatoryPolicy()));
296 }
297
298 TEST_F(CloudPolicyCacheTest, PersistPolicy) {
299 {
300 CloudPolicyCache cache(test_file());
301 scoped_ptr<em::CloudPolicyResponse> policy(
302 CreateHomepagePolicy("http://www.example.com",
303 base::Time::NowFromSystemTime(),
304 em::PolicyOptions::MANDATORY));
305 cache.SetPolicy(*policy);
306 }
307
308 loop_.RunAllPending();
309
310 EXPECT_TRUE(file_util::PathExists(test_file()));
311 CloudPolicyCache cache(test_file());
312 cache.LoadPolicyFromFile();
313 PolicyMapType expected;
314 expected.insert(
315 std::make_pair(kPolicyHomepageLocation,
316 Value::CreateStringValue("http://www.example.com")));
317 EXPECT_TRUE(Equals(expected, *cache.GetMandatoryPolicy()));
318 }
319
320 TEST_F(CloudPolicyCacheTest, FreshPolicyOverride) {
321 scoped_ptr<em::CloudPolicyResponse> policy(
322 CreateHomepagePolicy("http://www.example.com",
323 base::Time::NowFromSystemTime(),
324 em::PolicyOptions::MANDATORY));
325 WritePolicy(*policy);
326
327 CloudPolicyCache cache(test_file());
328 scoped_ptr<em::CloudPolicyResponse> updated_policy(
329 CreateHomepagePolicy("http://www.chromium.org",
330 base::Time::NowFromSystemTime(),
331 em::PolicyOptions::MANDATORY));
332 EXPECT_TRUE(cache.SetPolicy(*updated_policy));
333
334 cache.LoadPolicyFromFile();
335 PolicyMapType expected;
336 expected.insert(
337 std::make_pair(kPolicyHomepageLocation,
338 Value::CreateStringValue("http://www.chromium.org")));
339 EXPECT_TRUE(Equals(expected, *cache.GetMandatoryPolicy()));
340 }
341
342 } // namespace policy
343
344 // ==================================================================
345 // Everything below this line can go when we phase out support for
346 // the old (trusted testing/pilot program) policy format.
347
348 // This is a (slightly updated) copy of the old
349 // device_management_policy_cache_unittest.cc. The new CloudPolicyCache
350 // supports the old DMPC's interface for now (until it is phased out), so for
351 // this transitional period, we keep these old test cases but apply them to the
352 // new implementation (CPC).
353
354 namespace policy {
355
356 // Wraps base functionaly for the test cases.
357 class DeviceManagementPolicyCacheTestBase : public testing::Test {
358 protected:
359 // Add a string policy setting to a policy response message.
360 void AddStringPolicy(em::DevicePolicyResponse* policy,
361 const std::string& name,
362 const std::string& value) {
363 em::DevicePolicySetting* setting = policy->add_setting();
364 setting->set_policy_key(kChromeDevicePolicySettingKey);
365 em::GenericSetting* policy_value = setting->mutable_policy_value();
366 em::GenericNamedValue* named_value = policy_value->add_named_value();
367 named_value->set_name(name);
368 em::GenericValue* value_container = named_value->mutable_value();
369 value_container->set_value_type(em::GenericValue::VALUE_TYPE_STRING);
370 value_container->set_string_value(value);
371 }
372 };
373
374 // Tests the device management policy cache.
375 class DeviceManagementPolicyCacheTest
376 : public DeviceManagementPolicyCacheTestBase {
377 protected:
378 DeviceManagementPolicyCacheTest()
379 : loop_(MessageLoop::TYPE_UI),
380 ui_thread_(BrowserThread::UI, &loop_),
381 file_thread_(BrowserThread::FILE, &loop_) {}
382
383 void SetUp() {
384 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
385 }
386
387 void TearDown() {
388 loop_.RunAllPending();
389 }
390
391 void WritePolicy(const em::DevicePolicyResponse& policy,
392 const base::Time& timestamp) {
393 std::string data;
394 em::CachedCloudPolicyResponse cached_policy;
395 cached_policy.mutable_device_policy()->CopyFrom(policy);
396 cached_policy.set_timestamp(timestamp.ToTimeT());
397 EXPECT_TRUE(cached_policy.SerializeToString(&data));
398 int size = static_cast<int>(data.size());
399 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size));
400 }
401
402 FilePath test_file() {
403 return temp_dir_.path().AppendASCII("DeviceManagementPolicyCacheTest");
404 }
405
406 protected:
407 MessageLoop loop_;
408
409 private:
410 ScopedTempDir temp_dir_;
411 BrowserThread ui_thread_;
412 BrowserThread file_thread_;
413 };
414
415 TEST_F(DeviceManagementPolicyCacheTest, Empty) {
416 CloudPolicyCache cache(test_file());
417 DictionaryValue empty;
418 scoped_ptr<Value> policy(cache.GetDevicePolicy());
419 EXPECT_TRUE(empty.Equals(policy.get()));
420 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
421 }
422
423 TEST_F(DeviceManagementPolicyCacheTest, LoadNoFile) {
424 CloudPolicyCache cache(test_file());
425 cache.LoadPolicyFromFile();
426 DictionaryValue empty;
427 scoped_ptr<Value> policy(cache.GetDevicePolicy());
428 EXPECT_TRUE(empty.Equals(policy.get()));
429 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
430 }
431
432 TEST_F(DeviceManagementPolicyCacheTest, RejectFuture) {
433 em::DevicePolicyResponse policy_response;
434 WritePolicy(policy_response, base::Time::NowFromSystemTime() +
435 base::TimeDelta::FromMinutes(5));
436 CloudPolicyCache cache(test_file());
437 cache.LoadPolicyFromFile();
438 DictionaryValue empty;
439 scoped_ptr<Value> policy(cache.GetDevicePolicy());
440 EXPECT_TRUE(empty.Equals(policy.get()));
441 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
442 }
443
444 TEST_F(DeviceManagementPolicyCacheTest, LoadWithFile) {
445 em::DevicePolicyResponse policy_response;
446 WritePolicy(policy_response, base::Time::NowFromSystemTime());
447 CloudPolicyCache cache(test_file());
448 cache.LoadPolicyFromFile();
449 DictionaryValue empty;
450 scoped_ptr<Value> policy(cache.GetDevicePolicy());
451 EXPECT_TRUE(empty.Equals(policy.get()));
452 EXPECT_NE(base::Time(), cache.last_policy_refresh_time());
453 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time());
454 }
455
456 TEST_F(DeviceManagementPolicyCacheTest, LoadWithData) {
457 em::DevicePolicyResponse policy;
458 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
459 WritePolicy(policy, base::Time::NowFromSystemTime());
460 CloudPolicyCache cache(test_file());
461 cache.LoadPolicyFromFile();
462 DictionaryValue expected;
463 expected.Set("HomepageLocation",
464 Value::CreateStringValue("http://www.example.com"));
465 scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
466 EXPECT_TRUE(expected.Equals(policy_value.get()));
467 }
468
469 TEST_F(DeviceManagementPolicyCacheTest, SetDevicePolicy) {
470 CloudPolicyCache cache(test_file());
471 em::DevicePolicyResponse policy;
472 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
473 EXPECT_TRUE(cache.SetDevicePolicy(policy));
474 em::DevicePolicyResponse policy2;
475 AddStringPolicy(&policy2, "HomepageLocation", "http://www.example.com");
476 EXPECT_FALSE(cache.SetDevicePolicy(policy2));
477 DictionaryValue expected;
478 expected.Set("HomepageLocation",
479 Value::CreateStringValue("http://www.example.com"));
480 scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
481 EXPECT_TRUE(expected.Equals(policy_value.get()));
482 }
483
484 TEST_F(DeviceManagementPolicyCacheTest, ResetPolicy) {
485 CloudPolicyCache cache(test_file());
486
487 em::DevicePolicyResponse policy;
488 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
489 EXPECT_TRUE(cache.SetDevicePolicy(policy));
490 DictionaryValue expected;
491 expected.Set("HomepageLocation",
492 Value::CreateStringValue("http://www.example.com"));
493 scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
494 EXPECT_TRUE(expected.Equals(policy_value.get()));
495
496 EXPECT_TRUE(cache.SetDevicePolicy(em::DevicePolicyResponse()));
497 policy_value.reset(cache.GetDevicePolicy());
498 DictionaryValue empty;
499 EXPECT_TRUE(empty.Equals(policy_value.get()));
500 }
501
502 TEST_F(DeviceManagementPolicyCacheTest, PersistPolicy) {
503 {
504 CloudPolicyCache cache(test_file());
505 em::DevicePolicyResponse policy;
506 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
507 cache.SetDevicePolicy(policy);
508 }
509
510 loop_.RunAllPending();
511
512 EXPECT_TRUE(file_util::PathExists(test_file()));
513 CloudPolicyCache cache(test_file());
514 cache.LoadPolicyFromFile();
515 DictionaryValue expected;
516 expected.Set("HomepageLocation",
517 Value::CreateStringValue("http://www.example.com"));
518 scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
519 EXPECT_TRUE(expected.Equals(policy_value.get()));
520 }
521
522 TEST_F(DeviceManagementPolicyCacheTest, FreshPolicyOverride) {
523 em::DevicePolicyResponse policy;
524 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
525 WritePolicy(policy, base::Time::NowFromSystemTime());
526
527 CloudPolicyCache cache(test_file());
528 em::DevicePolicyResponse updated_policy;
529 AddStringPolicy(&updated_policy, "HomepageLocation",
530 "http://www.chromium.org");
531 EXPECT_TRUE(cache.SetDevicePolicy(updated_policy));
532
533 cache.LoadPolicyFromFile();
534 DictionaryValue expected;
535 expected.Set("HomepageLocation",
536 Value::CreateStringValue("http://www.chromium.org"));
537 scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
538 EXPECT_TRUE(expected.Equals(policy_value.get()));
539 }
540
541 // Tests proper decoding of policy values.
542 class DeviceManagementPolicyCacheDecodeTest
543 : public DeviceManagementPolicyCacheTestBase {
544 protected:
545 void DecodeAndCheck(Value* expected_value_ptr) {
546 scoped_ptr<Value> expected_value(expected_value_ptr);
547 scoped_ptr<Value> decoded_value(
548 CloudPolicyCache::DecodeValue(value_));
549 if (expected_value_ptr) {
550 ASSERT_TRUE(decoded_value.get());
551 EXPECT_TRUE(decoded_value->Equals(expected_value.get()));
552 } else {
553 ASSERT_FALSE(decoded_value.get());
554 }
555 }
556
557 DictionaryValue* DecodeDevicePolicy(const em::DevicePolicyResponse policy) {
558 return CloudPolicyCache::DecodeDevicePolicy(policy);
559 }
560
561 em::GenericValue value_;
562 };
563
564 TEST_F(DeviceManagementPolicyCacheDecodeTest, Bool) {
565 value_.set_value_type(em::GenericValue::VALUE_TYPE_BOOL);
566 value_.set_bool_value(true);
567 DecodeAndCheck(Value::CreateBooleanValue(true));
568 }
569
570 TEST_F(DeviceManagementPolicyCacheDecodeTest, Int64) {
571 value_.set_value_type(em::GenericValue::VALUE_TYPE_INT64);
572 value_.set_int64_value(42);
573 DecodeAndCheck(Value::CreateIntegerValue(42));
574 }
575
576 TEST_F(DeviceManagementPolicyCacheDecodeTest, Int64Overflow) {
577 const int min = std::numeric_limits<int>::min();
578 const int max = std::numeric_limits<int>::max();
579 value_.set_value_type(em::GenericValue::VALUE_TYPE_INT64);
580 value_.set_int64_value(min - 1LL);
581 DecodeAndCheck(NULL);
582 value_.set_int64_value(max + 1LL);
583 DecodeAndCheck(NULL);
584 value_.set_int64_value(min);
585 DecodeAndCheck(Value::CreateIntegerValue(min));
586 value_.set_int64_value(max);
587 DecodeAndCheck(Value::CreateIntegerValue(max));
588 }
589
590 TEST_F(DeviceManagementPolicyCacheDecodeTest, String) {
591 value_.set_value_type(em::GenericValue::VALUE_TYPE_STRING);
592 value_.set_string_value("ponies!");
593 DecodeAndCheck(Value::CreateStringValue("ponies!"));
594 }
595
596 TEST_F(DeviceManagementPolicyCacheDecodeTest, Double) {
597 value_.set_value_type(em::GenericValue::VALUE_TYPE_DOUBLE);
598 value_.set_double_value(0.42L);
599 DecodeAndCheck(Value::CreateDoubleValue(0.42L));
600 }
601
602 TEST_F(DeviceManagementPolicyCacheDecodeTest, Bytes) {
603 std::string data("binary ponies.");
604 value_.set_value_type(em::GenericValue::VALUE_TYPE_BYTES);
605 value_.set_bytes_value(data);
606 DecodeAndCheck(
607 BinaryValue::CreateWithCopiedBuffer(data.c_str(), data.size()));
608 }
609
610 TEST_F(DeviceManagementPolicyCacheDecodeTest, BoolArray) {
611 value_.set_value_type(em::GenericValue::VALUE_TYPE_BOOL_ARRAY);
612 value_.add_bool_array(false);
613 value_.add_bool_array(true);
614 ListValue* list = new ListValue;
615 list->Append(Value::CreateBooleanValue(false));
616 list->Append(Value::CreateBooleanValue(true));
617 DecodeAndCheck(list);
618 }
619
620 TEST_F(DeviceManagementPolicyCacheDecodeTest, Int64Array) {
621 value_.set_value_type(em::GenericValue::VALUE_TYPE_INT64_ARRAY);
622 value_.add_int64_array(42);
623 value_.add_int64_array(17);
624 ListValue* list = new ListValue;
625 list->Append(Value::CreateIntegerValue(42));
626 list->Append(Value::CreateIntegerValue(17));
627 DecodeAndCheck(list);
628 }
629
630 TEST_F(DeviceManagementPolicyCacheDecodeTest, StringArray) {
631 value_.set_value_type(em::GenericValue::VALUE_TYPE_STRING_ARRAY);
632 value_.add_string_array("ponies");
633 value_.add_string_array("more ponies");
634 ListValue* list = new ListValue;
635 list->Append(Value::CreateStringValue("ponies"));
636 list->Append(Value::CreateStringValue("more ponies"));
637 DecodeAndCheck(list);
638 }
639
640 TEST_F(DeviceManagementPolicyCacheDecodeTest, DoubleArray) {
641 value_.set_value_type(em::GenericValue::VALUE_TYPE_DOUBLE_ARRAY);
642 value_.add_double_array(0.42L);
643 value_.add_double_array(0.17L);
644 ListValue* list = new ListValue;
645 list->Append(Value::CreateDoubleValue(0.42L));
646 list->Append(Value::CreateDoubleValue(0.17L));
647 DecodeAndCheck(list);
648 }
649
650 TEST_F(DeviceManagementPolicyCacheDecodeTest, DecodePolicy) {
651 em::DevicePolicyResponse policy;
652 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
653 scoped_ptr<Value> decoded(DecodeDevicePolicy(policy));
654 DictionaryValue expected;
655 expected.Set("HomepageLocation",
656 Value::CreateStringValue("http://www.example.com"));
657 EXPECT_TRUE(expected.Equals(decoded.get()));
658 }
659
660 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/cloud_policy_cache.cc ('k') | chrome/browser/policy/configuration_policy_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698