OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/policy/cloud_policy_cache.h" | 5 #include "chrome/browser/policy/cloud_policy_cache.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
12 #include "base/scoped_temp_dir.h" | 12 #include "base/scoped_temp_dir.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "chrome/browser/browser_thread.h" | 14 #include "chrome/browser/browser_thread.h" |
15 #include "chrome/browser/policy/configuration_policy_provider.h" | |
15 #include "chrome/browser/policy/proto/cloud_policy.pb.h" | 16 #include "chrome/browser/policy/proto/cloud_policy.pb.h" |
16 #include "chrome/browser/policy/proto/device_management_backend.pb.h" | 17 #include "chrome/browser/policy/proto/device_management_backend.pb.h" |
17 // TODO(jkummerow): remove this import when removing old DMPC test cases. | 18 // 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_constants.h" |
19 #include "chrome/browser/policy/proto/device_management_local.pb.h" | 20 #include "chrome/browser/policy/proto/device_management_local.pb.h" |
21 #include "testing/gmock/include/gmock/gmock.h" | |
20 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
21 | 23 |
22 namespace policy { | 24 namespace policy { |
23 | 25 |
24 // Decodes a CloudPolicySettings object into two maps with mandatory and | 26 // Decodes a CloudPolicySettings object into two maps with mandatory and |
25 // recommended settings, respectively. The implementation is generated code | 27 // recommended settings, respectively. The implementation is generated code |
26 // in policy/cloud_policy_generated.cc. | 28 // in policy/cloud_policy_generated.cc. |
27 void DecodePolicy(const em::CloudPolicySettings& policy, | 29 void DecodePolicy(const em::CloudPolicySettings& policy, |
28 PolicyMap* mandatory, PolicyMap* recommended); | 30 PolicyMap* mandatory, PolicyMap* recommended); |
29 | 31 |
30 // The implementations of these methods are in cloud_policy_generated.cc. | 32 // The implementations of these methods are in cloud_policy_generated.cc. |
31 Value* DecodeIntegerValue(google::protobuf::int64 value); | 33 Value* DecodeIntegerValue(google::protobuf::int64 value); |
32 ListValue* DecodeStringList(const em::StringList& string_list); | 34 ListValue* DecodeStringList(const em::StringList& string_list); |
33 | 35 |
36 class MockConfigurationPolicyProviderObserver | |
37 : public ConfigurationPolicyProvider::Observer { | |
38 public: | |
39 MockConfigurationPolicyProviderObserver() {} | |
40 virtual ~MockConfigurationPolicyProviderObserver() {} | |
41 MOCK_METHOD0(OnUpdatePolicy, void()); | |
42 void OnProviderGoingAway() {} | |
43 }; | |
44 | |
34 // Tests the device management policy cache. | 45 // Tests the device management policy cache. |
35 class CloudPolicyCacheTest : public testing::Test { | 46 class CloudPolicyCacheTest : public testing::Test { |
36 protected: | 47 protected: |
37 CloudPolicyCacheTest() | 48 CloudPolicyCacheTest() |
38 : loop_(MessageLoop::TYPE_UI), | 49 : loop_(MessageLoop::TYPE_UI), |
39 ui_thread_(BrowserThread::UI, &loop_), | 50 ui_thread_(BrowserThread::UI, &loop_), |
40 file_thread_(BrowserThread::FILE, &loop_) {} | 51 file_thread_(BrowserThread::FILE, &loop_) {} |
41 | 52 |
42 void SetUp() { | 53 void SetUp() { |
43 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 54 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
78 | 89 |
79 void WritePolicy(const em::CloudPolicyResponse& policy) { | 90 void WritePolicy(const em::CloudPolicyResponse& policy) { |
80 std::string data; | 91 std::string data; |
81 em::CachedCloudPolicyResponse cached_policy; | 92 em::CachedCloudPolicyResponse cached_policy; |
82 cached_policy.mutable_cloud_policy()->CopyFrom(policy); | 93 cached_policy.mutable_cloud_policy()->CopyFrom(policy); |
83 EXPECT_TRUE(cached_policy.SerializeToString(&data)); | 94 EXPECT_TRUE(cached_policy.SerializeToString(&data)); |
84 int size = static_cast<int>(data.size()); | 95 int size = static_cast<int>(data.size()); |
85 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); | 96 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); |
86 } | 97 } |
87 | 98 |
99 // Takes ownership of |policy_response|. | |
100 void SetPolicy(CloudPolicyCache* cache, | |
101 em::CloudPolicyResponse* policy_response, | |
102 bool expect_changed_policy) { | |
103 scoped_ptr<em::CloudPolicyResponse> policy(policy_response); | |
104 ConfigurationPolicyObserverRegistrar registrar; | |
Mattias Nissler (ping if slow)
2011/02/21 14:39:13
Hm, it seems a curious choice to hide the observer
Jakob Kummerow
2011/02/22 10:02:33
This doesn't just test whether notifying the obser
| |
105 registrar.Init(cache->GetManagedPolicyProvider(), &observer); | |
106 if (expect_changed_policy) | |
107 EXPECT_CALL(observer, OnUpdatePolicy()).Times(1); | |
108 else | |
109 EXPECT_CALL(observer, OnUpdatePolicy()).Times(0); | |
110 cache->SetPolicy(*policy); | |
111 testing::Mock::VerifyAndClearExpectations(&observer); | |
112 } | |
113 | |
88 FilePath test_file() { | 114 FilePath test_file() { |
89 return temp_dir_.path().AppendASCII("CloudPolicyCacheTest"); | 115 return temp_dir_.path().AppendASCII("CloudPolicyCacheTest"); |
90 } | 116 } |
91 | 117 |
118 const PolicyMap& mandatory_policy(const CloudPolicyCache& cache) { | |
119 return cache.mandatory_policy_; | |
120 } | |
121 | |
122 const PolicyMap& recommended_policy(const CloudPolicyCache& cache) { | |
123 return cache.recommended_policy_; | |
124 } | |
125 | |
92 MessageLoop loop_; | 126 MessageLoop loop_; |
127 MockConfigurationPolicyProviderObserver observer; | |
93 | 128 |
94 private: | 129 private: |
95 ScopedTempDir temp_dir_; | 130 ScopedTempDir temp_dir_; |
96 BrowserThread ui_thread_; | 131 BrowserThread ui_thread_; |
97 BrowserThread file_thread_; | 132 BrowserThread file_thread_; |
98 }; | 133 }; |
99 | 134 |
100 TEST_F(CloudPolicyCacheTest, DecodePolicy) { | 135 TEST_F(CloudPolicyCacheTest, DecodePolicy) { |
101 em::CloudPolicySettings settings; | 136 em::CloudPolicySettings settings; |
102 settings.mutable_homepagelocation()->set_homepagelocation("chromium.org"); | 137 settings.mutable_homepagelocation()->set_homepagelocation("chromium.org"); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
150 scoped_ptr<ListValue> decoded(DecodeStringList(string_list)); | 185 scoped_ptr<ListValue> decoded(DecodeStringList(string_list)); |
151 ListValue expected; | 186 ListValue expected; |
152 expected.Append(Value::CreateStringValue("ponies")); | 187 expected.Append(Value::CreateStringValue("ponies")); |
153 expected.Append(Value::CreateStringValue("more ponies")); | 188 expected.Append(Value::CreateStringValue("more ponies")); |
154 EXPECT_TRUE(decoded->Equals(&expected)); | 189 EXPECT_TRUE(decoded->Equals(&expected)); |
155 } | 190 } |
156 | 191 |
157 TEST_F(CloudPolicyCacheTest, Empty) { | 192 TEST_F(CloudPolicyCacheTest, Empty) { |
158 CloudPolicyCache cache(test_file()); | 193 CloudPolicyCache cache(test_file()); |
159 PolicyMap empty; | 194 PolicyMap empty; |
160 EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy())); | 195 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
161 EXPECT_TRUE(empty.Equals(*cache.GetRecommendedPolicy())); | 196 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); |
162 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 197 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
163 } | 198 } |
164 | 199 |
165 TEST_F(CloudPolicyCacheTest, LoadNoFile) { | 200 TEST_F(CloudPolicyCacheTest, LoadNoFile) { |
166 CloudPolicyCache cache(test_file()); | 201 CloudPolicyCache cache(test_file()); |
167 cache.LoadPolicyFromFile(); | 202 cache.LoadFromFile(); |
168 PolicyMap empty; | 203 PolicyMap empty; |
169 EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy())); | 204 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
170 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 205 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
171 } | 206 } |
172 | 207 |
173 TEST_F(CloudPolicyCacheTest, RejectFuture) { | 208 TEST_F(CloudPolicyCacheTest, RejectFuture) { |
174 scoped_ptr<em::CloudPolicyResponse> policy_response( | 209 scoped_ptr<em::CloudPolicyResponse> policy_response( |
175 CreateHomepagePolicy("", base::Time::NowFromSystemTime() + | 210 CreateHomepagePolicy("", base::Time::NowFromSystemTime() + |
176 base::TimeDelta::FromMinutes(5), | 211 base::TimeDelta::FromMinutes(5), |
177 em::PolicyOptions::MANDATORY)); | 212 em::PolicyOptions::MANDATORY)); |
178 WritePolicy(*policy_response); | 213 WritePolicy(*policy_response); |
179 CloudPolicyCache cache(test_file()); | 214 CloudPolicyCache cache(test_file()); |
180 cache.LoadPolicyFromFile(); | 215 cache.LoadFromFile(); |
181 PolicyMap empty; | 216 PolicyMap empty; |
182 EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy())); | 217 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
183 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 218 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
184 } | 219 } |
185 | 220 |
186 TEST_F(CloudPolicyCacheTest, LoadWithFile) { | 221 TEST_F(CloudPolicyCacheTest, LoadWithFile) { |
187 scoped_ptr<em::CloudPolicyResponse> policy_response( | 222 scoped_ptr<em::CloudPolicyResponse> policy_response( |
188 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), | 223 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
189 em::PolicyOptions::MANDATORY)); | 224 em::PolicyOptions::MANDATORY)); |
190 WritePolicy(*policy_response); | 225 WritePolicy(*policy_response); |
191 CloudPolicyCache cache(test_file()); | 226 CloudPolicyCache cache(test_file()); |
192 cache.LoadPolicyFromFile(); | 227 cache.LoadFromFile(); |
193 PolicyMap empty; | 228 PolicyMap empty; |
194 EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy())); | 229 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
195 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); | 230 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); |
196 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); | 231 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); |
197 } | 232 } |
198 | 233 |
199 TEST_F(CloudPolicyCacheTest, LoadWithData) { | 234 TEST_F(CloudPolicyCacheTest, LoadWithData) { |
200 scoped_ptr<em::CloudPolicyResponse> policy( | 235 scoped_ptr<em::CloudPolicyResponse> policy( |
201 CreateHomepagePolicy("http://www.example.com", | 236 CreateHomepagePolicy("http://www.example.com", |
202 base::Time::NowFromSystemTime(), | 237 base::Time::NowFromSystemTime(), |
203 em::PolicyOptions::MANDATORY)); | 238 em::PolicyOptions::MANDATORY)); |
204 WritePolicy(*policy); | 239 WritePolicy(*policy); |
205 CloudPolicyCache cache(test_file()); | 240 CloudPolicyCache cache(test_file()); |
206 cache.LoadPolicyFromFile(); | 241 cache.LoadFromFile(); |
207 PolicyMap expected; | 242 PolicyMap expected; |
208 expected.Set(kPolicyHomepageLocation, | 243 expected.Set(kPolicyHomepageLocation, |
209 Value::CreateStringValue("http://www.example.com")); | 244 Value::CreateStringValue("http://www.example.com")); |
210 EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy())); | 245 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
211 } | 246 } |
212 | 247 |
213 TEST_F(CloudPolicyCacheTest, SetPolicy) { | 248 TEST_F(CloudPolicyCacheTest, SetPolicy) { |
214 CloudPolicyCache cache(test_file()); | 249 CloudPolicyCache cache(test_file()); |
215 scoped_ptr<em::CloudPolicyResponse> policy( | 250 em::CloudPolicyResponse* policy = |
216 CreateHomepagePolicy("http://www.example.com", | 251 CreateHomepagePolicy("http://www.example.com", |
217 base::Time::NowFromSystemTime(), | 252 base::Time::NowFromSystemTime(), |
218 em::PolicyOptions::MANDATORY)); | 253 em::PolicyOptions::MANDATORY); |
219 EXPECT_TRUE(cache.SetPolicy(*policy)); | 254 SetPolicy(&cache, policy, true); |
220 scoped_ptr<em::CloudPolicyResponse> policy2( | 255 em::CloudPolicyResponse* policy2 = |
221 CreateHomepagePolicy("http://www.example.com", | 256 CreateHomepagePolicy("http://www.example.com", |
222 base::Time::NowFromSystemTime(), | 257 base::Time::NowFromSystemTime(), |
223 em::PolicyOptions::MANDATORY)); | 258 em::PolicyOptions::MANDATORY); |
224 EXPECT_FALSE(cache.SetPolicy(*policy2)); | 259 SetPolicy(&cache, policy2, false); |
225 PolicyMap expected; | 260 PolicyMap expected; |
226 expected.Set(kPolicyHomepageLocation, | 261 expected.Set(kPolicyHomepageLocation, |
227 Value::CreateStringValue("http://www.example.com")); | 262 Value::CreateStringValue("http://www.example.com")); |
228 PolicyMap empty; | 263 PolicyMap empty; |
229 EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy())); | 264 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
230 EXPECT_TRUE(empty.Equals(*cache.GetRecommendedPolicy())); | 265 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); |
231 policy.reset(CreateHomepagePolicy("http://www.example.com", | 266 policy = CreateHomepagePolicy("http://www.example.com", |
232 base::Time::NowFromSystemTime(), | 267 base::Time::NowFromSystemTime(), |
233 em::PolicyOptions::RECOMMENDED)); | 268 em::PolicyOptions::RECOMMENDED); |
234 EXPECT_TRUE(cache.SetPolicy(*policy)); | 269 SetPolicy(&cache, policy, true); |
235 EXPECT_TRUE(expected.Equals(*cache.GetRecommendedPolicy())); | 270 EXPECT_TRUE(expected.Equals(recommended_policy(cache))); |
236 EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy())); | 271 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
237 } | 272 } |
238 | 273 |
239 TEST_F(CloudPolicyCacheTest, ResetPolicy) { | 274 TEST_F(CloudPolicyCacheTest, ResetPolicy) { |
240 CloudPolicyCache cache(test_file()); | 275 CloudPolicyCache cache(test_file()); |
241 | 276 |
242 scoped_ptr<em::CloudPolicyResponse> policy( | 277 em::CloudPolicyResponse* policy = |
243 CreateHomepagePolicy("http://www.example.com", | 278 CreateHomepagePolicy("http://www.example.com", |
244 base::Time::NowFromSystemTime(), | 279 base::Time::NowFromSystemTime(), |
245 em::PolicyOptions::MANDATORY)); | 280 em::PolicyOptions::MANDATORY); |
246 EXPECT_TRUE(cache.SetPolicy(*policy)); | 281 SetPolicy(&cache, policy, true); |
247 PolicyMap expected; | 282 PolicyMap expected; |
248 expected.Set(kPolicyHomepageLocation, | 283 expected.Set(kPolicyHomepageLocation, |
249 Value::CreateStringValue("http://www.example.com")); | 284 Value::CreateStringValue("http://www.example.com")); |
250 EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy())); | 285 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
251 | 286 |
252 scoped_ptr<em::CloudPolicyResponse> empty_policy( | 287 em::CloudPolicyResponse* empty_policy = |
253 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), | 288 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
254 em::PolicyOptions::MANDATORY)); | 289 em::PolicyOptions::MANDATORY); |
255 EXPECT_TRUE(cache.SetPolicy(*empty_policy)); | 290 SetPolicy(&cache, empty_policy, true); |
256 PolicyMap empty; | 291 PolicyMap empty; |
257 EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy())); | 292 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
258 } | 293 } |
259 | 294 |
260 TEST_F(CloudPolicyCacheTest, PersistPolicy) { | 295 TEST_F(CloudPolicyCacheTest, PersistPolicy) { |
261 { | 296 { |
262 CloudPolicyCache cache(test_file()); | 297 CloudPolicyCache cache(test_file()); |
263 scoped_ptr<em::CloudPolicyResponse> policy( | 298 scoped_ptr<em::CloudPolicyResponse> policy( |
264 CreateHomepagePolicy("http://www.example.com", | 299 CreateHomepagePolicy("http://www.example.com", |
265 base::Time::NowFromSystemTime(), | 300 base::Time::NowFromSystemTime(), |
266 em::PolicyOptions::MANDATORY)); | 301 em::PolicyOptions::MANDATORY)); |
267 cache.SetPolicy(*policy); | 302 cache.SetPolicy(*policy); |
268 } | 303 } |
269 | 304 |
270 loop_.RunAllPending(); | 305 loop_.RunAllPending(); |
271 | 306 |
272 EXPECT_TRUE(file_util::PathExists(test_file())); | 307 EXPECT_TRUE(file_util::PathExists(test_file())); |
273 CloudPolicyCache cache(test_file()); | 308 CloudPolicyCache cache(test_file()); |
274 cache.LoadPolicyFromFile(); | 309 cache.LoadFromFile(); |
275 PolicyMap expected; | 310 PolicyMap expected; |
276 expected.Set(kPolicyHomepageLocation, | 311 expected.Set(kPolicyHomepageLocation, |
277 Value::CreateStringValue("http://www.example.com")); | 312 Value::CreateStringValue("http://www.example.com")); |
278 EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy())); | 313 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
279 } | 314 } |
280 | 315 |
281 TEST_F(CloudPolicyCacheTest, FreshPolicyOverride) { | 316 TEST_F(CloudPolicyCacheTest, FreshPolicyOverride) { |
282 scoped_ptr<em::CloudPolicyResponse> policy( | 317 scoped_ptr<em::CloudPolicyResponse> policy( |
283 CreateHomepagePolicy("http://www.example.com", | 318 CreateHomepagePolicy("http://www.example.com", |
284 base::Time::NowFromSystemTime(), | 319 base::Time::NowFromSystemTime(), |
285 em::PolicyOptions::MANDATORY)); | 320 em::PolicyOptions::MANDATORY)); |
286 WritePolicy(*policy); | 321 WritePolicy(*policy); |
287 | 322 |
288 CloudPolicyCache cache(test_file()); | 323 CloudPolicyCache cache(test_file()); |
289 scoped_ptr<em::CloudPolicyResponse> updated_policy( | 324 em::CloudPolicyResponse* updated_policy = |
290 CreateHomepagePolicy("http://www.chromium.org", | 325 CreateHomepagePolicy("http://www.chromium.org", |
291 base::Time::NowFromSystemTime(), | 326 base::Time::NowFromSystemTime(), |
292 em::PolicyOptions::MANDATORY)); | 327 em::PolicyOptions::MANDATORY); |
293 EXPECT_TRUE(cache.SetPolicy(*updated_policy)); | 328 SetPolicy(&cache, updated_policy, true); |
294 | 329 |
295 cache.LoadPolicyFromFile(); | 330 cache.LoadFromFile(); |
296 PolicyMap expected; | 331 PolicyMap expected; |
297 expected.Set(kPolicyHomepageLocation, | 332 expected.Set(kPolicyHomepageLocation, |
298 Value::CreateStringValue("http://www.chromium.org")); | 333 Value::CreateStringValue("http://www.chromium.org")); |
299 EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy())); | 334 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
300 } | 335 } |
301 | 336 |
302 } // namespace policy | 337 } // namespace policy |
303 | 338 |
304 // ================================================================== | 339 // ================================================================== |
305 // Everything below this line can go when we phase out support for | 340 // Everything below this line can go when we phase out support for |
306 // the old (trusted testing/pilot program) policy format. | 341 // the old (trusted testing/pilot program) policy format. |
307 | 342 |
308 // This is a (slightly updated) copy of the old | 343 // This is a (slightly updated) copy of the old |
309 // device_management_policy_cache_unittest.cc. The new CloudPolicyCache | 344 // device_management_policy_cache_unittest.cc. The new CloudPolicyCache |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
356 cached_policy.set_timestamp(timestamp.ToTimeT()); | 391 cached_policy.set_timestamp(timestamp.ToTimeT()); |
357 EXPECT_TRUE(cached_policy.SerializeToString(&data)); | 392 EXPECT_TRUE(cached_policy.SerializeToString(&data)); |
358 int size = static_cast<int>(data.size()); | 393 int size = static_cast<int>(data.size()); |
359 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); | 394 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); |
360 } | 395 } |
361 | 396 |
362 FilePath test_file() { | 397 FilePath test_file() { |
363 return temp_dir_.path().AppendASCII("DeviceManagementPolicyCacheTest"); | 398 return temp_dir_.path().AppendASCII("DeviceManagementPolicyCacheTest"); |
364 } | 399 } |
365 | 400 |
366 protected: | 401 const DictionaryValue* device_policy(const CloudPolicyCache& cache) { |
402 return cache.device_policy_.get(); | |
403 } | |
404 | |
367 MessageLoop loop_; | 405 MessageLoop loop_; |
368 | 406 |
369 private: | 407 private: |
370 ScopedTempDir temp_dir_; | 408 ScopedTempDir temp_dir_; |
371 BrowserThread ui_thread_; | 409 BrowserThread ui_thread_; |
372 BrowserThread file_thread_; | 410 BrowserThread file_thread_; |
373 }; | 411 }; |
374 | 412 |
375 TEST_F(DeviceManagementPolicyCacheTest, Empty) { | 413 TEST_F(DeviceManagementPolicyCacheTest, Empty) { |
376 CloudPolicyCache cache(test_file()); | 414 CloudPolicyCache cache(test_file()); |
377 DictionaryValue empty; | 415 DictionaryValue empty; |
378 scoped_ptr<Value> policy(cache.GetDevicePolicy()); | 416 EXPECT_TRUE(empty.Equals(device_policy(cache))); |
379 EXPECT_TRUE(empty.Equals(policy.get())); | |
380 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 417 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
381 } | 418 } |
382 | 419 |
383 TEST_F(DeviceManagementPolicyCacheTest, LoadNoFile) { | 420 TEST_F(DeviceManagementPolicyCacheTest, LoadNoFile) { |
384 CloudPolicyCache cache(test_file()); | 421 CloudPolicyCache cache(test_file()); |
385 cache.LoadPolicyFromFile(); | 422 cache.LoadFromFile(); |
386 DictionaryValue empty; | 423 DictionaryValue empty; |
387 scoped_ptr<Value> policy(cache.GetDevicePolicy()); | 424 EXPECT_TRUE(empty.Equals(device_policy(cache))); |
388 EXPECT_TRUE(empty.Equals(policy.get())); | |
389 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 425 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
390 } | 426 } |
391 | 427 |
392 TEST_F(DeviceManagementPolicyCacheTest, RejectFuture) { | 428 TEST_F(DeviceManagementPolicyCacheTest, RejectFuture) { |
393 em::DevicePolicyResponse policy_response; | 429 em::DevicePolicyResponse policy_response; |
394 WritePolicy(policy_response, base::Time::NowFromSystemTime() + | 430 WritePolicy(policy_response, base::Time::NowFromSystemTime() + |
395 base::TimeDelta::FromMinutes(5)); | 431 base::TimeDelta::FromMinutes(5)); |
396 CloudPolicyCache cache(test_file()); | 432 CloudPolicyCache cache(test_file()); |
397 cache.LoadPolicyFromFile(); | 433 cache.LoadFromFile(); |
398 DictionaryValue empty; | 434 DictionaryValue empty; |
399 scoped_ptr<Value> policy(cache.GetDevicePolicy()); | 435 EXPECT_TRUE(empty.Equals(device_policy(cache))); |
400 EXPECT_TRUE(empty.Equals(policy.get())); | |
401 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 436 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
402 } | 437 } |
403 | 438 |
404 TEST_F(DeviceManagementPolicyCacheTest, LoadWithFile) { | 439 TEST_F(DeviceManagementPolicyCacheTest, LoadWithFile) { |
405 em::DevicePolicyResponse policy_response; | 440 em::DevicePolicyResponse policy_response; |
406 WritePolicy(policy_response, base::Time::NowFromSystemTime()); | 441 WritePolicy(policy_response, base::Time::NowFromSystemTime()); |
407 CloudPolicyCache cache(test_file()); | 442 CloudPolicyCache cache(test_file()); |
408 cache.LoadPolicyFromFile(); | 443 cache.LoadFromFile(); |
409 DictionaryValue empty; | 444 DictionaryValue empty; |
410 scoped_ptr<Value> policy(cache.GetDevicePolicy()); | 445 EXPECT_TRUE(empty.Equals(device_policy(cache))); |
411 EXPECT_TRUE(empty.Equals(policy.get())); | |
412 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); | 446 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); |
413 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); | 447 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); |
414 } | 448 } |
415 | 449 |
416 TEST_F(DeviceManagementPolicyCacheTest, LoadWithData) { | 450 TEST_F(DeviceManagementPolicyCacheTest, LoadWithData) { |
417 em::DevicePolicyResponse policy; | 451 em::DevicePolicyResponse policy; |
418 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 452 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
419 WritePolicy(policy, base::Time::NowFromSystemTime()); | 453 WritePolicy(policy, base::Time::NowFromSystemTime()); |
420 CloudPolicyCache cache(test_file()); | 454 CloudPolicyCache cache(test_file()); |
421 cache.LoadPolicyFromFile(); | 455 cache.LoadFromFile(); |
422 DictionaryValue expected; | 456 DictionaryValue expected; |
423 expected.Set("HomepageLocation", | 457 expected.Set("HomepageLocation", |
424 Value::CreateStringValue("http://www.example.com")); | 458 Value::CreateStringValue("http://www.example.com")); |
425 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); | 459 EXPECT_TRUE(expected.Equals(device_policy(cache))); |
426 EXPECT_TRUE(expected.Equals(policy_value.get())); | |
427 } | 460 } |
428 | 461 |
429 TEST_F(DeviceManagementPolicyCacheTest, SetDevicePolicy) { | 462 TEST_F(DeviceManagementPolicyCacheTest, SetDevicePolicy) { |
430 CloudPolicyCache cache(test_file()); | 463 CloudPolicyCache cache(test_file()); |
431 em::DevicePolicyResponse policy; | 464 em::DevicePolicyResponse policy; |
432 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 465 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
433 EXPECT_TRUE(cache.SetDevicePolicy(policy)); | 466 cache.SetDevicePolicy(policy); |
434 em::DevicePolicyResponse policy2; | 467 em::DevicePolicyResponse policy2; |
435 AddStringPolicy(&policy2, "HomepageLocation", "http://www.example.com"); | 468 AddStringPolicy(&policy2, "HomepageLocation", "http://www.example.com"); |
436 EXPECT_FALSE(cache.SetDevicePolicy(policy2)); | 469 cache.SetDevicePolicy(policy2); // Does not notify observers. |
437 DictionaryValue expected; | 470 DictionaryValue expected; |
438 expected.Set("HomepageLocation", | 471 expected.Set("HomepageLocation", |
439 Value::CreateStringValue("http://www.example.com")); | 472 Value::CreateStringValue("http://www.example.com")); |
440 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); | 473 EXPECT_TRUE(expected.Equals(device_policy(cache))); |
441 EXPECT_TRUE(expected.Equals(policy_value.get())); | |
442 } | 474 } |
443 | 475 |
444 TEST_F(DeviceManagementPolicyCacheTest, ResetPolicy) { | 476 TEST_F(DeviceManagementPolicyCacheTest, ResetPolicy) { |
445 CloudPolicyCache cache(test_file()); | 477 CloudPolicyCache cache(test_file()); |
446 | 478 |
447 em::DevicePolicyResponse policy; | 479 em::DevicePolicyResponse policy; |
448 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 480 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
449 EXPECT_TRUE(cache.SetDevicePolicy(policy)); | 481 cache.SetDevicePolicy(policy); |
450 DictionaryValue expected; | 482 DictionaryValue expected; |
451 expected.Set("HomepageLocation", | 483 expected.Set("HomepageLocation", |
452 Value::CreateStringValue("http://www.example.com")); | 484 Value::CreateStringValue("http://www.example.com")); |
453 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); | 485 EXPECT_TRUE(expected.Equals(device_policy(cache))); |
454 EXPECT_TRUE(expected.Equals(policy_value.get())); | |
455 | 486 |
456 EXPECT_TRUE(cache.SetDevicePolicy(em::DevicePolicyResponse())); | 487 cache.SetDevicePolicy(em::DevicePolicyResponse()); |
457 policy_value.reset(cache.GetDevicePolicy()); | |
458 DictionaryValue empty; | 488 DictionaryValue empty; |
459 EXPECT_TRUE(empty.Equals(policy_value.get())); | 489 EXPECT_TRUE(empty.Equals(device_policy(cache))); |
460 } | 490 } |
461 | 491 |
462 TEST_F(DeviceManagementPolicyCacheTest, PersistPolicy) { | 492 TEST_F(DeviceManagementPolicyCacheTest, PersistPolicy) { |
463 { | 493 { |
464 CloudPolicyCache cache(test_file()); | 494 CloudPolicyCache cache(test_file()); |
465 em::DevicePolicyResponse policy; | 495 em::DevicePolicyResponse policy; |
466 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 496 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
467 cache.SetDevicePolicy(policy); | 497 cache.SetDevicePolicy(policy); |
468 } | 498 } |
469 | 499 |
470 loop_.RunAllPending(); | 500 loop_.RunAllPending(); |
471 | 501 |
472 EXPECT_TRUE(file_util::PathExists(test_file())); | 502 EXPECT_TRUE(file_util::PathExists(test_file())); |
473 CloudPolicyCache cache(test_file()); | 503 CloudPolicyCache cache(test_file()); |
474 cache.LoadPolicyFromFile(); | 504 cache.LoadFromFile(); |
475 DictionaryValue expected; | 505 DictionaryValue expected; |
476 expected.Set("HomepageLocation", | 506 expected.Set("HomepageLocation", |
477 Value::CreateStringValue("http://www.example.com")); | 507 Value::CreateStringValue("http://www.example.com")); |
478 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); | 508 EXPECT_TRUE(expected.Equals(device_policy(cache))); |
479 EXPECT_TRUE(expected.Equals(policy_value.get())); | |
480 } | 509 } |
481 | 510 |
482 TEST_F(DeviceManagementPolicyCacheTest, FreshPolicyOverride) { | 511 TEST_F(DeviceManagementPolicyCacheTest, FreshPolicyOverride) { |
483 em::DevicePolicyResponse policy; | 512 em::DevicePolicyResponse policy; |
484 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 513 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
485 WritePolicy(policy, base::Time::NowFromSystemTime()); | 514 WritePolicy(policy, base::Time::NowFromSystemTime()); |
486 | 515 |
487 CloudPolicyCache cache(test_file()); | 516 CloudPolicyCache cache(test_file()); |
488 em::DevicePolicyResponse updated_policy; | 517 em::DevicePolicyResponse updated_policy; |
489 AddStringPolicy(&updated_policy, "HomepageLocation", | 518 AddStringPolicy(&updated_policy, "HomepageLocation", |
490 "http://www.chromium.org"); | 519 "http://www.chromium.org"); |
491 EXPECT_TRUE(cache.SetDevicePolicy(updated_policy)); | 520 cache.SetDevicePolicy(updated_policy); |
492 | 521 |
493 cache.LoadPolicyFromFile(); | 522 cache.LoadFromFile(); |
494 DictionaryValue expected; | 523 DictionaryValue expected; |
495 expected.Set("HomepageLocation", | 524 expected.Set("HomepageLocation", |
496 Value::CreateStringValue("http://www.chromium.org")); | 525 Value::CreateStringValue("http://www.chromium.org")); |
497 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); | 526 EXPECT_TRUE(expected.Equals(device_policy(cache))); |
498 EXPECT_TRUE(expected.Equals(policy_value.get())); | |
499 } | 527 } |
500 | 528 |
501 // Tests proper decoding of policy values. | 529 // Tests proper decoding of policy values. |
502 class DeviceManagementPolicyCacheDecodeTest | 530 class DeviceManagementPolicyCacheDecodeTest |
503 : public DeviceManagementPolicyCacheTestBase { | 531 : public DeviceManagementPolicyCacheTestBase { |
504 protected: | 532 protected: |
505 void DecodeAndCheck(Value* expected_value_ptr) { | 533 void DecodeAndCheck(Value* expected_value_ptr) { |
506 scoped_ptr<Value> expected_value(expected_value_ptr); | 534 scoped_ptr<Value> expected_value(expected_value_ptr); |
507 scoped_ptr<Value> decoded_value( | 535 scoped_ptr<Value> decoded_value( |
508 CloudPolicyCache::DecodeValue(value_)); | 536 CloudPolicyCache::DecodeValue(value_)); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
611 em::DevicePolicyResponse policy; | 639 em::DevicePolicyResponse policy; |
612 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 640 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
613 scoped_ptr<Value> decoded(DecodeDevicePolicy(policy)); | 641 scoped_ptr<Value> decoded(DecodeDevicePolicy(policy)); |
614 DictionaryValue expected; | 642 DictionaryValue expected; |
615 expected.Set("HomepageLocation", | 643 expected.Set("HomepageLocation", |
616 Value::CreateStringValue("http://www.example.com")); | 644 Value::CreateStringValue("http://www.example.com")); |
617 EXPECT_TRUE(expected.Equals(decoded.get())); | 645 EXPECT_TRUE(expected.Equals(decoded.get())); |
618 } | 646 } |
619 | 647 |
620 } // namespace policy | 648 } // namespace policy |
OLD | NEW |