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

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

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

Powered by Google App Engine
This is Rietveld 408576698