| 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" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 file_thread_(BrowserThread::FILE, &loop_) {} | 51 file_thread_(BrowserThread::FILE, &loop_) {} |
| 52 | 52 |
| 53 void SetUp() { | 53 void SetUp() { |
| 54 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 54 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 55 } | 55 } |
| 56 | 56 |
| 57 void TearDown() { | 57 void TearDown() { |
| 58 loop_.RunAllPending(); | 58 loop_.RunAllPending(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 // Creates a (signed) CloudPolicyResponse setting the given |homepage| and | 61 // Creates a (signed) PolicyFetchResponse setting the given |homepage| and |
| 62 // featuring the given |timestamp| (as issued by the server). | 62 // featuring the given |timestamp| (as issued by the server). |
| 63 // Mildly hacky special feature: pass an empty string as |homepage| to get | 63 // Mildly hacky special feature: pass an empty string as |homepage| to get |
| 64 // a completely empty policy. | 64 // a completely empty policy. |
| 65 em::CloudPolicyResponse* CreateHomepagePolicy( | 65 em::PolicyFetchResponse* CreateHomepagePolicy( |
| 66 const std::string& homepage, | 66 const std::string& homepage, |
| 67 const base::Time& timestamp, | 67 const base::Time& timestamp, |
| 68 const em::PolicyOptions::PolicyMode policy_mode) { | 68 const em::PolicyOptions::PolicyMode policy_mode) { |
| 69 em::SignedCloudPolicyResponse signed_response; | 69 em::PolicyData signed_response; |
| 70 if (homepage != "") { | 70 if (homepage != "") { |
| 71 em::CloudPolicySettings* settings = signed_response.mutable_settings(); | 71 em::CloudPolicySettings settings; |
| 72 em::HomepageLocationProto* homepagelocation_proto = | 72 em::HomepageLocationProto* homepagelocation_proto = |
| 73 settings->mutable_homepagelocation(); | 73 settings.mutable_homepagelocation(); |
| 74 homepagelocation_proto->set_homepagelocation(homepage); | 74 homepagelocation_proto->set_homepagelocation(homepage); |
| 75 homepagelocation_proto->mutable_policy_options()->set_mode(policy_mode); | 75 homepagelocation_proto->mutable_policy_options()->set_mode(policy_mode); |
| 76 EXPECT_TRUE( |
| 77 settings.SerializeToString(signed_response.mutable_policy_value())); |
| 76 } | 78 } |
| 77 signed_response.set_timestamp(timestamp.ToTimeT()); | 79 signed_response.set_timestamp( |
| 80 (timestamp - base::Time::UnixEpoch()).InMilliseconds()); |
| 78 std::string serialized_signed_response; | 81 std::string serialized_signed_response; |
| 79 EXPECT_TRUE(signed_response.SerializeToString(&serialized_signed_response)); | 82 EXPECT_TRUE(signed_response.SerializeToString(&serialized_signed_response)); |
| 80 | 83 |
| 81 em::CloudPolicyResponse* response = new em::CloudPolicyResponse; | 84 em::PolicyFetchResponse* response = new em::PolicyFetchResponse; |
| 82 response->set_signed_response(serialized_signed_response); | 85 response->set_policy_data(serialized_signed_response); |
| 83 // TODO(jkummerow): Set proper certificate_chain and signature (when | 86 // TODO(jkummerow): Set proper certificate_chain and signature (when |
| 84 // implementing support for signature verification). | 87 // implementing support for signature verification). |
| 85 response->set_signature("TODO"); | 88 response->set_policy_data_signature("TODO"); |
| 86 response->add_certificate_chain("TODO"); | 89 response->add_certificate_chain("TODO"); |
| 87 return response; | 90 return response; |
| 88 } | 91 } |
| 89 | 92 |
| 90 void WritePolicy(const em::CloudPolicyResponse& policy) { | 93 void WritePolicy(const em::PolicyFetchResponse& policy) { |
| 91 std::string data; | 94 std::string data; |
| 92 em::CachedCloudPolicyResponse cached_policy; | 95 em::CachedCloudPolicyResponse cached_policy; |
| 93 cached_policy.mutable_cloud_policy()->CopyFrom(policy); | 96 cached_policy.mutable_cloud_policy()->CopyFrom(policy); |
| 94 EXPECT_TRUE(cached_policy.SerializeToString(&data)); | 97 EXPECT_TRUE(cached_policy.SerializeToString(&data)); |
| 95 int size = static_cast<int>(data.size()); | 98 int size = static_cast<int>(data.size()); |
| 96 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); | 99 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); |
| 97 } | 100 } |
| 98 | 101 |
| 99 // Takes ownership of |policy_response|. | 102 // Takes ownership of |policy_response|. |
| 100 void SetPolicy(CloudPolicyCache* cache, | 103 void SetPolicy(CloudPolicyCache* cache, |
| 101 em::CloudPolicyResponse* policy_response, | 104 em::PolicyFetchResponse* policy_response, |
| 102 bool expect_changed_policy) { | 105 bool expect_changed_policy) { |
| 103 scoped_ptr<em::CloudPolicyResponse> policy(policy_response); | 106 scoped_ptr<em::PolicyFetchResponse> policy(policy_response); |
| 104 ConfigurationPolicyObserverRegistrar registrar; | 107 ConfigurationPolicyObserverRegistrar registrar; |
| 105 registrar.Init(cache->GetManagedPolicyProvider(), &observer); | 108 registrar.Init(cache->GetManagedPolicyProvider(), &observer); |
| 106 if (expect_changed_policy) | 109 if (expect_changed_policy) |
| 107 EXPECT_CALL(observer, OnUpdatePolicy()).Times(1); | 110 EXPECT_CALL(observer, OnUpdatePolicy()).Times(1); |
| 108 else | 111 else |
| 109 EXPECT_CALL(observer, OnUpdatePolicy()).Times(0); | 112 EXPECT_CALL(observer, OnUpdatePolicy()).Times(0); |
| 110 cache->SetPolicy(*policy); | 113 cache->SetPolicy(*policy); |
| 111 testing::Mock::VerifyAndClearExpectations(&observer); | 114 testing::Mock::VerifyAndClearExpectations(&observer); |
| 112 } | 115 } |
| 113 | 116 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 | 202 |
| 200 TEST_F(CloudPolicyCacheTest, LoadNoFile) { | 203 TEST_F(CloudPolicyCacheTest, LoadNoFile) { |
| 201 CloudPolicyCache cache(test_file()); | 204 CloudPolicyCache cache(test_file()); |
| 202 cache.LoadFromFile(); | 205 cache.LoadFromFile(); |
| 203 PolicyMap empty; | 206 PolicyMap empty; |
| 204 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 207 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 205 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 208 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 206 } | 209 } |
| 207 | 210 |
| 208 TEST_F(CloudPolicyCacheTest, RejectFuture) { | 211 TEST_F(CloudPolicyCacheTest, RejectFuture) { |
| 209 scoped_ptr<em::CloudPolicyResponse> policy_response( | 212 scoped_ptr<em::PolicyFetchResponse> policy_response( |
| 210 CreateHomepagePolicy("", base::Time::NowFromSystemTime() + | 213 CreateHomepagePolicy("", base::Time::NowFromSystemTime() + |
| 211 base::TimeDelta::FromMinutes(5), | 214 base::TimeDelta::FromMinutes(5), |
| 212 em::PolicyOptions::MANDATORY)); | 215 em::PolicyOptions::MANDATORY)); |
| 213 WritePolicy(*policy_response); | 216 WritePolicy(*policy_response); |
| 214 CloudPolicyCache cache(test_file()); | 217 CloudPolicyCache cache(test_file()); |
| 215 cache.LoadFromFile(); | 218 cache.LoadFromFile(); |
| 216 PolicyMap empty; | 219 PolicyMap empty; |
| 217 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 220 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 218 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 221 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 219 } | 222 } |
| 220 | 223 |
| 221 TEST_F(CloudPolicyCacheTest, LoadWithFile) { | 224 TEST_F(CloudPolicyCacheTest, LoadWithFile) { |
| 222 scoped_ptr<em::CloudPolicyResponse> policy_response( | 225 scoped_ptr<em::PolicyFetchResponse> policy_response( |
| 223 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), | 226 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
| 224 em::PolicyOptions::MANDATORY)); | 227 em::PolicyOptions::MANDATORY)); |
| 225 WritePolicy(*policy_response); | 228 WritePolicy(*policy_response); |
| 226 CloudPolicyCache cache(test_file()); | 229 CloudPolicyCache cache(test_file()); |
| 227 cache.LoadFromFile(); | 230 cache.LoadFromFile(); |
| 228 PolicyMap empty; | 231 PolicyMap empty; |
| 229 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 232 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 230 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); | 233 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); |
| 231 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); | 234 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); |
| 232 } | 235 } |
| 233 | 236 |
| 234 TEST_F(CloudPolicyCacheTest, LoadWithData) { | 237 TEST_F(CloudPolicyCacheTest, LoadWithData) { |
| 235 scoped_ptr<em::CloudPolicyResponse> policy( | 238 scoped_ptr<em::PolicyFetchResponse> policy( |
| 236 CreateHomepagePolicy("http://www.example.com", | 239 CreateHomepagePolicy("http://www.example.com", |
| 237 base::Time::NowFromSystemTime(), | 240 base::Time::NowFromSystemTime(), |
| 238 em::PolicyOptions::MANDATORY)); | 241 em::PolicyOptions::MANDATORY)); |
| 239 WritePolicy(*policy); | 242 WritePolicy(*policy); |
| 240 CloudPolicyCache cache(test_file()); | 243 CloudPolicyCache cache(test_file()); |
| 241 cache.LoadFromFile(); | 244 cache.LoadFromFile(); |
| 242 PolicyMap expected; | 245 PolicyMap expected; |
| 243 expected.Set(kPolicyHomepageLocation, | 246 expected.Set(kPolicyHomepageLocation, |
| 244 Value::CreateStringValue("http://www.example.com")); | 247 Value::CreateStringValue("http://www.example.com")); |
| 245 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 248 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 246 } | 249 } |
| 247 | 250 |
| 248 TEST_F(CloudPolicyCacheTest, SetPolicy) { | 251 TEST_F(CloudPolicyCacheTest, SetPolicy) { |
| 249 CloudPolicyCache cache(test_file()); | 252 CloudPolicyCache cache(test_file()); |
| 250 em::CloudPolicyResponse* policy = | 253 em::PolicyFetchResponse* policy = |
| 251 CreateHomepagePolicy("http://www.example.com", | 254 CreateHomepagePolicy("http://www.example.com", |
| 252 base::Time::NowFromSystemTime(), | 255 base::Time::NowFromSystemTime(), |
| 253 em::PolicyOptions::MANDATORY); | 256 em::PolicyOptions::MANDATORY); |
| 254 SetPolicy(&cache, policy, true); | 257 SetPolicy(&cache, policy, true); |
| 255 em::CloudPolicyResponse* policy2 = | 258 em::PolicyFetchResponse* policy2 = |
| 256 CreateHomepagePolicy("http://www.example.com", | 259 CreateHomepagePolicy("http://www.example.com", |
| 257 base::Time::NowFromSystemTime(), | 260 base::Time::NowFromSystemTime(), |
| 258 em::PolicyOptions::MANDATORY); | 261 em::PolicyOptions::MANDATORY); |
| 259 SetPolicy(&cache, policy2, false); | 262 SetPolicy(&cache, policy2, false); |
| 260 PolicyMap expected; | 263 PolicyMap expected; |
| 261 expected.Set(kPolicyHomepageLocation, | 264 expected.Set(kPolicyHomepageLocation, |
| 262 Value::CreateStringValue("http://www.example.com")); | 265 Value::CreateStringValue("http://www.example.com")); |
| 263 PolicyMap empty; | 266 PolicyMap empty; |
| 264 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 267 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 265 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); | 268 EXPECT_TRUE(empty.Equals(recommended_policy(cache))); |
| 266 policy = CreateHomepagePolicy("http://www.example.com", | 269 policy = CreateHomepagePolicy("http://www.example.com", |
| 267 base::Time::NowFromSystemTime(), | 270 base::Time::NowFromSystemTime(), |
| 268 em::PolicyOptions::RECOMMENDED); | 271 em::PolicyOptions::RECOMMENDED); |
| 269 SetPolicy(&cache, policy, true); | 272 SetPolicy(&cache, policy, true); |
| 270 EXPECT_TRUE(expected.Equals(recommended_policy(cache))); | 273 EXPECT_TRUE(expected.Equals(recommended_policy(cache))); |
| 271 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 274 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 272 } | 275 } |
| 273 | 276 |
| 274 TEST_F(CloudPolicyCacheTest, ResetPolicy) { | 277 TEST_F(CloudPolicyCacheTest, ResetPolicy) { |
| 275 CloudPolicyCache cache(test_file()); | 278 CloudPolicyCache cache(test_file()); |
| 276 | 279 |
| 277 em::CloudPolicyResponse* policy = | 280 em::PolicyFetchResponse* policy = |
| 278 CreateHomepagePolicy("http://www.example.com", | 281 CreateHomepagePolicy("http://www.example.com", |
| 279 base::Time::NowFromSystemTime(), | 282 base::Time::NowFromSystemTime(), |
| 280 em::PolicyOptions::MANDATORY); | 283 em::PolicyOptions::MANDATORY); |
| 281 SetPolicy(&cache, policy, true); | 284 SetPolicy(&cache, policy, true); |
| 282 PolicyMap expected; | 285 PolicyMap expected; |
| 283 expected.Set(kPolicyHomepageLocation, | 286 expected.Set(kPolicyHomepageLocation, |
| 284 Value::CreateStringValue("http://www.example.com")); | 287 Value::CreateStringValue("http://www.example.com")); |
| 285 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 288 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 286 | 289 |
| 287 em::CloudPolicyResponse* empty_policy = | 290 em::PolicyFetchResponse* empty_policy = |
| 288 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), | 291 CreateHomepagePolicy("", base::Time::NowFromSystemTime(), |
| 289 em::PolicyOptions::MANDATORY); | 292 em::PolicyOptions::MANDATORY); |
| 290 SetPolicy(&cache, empty_policy, true); | 293 SetPolicy(&cache, empty_policy, true); |
| 291 PolicyMap empty; | 294 PolicyMap empty; |
| 292 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); | 295 EXPECT_TRUE(empty.Equals(mandatory_policy(cache))); |
| 293 } | 296 } |
| 294 | 297 |
| 295 TEST_F(CloudPolicyCacheTest, PersistPolicy) { | 298 TEST_F(CloudPolicyCacheTest, PersistPolicy) { |
| 296 { | 299 { |
| 297 CloudPolicyCache cache(test_file()); | 300 CloudPolicyCache cache(test_file()); |
| 298 scoped_ptr<em::CloudPolicyResponse> policy( | 301 scoped_ptr<em::PolicyFetchResponse> policy( |
| 299 CreateHomepagePolicy("http://www.example.com", | 302 CreateHomepagePolicy("http://www.example.com", |
| 300 base::Time::NowFromSystemTime(), | 303 base::Time::NowFromSystemTime(), |
| 301 em::PolicyOptions::MANDATORY)); | 304 em::PolicyOptions::MANDATORY)); |
| 302 cache.SetPolicy(*policy); | 305 cache.SetPolicy(*policy); |
| 303 } | 306 } |
| 304 | 307 |
| 305 loop_.RunAllPending(); | 308 loop_.RunAllPending(); |
| 306 | 309 |
| 307 EXPECT_TRUE(file_util::PathExists(test_file())); | 310 EXPECT_TRUE(file_util::PathExists(test_file())); |
| 308 CloudPolicyCache cache(test_file()); | 311 CloudPolicyCache cache(test_file()); |
| 309 cache.LoadFromFile(); | 312 cache.LoadFromFile(); |
| 310 PolicyMap expected; | 313 PolicyMap expected; |
| 311 expected.Set(kPolicyHomepageLocation, | 314 expected.Set(kPolicyHomepageLocation, |
| 312 Value::CreateStringValue("http://www.example.com")); | 315 Value::CreateStringValue("http://www.example.com")); |
| 313 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 316 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| 314 } | 317 } |
| 315 | 318 |
| 316 TEST_F(CloudPolicyCacheTest, FreshPolicyOverride) { | 319 TEST_F(CloudPolicyCacheTest, FreshPolicyOverride) { |
| 317 scoped_ptr<em::CloudPolicyResponse> policy( | 320 scoped_ptr<em::PolicyFetchResponse> policy( |
| 318 CreateHomepagePolicy("http://www.example.com", | 321 CreateHomepagePolicy("http://www.example.com", |
| 319 base::Time::NowFromSystemTime(), | 322 base::Time::NowFromSystemTime(), |
| 320 em::PolicyOptions::MANDATORY)); | 323 em::PolicyOptions::MANDATORY)); |
| 321 WritePolicy(*policy); | 324 WritePolicy(*policy); |
| 322 | 325 |
| 323 CloudPolicyCache cache(test_file()); | 326 CloudPolicyCache cache(test_file()); |
| 324 em::CloudPolicyResponse* updated_policy = | 327 em::PolicyFetchResponse* updated_policy = |
| 325 CreateHomepagePolicy("http://www.chromium.org", | 328 CreateHomepagePolicy("http://www.chromium.org", |
| 326 base::Time::NowFromSystemTime(), | 329 base::Time::NowFromSystemTime(), |
| 327 em::PolicyOptions::MANDATORY); | 330 em::PolicyOptions::MANDATORY); |
| 328 SetPolicy(&cache, updated_policy, true); | 331 SetPolicy(&cache, updated_policy, true); |
| 329 | 332 |
| 330 cache.LoadFromFile(); | 333 cache.LoadFromFile(); |
| 331 PolicyMap expected; | 334 PolicyMap expected; |
| 332 expected.Set(kPolicyHomepageLocation, | 335 expected.Set(kPolicyHomepageLocation, |
| 333 Value::CreateStringValue("http://www.chromium.org")); | 336 Value::CreateStringValue("http://www.chromium.org")); |
| 334 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); | 337 EXPECT_TRUE(expected.Equals(mandatory_policy(cache))); |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 em::DevicePolicyResponse policy; | 642 em::DevicePolicyResponse policy; |
| 640 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 643 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
| 641 scoped_ptr<Value> decoded(DecodeDevicePolicy(policy)); | 644 scoped_ptr<Value> decoded(DecodeDevicePolicy(policy)); |
| 642 DictionaryValue expected; | 645 DictionaryValue expected; |
| 643 expected.Set("HomepageLocation", | 646 expected.Set("HomepageLocation", |
| 644 Value::CreateStringValue("http://www.example.com")); | 647 Value::CreateStringValue("http://www.example.com")); |
| 645 EXPECT_TRUE(expected.Equals(decoded.get())); | 648 EXPECT_TRUE(expected.Equals(decoded.get())); |
| 646 } | 649 } |
| 647 | 650 |
| 648 } // namespace policy | 651 } // namespace policy |
| OLD | NEW |