| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/device_management_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/proto/device_management_constants.h" | 15 #include "chrome/browser/policy/proto/device_management_constants.h" |
| 16 #include "chrome/browser/policy/proto/device_management_local.pb.h" | 16 #include "chrome/browser/policy/proto/device_management_local.pb.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 18 |
| 19 // This test used to test DeviceManagementPolicyCache. The new CloudPolicyCache |
| 20 // supports the old DMPC's interface for now (until it is phased out), so for |
| 21 // this transitional period, we keep these old test cases but apply them to the |
| 22 // new implementation (CPC). |
| 23 // This file can be removed when support for the old policy protocol is removed |
| 24 // from CPC. The new interface is tested in cloud_policy_cache_unittest.cc. |
| 25 |
| 19 namespace policy { | 26 namespace policy { |
| 20 | 27 |
| 21 // Wraps base functionaly for the test cases. | 28 // Wraps base functionaly for the test cases. |
| 22 class DeviceManagementPolicyCacheTestBase : public testing::Test { | 29 class DeviceManagementPolicyCacheTestBase : public testing::Test { |
| 23 protected: | 30 protected: |
| 24 // Add a string policy setting to a policy response message. | 31 // Add a string policy setting to a policy response message. |
| 25 void AddStringPolicy(em::DevicePolicyResponse* policy, | 32 void AddStringPolicy(em::DevicePolicyResponse* policy, |
| 26 const std::string& name, | 33 const std::string& name, |
| 27 const std::string& value) { | 34 const std::string& value) { |
| 28 em::DevicePolicySetting* setting = policy->add_setting(); | 35 em::DevicePolicySetting* setting = policy->add_setting(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 49 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 56 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 50 } | 57 } |
| 51 | 58 |
| 52 void TearDown() { | 59 void TearDown() { |
| 53 loop_.RunAllPending(); | 60 loop_.RunAllPending(); |
| 54 } | 61 } |
| 55 | 62 |
| 56 void WritePolicy(const em::DevicePolicyResponse& policy, | 63 void WritePolicy(const em::DevicePolicyResponse& policy, |
| 57 const base::Time& timestamp) { | 64 const base::Time& timestamp) { |
| 58 std::string data; | 65 std::string data; |
| 59 em::CachedDevicePolicyResponse cached_policy; | 66 em::CachedCloudPolicyResponse cached_policy; |
| 60 cached_policy.mutable_policy()->CopyFrom(policy); | 67 cached_policy.mutable_device_policy()->CopyFrom(policy); |
| 61 cached_policy.set_timestamp(timestamp.ToInternalValue()); | 68 cached_policy.set_timestamp(timestamp.ToTimeT()); |
| 62 EXPECT_TRUE(cached_policy.SerializeToString(&data)); | 69 EXPECT_TRUE(cached_policy.SerializeToString(&data)); |
| 63 int size = static_cast<int>(data.size()); | 70 int size = static_cast<int>(data.size()); |
| 64 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); | 71 EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size)); |
| 65 } | 72 } |
| 66 | 73 |
| 67 FilePath test_file() { | 74 FilePath test_file() { |
| 68 return temp_dir_.path().AppendASCII("DeviceManagementPolicyCacheTest"); | 75 return temp_dir_.path().AppendASCII("DeviceManagementPolicyCacheTest"); |
| 69 } | 76 } |
| 70 | 77 |
| 71 protected: | 78 protected: |
| 72 MessageLoop loop_; | 79 MessageLoop loop_; |
| 73 | 80 |
| 74 private: | 81 private: |
| 75 ScopedTempDir temp_dir_; | 82 ScopedTempDir temp_dir_; |
| 76 BrowserThread ui_thread_; | 83 BrowserThread ui_thread_; |
| 77 BrowserThread file_thread_; | 84 BrowserThread file_thread_; |
| 78 }; | 85 }; |
| 79 | 86 |
| 80 TEST_F(DeviceManagementPolicyCacheTest, Empty) { | 87 TEST_F(DeviceManagementPolicyCacheTest, Empty) { |
| 81 DeviceManagementPolicyCache cache(test_file()); | 88 CloudPolicyCache cache(test_file()); |
| 82 DictionaryValue empty; | 89 DictionaryValue empty; |
| 83 scoped_ptr<Value> policy(cache.GetPolicy()); | 90 scoped_ptr<Value> policy(cache.GetDevicePolicy()); |
| 84 EXPECT_TRUE(empty.Equals(policy.get())); | 91 EXPECT_TRUE(empty.Equals(policy.get())); |
| 85 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 92 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 86 } | 93 } |
| 87 | 94 |
| 88 TEST_F(DeviceManagementPolicyCacheTest, LoadNoFile) { | 95 TEST_F(DeviceManagementPolicyCacheTest, LoadNoFile) { |
| 89 DeviceManagementPolicyCache cache(test_file()); | 96 CloudPolicyCache cache(test_file()); |
| 90 cache.LoadPolicyFromFile(); | 97 cache.LoadPolicyFromFile(); |
| 91 DictionaryValue empty; | 98 DictionaryValue empty; |
| 92 scoped_ptr<Value> policy(cache.GetPolicy()); | 99 scoped_ptr<Value> policy(cache.GetDevicePolicy()); |
| 93 EXPECT_TRUE(empty.Equals(policy.get())); | 100 EXPECT_TRUE(empty.Equals(policy.get())); |
| 94 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 101 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 95 } | 102 } |
| 96 | 103 |
| 97 TEST_F(DeviceManagementPolicyCacheTest, RejectFuture) { | 104 TEST_F(DeviceManagementPolicyCacheTest, RejectFuture) { |
| 98 em::DevicePolicyResponse policy_response; | 105 em::DevicePolicyResponse policy_response; |
| 99 WritePolicy(policy_response, base::Time::NowFromSystemTime() + | 106 WritePolicy(policy_response, base::Time::NowFromSystemTime() + |
| 100 base::TimeDelta::FromMinutes(5)); | 107 base::TimeDelta::FromMinutes(5)); |
| 101 DeviceManagementPolicyCache cache(test_file()); | 108 CloudPolicyCache cache(test_file()); |
| 102 cache.LoadPolicyFromFile(); | 109 cache.LoadPolicyFromFile(); |
| 103 DictionaryValue empty; | 110 DictionaryValue empty; |
| 104 scoped_ptr<Value> policy(cache.GetPolicy()); | 111 scoped_ptr<Value> policy(cache.GetDevicePolicy()); |
| 105 EXPECT_TRUE(empty.Equals(policy.get())); | 112 EXPECT_TRUE(empty.Equals(policy.get())); |
| 106 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); | 113 EXPECT_EQ(base::Time(), cache.last_policy_refresh_time()); |
| 107 } | 114 } |
| 108 | 115 |
| 109 TEST_F(DeviceManagementPolicyCacheTest, LoadWithFile) { | 116 TEST_F(DeviceManagementPolicyCacheTest, LoadWithFile) { |
| 110 em::DevicePolicyResponse policy_response; | 117 em::DevicePolicyResponse policy_response; |
| 111 WritePolicy(policy_response, base::Time::NowFromSystemTime()); | 118 WritePolicy(policy_response, base::Time::NowFromSystemTime()); |
| 112 DeviceManagementPolicyCache cache(test_file()); | 119 CloudPolicyCache cache(test_file()); |
| 113 cache.LoadPolicyFromFile(); | 120 cache.LoadPolicyFromFile(); |
| 114 DictionaryValue empty; | 121 DictionaryValue empty; |
| 115 scoped_ptr<Value> policy(cache.GetPolicy()); | 122 scoped_ptr<Value> policy(cache.GetDevicePolicy()); |
| 116 EXPECT_TRUE(empty.Equals(policy.get())); | 123 EXPECT_TRUE(empty.Equals(policy.get())); |
| 117 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); | 124 EXPECT_NE(base::Time(), cache.last_policy_refresh_time()); |
| 118 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); | 125 EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time()); |
| 119 } | 126 } |
| 120 | 127 |
| 121 TEST_F(DeviceManagementPolicyCacheTest, LoadWithData) { | 128 TEST_F(DeviceManagementPolicyCacheTest, LoadWithData) { |
| 122 em::DevicePolicyResponse policy; | 129 em::DevicePolicyResponse policy; |
| 123 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 130 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
| 124 WritePolicy(policy, base::Time::NowFromSystemTime()); | 131 WritePolicy(policy, base::Time::NowFromSystemTime()); |
| 125 DeviceManagementPolicyCache cache(test_file()); | 132 CloudPolicyCache cache(test_file()); |
| 126 cache.LoadPolicyFromFile(); | 133 cache.LoadPolicyFromFile(); |
| 127 DictionaryValue expected; | 134 DictionaryValue expected; |
| 128 expected.Set("HomepageLocation", | 135 expected.Set("HomepageLocation", |
| 129 Value::CreateStringValue("http://www.example.com")); | 136 Value::CreateStringValue("http://www.example.com")); |
| 130 scoped_ptr<Value> policy_value(cache.GetPolicy()); | 137 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); |
| 131 EXPECT_TRUE(expected.Equals(policy_value.get())); | 138 EXPECT_TRUE(expected.Equals(policy_value.get())); |
| 132 } | 139 } |
| 133 | 140 |
| 134 TEST_F(DeviceManagementPolicyCacheTest, SetPolicy) { | 141 TEST_F(DeviceManagementPolicyCacheTest, SetPolicy) { |
| 135 DeviceManagementPolicyCache cache(test_file()); | 142 CloudPolicyCache cache(test_file()); |
| 136 em::DevicePolicyResponse policy; | 143 em::DevicePolicyResponse policy; |
| 137 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 144 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
| 138 EXPECT_TRUE(cache.SetPolicy(policy)); | 145 EXPECT_TRUE(cache.SetPolicy(policy)); |
| 139 em::DevicePolicyResponse policy2; | 146 em::DevicePolicyResponse policy2; |
| 140 AddStringPolicy(&policy2, "HomepageLocation", "http://www.example.com"); | 147 AddStringPolicy(&policy2, "HomepageLocation", "http://www.example.com"); |
| 141 EXPECT_FALSE(cache.SetPolicy(policy2)); | 148 EXPECT_FALSE(cache.SetPolicy(policy2)); |
| 142 DictionaryValue expected; | 149 DictionaryValue expected; |
| 143 expected.Set("HomepageLocation", | 150 expected.Set("HomepageLocation", |
| 144 Value::CreateStringValue("http://www.example.com")); | 151 Value::CreateStringValue("http://www.example.com")); |
| 145 scoped_ptr<Value> policy_value(cache.GetPolicy()); | 152 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); |
| 146 EXPECT_TRUE(expected.Equals(policy_value.get())); | 153 EXPECT_TRUE(expected.Equals(policy_value.get())); |
| 147 } | 154 } |
| 148 | 155 |
| 149 TEST_F(DeviceManagementPolicyCacheTest, ResetPolicy) { | 156 TEST_F(DeviceManagementPolicyCacheTest, ResetPolicy) { |
| 150 DeviceManagementPolicyCache cache(test_file()); | 157 CloudPolicyCache cache(test_file()); |
| 151 | 158 |
| 152 em::DevicePolicyResponse policy; | 159 em::DevicePolicyResponse policy; |
| 153 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 160 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
| 154 EXPECT_TRUE(cache.SetPolicy(policy)); | 161 EXPECT_TRUE(cache.SetPolicy(policy)); |
| 155 DictionaryValue expected; | 162 DictionaryValue expected; |
| 156 expected.Set("HomepageLocation", | 163 expected.Set("HomepageLocation", |
| 157 Value::CreateStringValue("http://www.example.com")); | 164 Value::CreateStringValue("http://www.example.com")); |
| 158 scoped_ptr<Value> policy_value(cache.GetPolicy()); | 165 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); |
| 159 EXPECT_TRUE(expected.Equals(policy_value.get())); | 166 EXPECT_TRUE(expected.Equals(policy_value.get())); |
| 160 | 167 |
| 161 EXPECT_TRUE(cache.SetPolicy(em::DevicePolicyResponse())); | 168 EXPECT_TRUE(cache.SetPolicy(em::DevicePolicyResponse())); |
| 162 policy_value.reset(cache.GetPolicy()); | 169 policy_value.reset(cache.GetDevicePolicy()); |
| 163 DictionaryValue empty; | 170 DictionaryValue empty; |
| 164 EXPECT_TRUE(empty.Equals(policy_value.get())); | 171 EXPECT_TRUE(empty.Equals(policy_value.get())); |
| 165 } | 172 } |
| 166 | 173 |
| 167 TEST_F(DeviceManagementPolicyCacheTest, PersistPolicy) { | 174 TEST_F(DeviceManagementPolicyCacheTest, PersistPolicy) { |
| 168 { | 175 { |
| 169 DeviceManagementPolicyCache cache(test_file()); | 176 CloudPolicyCache cache(test_file()); |
| 170 em::DevicePolicyResponse policy; | 177 em::DevicePolicyResponse policy; |
| 171 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 178 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
| 172 cache.SetPolicy(policy); | 179 cache.SetPolicy(policy); |
| 173 } | 180 } |
| 174 | 181 |
| 175 loop_.RunAllPending(); | 182 loop_.RunAllPending(); |
| 176 | 183 |
| 177 EXPECT_TRUE(file_util::PathExists(test_file())); | 184 EXPECT_TRUE(file_util::PathExists(test_file())); |
| 178 DeviceManagementPolicyCache cache(test_file()); | 185 CloudPolicyCache cache(test_file()); |
| 179 cache.LoadPolicyFromFile(); | 186 cache.LoadPolicyFromFile(); |
| 180 DictionaryValue expected; | 187 DictionaryValue expected; |
| 181 expected.Set("HomepageLocation", | 188 expected.Set("HomepageLocation", |
| 182 Value::CreateStringValue("http://www.example.com")); | 189 Value::CreateStringValue("http://www.example.com")); |
| 183 scoped_ptr<Value> policy_value(cache.GetPolicy()); | 190 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); |
| 184 EXPECT_TRUE(expected.Equals(policy_value.get())); | 191 EXPECT_TRUE(expected.Equals(policy_value.get())); |
| 185 } | 192 } |
| 186 | 193 |
| 187 TEST_F(DeviceManagementPolicyCacheTest, FreshPolicyOverride) { | 194 TEST_F(DeviceManagementPolicyCacheTest, FreshPolicyOverride) { |
| 188 em::DevicePolicyResponse policy; | 195 em::DevicePolicyResponse policy; |
| 189 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 196 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
| 190 WritePolicy(policy, base::Time::NowFromSystemTime()); | 197 WritePolicy(policy, base::Time::NowFromSystemTime()); |
| 191 | 198 |
| 192 DeviceManagementPolicyCache cache(test_file()); | 199 CloudPolicyCache cache(test_file()); |
| 193 em::DevicePolicyResponse updated_policy; | 200 em::DevicePolicyResponse updated_policy; |
| 194 AddStringPolicy(&updated_policy, "HomepageLocation", | 201 AddStringPolicy(&updated_policy, "HomepageLocation", |
| 195 "http://www.chromium.org"); | 202 "http://www.chromium.org"); |
| 196 EXPECT_TRUE(cache.SetPolicy(updated_policy)); | 203 EXPECT_TRUE(cache.SetPolicy(updated_policy)); |
| 197 | 204 |
| 198 cache.LoadPolicyFromFile(); | 205 cache.LoadPolicyFromFile(); |
| 199 DictionaryValue expected; | 206 DictionaryValue expected; |
| 200 expected.Set("HomepageLocation", | 207 expected.Set("HomepageLocation", |
| 201 Value::CreateStringValue("http://www.chromium.org")); | 208 Value::CreateStringValue("http://www.chromium.org")); |
| 202 scoped_ptr<Value> policy_value(cache.GetPolicy()); | 209 scoped_ptr<Value> policy_value(cache.GetDevicePolicy()); |
| 203 EXPECT_TRUE(expected.Equals(policy_value.get())); | 210 EXPECT_TRUE(expected.Equals(policy_value.get())); |
| 204 } | 211 } |
| 205 | 212 |
| 206 // Tests proper decoding of policy values. | 213 // Tests proper decoding of policy values. |
| 207 class DeviceManagementPolicyCacheDecodeTest | 214 class DeviceManagementPolicyCacheDecodeTest |
| 208 : public DeviceManagementPolicyCacheTestBase { | 215 : public DeviceManagementPolicyCacheTestBase { |
| 209 protected: | 216 protected: |
| 210 void DecodeAndCheck(Value* expected_value_ptr) { | 217 void DecodeAndCheck(Value* expected_value_ptr) { |
| 211 scoped_ptr<Value> expected_value(expected_value_ptr); | 218 scoped_ptr<Value> expected_value(expected_value_ptr); |
| 212 scoped_ptr<Value> decoded_value( | 219 scoped_ptr<Value> decoded_value( |
| 213 DeviceManagementPolicyCache::DecodeValue(value_)); | 220 CloudPolicyCache::DecodeValue(value_)); |
| 214 if (expected_value_ptr) { | 221 if (expected_value_ptr) { |
| 215 ASSERT_TRUE(decoded_value.get()); | 222 ASSERT_TRUE(decoded_value.get()); |
| 216 EXPECT_TRUE(decoded_value->Equals(expected_value.get())); | 223 EXPECT_TRUE(decoded_value->Equals(expected_value.get())); |
| 217 } else { | 224 } else { |
| 218 ASSERT_FALSE(decoded_value.get()); | 225 ASSERT_FALSE(decoded_value.get()); |
| 219 } | 226 } |
| 220 } | 227 } |
| 221 | 228 |
| 229 DictionaryValue* DecodeDevicePolicy(const em::DevicePolicyResponse policy) { |
| 230 return CloudPolicyCache::DecodeDevicePolicy(policy); |
| 231 } |
| 232 |
| 222 em::GenericValue value_; | 233 em::GenericValue value_; |
| 223 }; | 234 }; |
| 224 | 235 |
| 225 TEST_F(DeviceManagementPolicyCacheDecodeTest, Bool) { | 236 TEST_F(DeviceManagementPolicyCacheDecodeTest, Bool) { |
| 226 value_.set_value_type(em::GenericValue::VALUE_TYPE_BOOL); | 237 value_.set_value_type(em::GenericValue::VALUE_TYPE_BOOL); |
| 227 value_.set_bool_value(true); | 238 value_.set_bool_value(true); |
| 228 DecodeAndCheck(Value::CreateBooleanValue(true)); | 239 DecodeAndCheck(Value::CreateBooleanValue(true)); |
| 229 } | 240 } |
| 230 | 241 |
| 231 TEST_F(DeviceManagementPolicyCacheDecodeTest, Int64) { | 242 TEST_F(DeviceManagementPolicyCacheDecodeTest, Int64) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 value_.add_double_array(0.17L); | 315 value_.add_double_array(0.17L); |
| 305 ListValue* list = new ListValue; | 316 ListValue* list = new ListValue; |
| 306 list->Append(Value::CreateDoubleValue(0.42L)); | 317 list->Append(Value::CreateDoubleValue(0.42L)); |
| 307 list->Append(Value::CreateDoubleValue(0.17L)); | 318 list->Append(Value::CreateDoubleValue(0.17L)); |
| 308 DecodeAndCheck(list); | 319 DecodeAndCheck(list); |
| 309 } | 320 } |
| 310 | 321 |
| 311 TEST_F(DeviceManagementPolicyCacheDecodeTest, DecodePolicy) { | 322 TEST_F(DeviceManagementPolicyCacheDecodeTest, DecodePolicy) { |
| 312 em::DevicePolicyResponse policy; | 323 em::DevicePolicyResponse policy; |
| 313 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); | 324 AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com"); |
| 314 scoped_ptr<Value> decoded(DeviceManagementPolicyCache::DecodePolicy(policy)); | 325 scoped_ptr<Value> decoded(DecodeDevicePolicy(policy)); |
| 315 DictionaryValue expected; | 326 DictionaryValue expected; |
| 316 expected.Set("HomepageLocation", | 327 expected.Set("HomepageLocation", |
| 317 Value::CreateStringValue("http://www.example.com")); | 328 Value::CreateStringValue("http://www.example.com")); |
| 318 EXPECT_TRUE(expected.Equals(decoded.get())); | 329 EXPECT_TRUE(expected.Equals(decoded.get())); |
| 319 } | 330 } |
| 320 | 331 |
| 321 } // namespace policy | 332 } // namespace policy |
| OLD | NEW |