Chromium Code Reviews| 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 |