| Index: chrome/browser/policy/cloud_policy_cache_unittest.cc
|
| diff --git a/chrome/browser/policy/cloud_policy_cache_unittest.cc b/chrome/browser/policy/cloud_policy_cache_unittest.cc
|
| index d9fc768408bbccb81e77e84ee81e8dfd0c5fb943..158ab362cf0443fe8c29c81a75ce3d848ee02a73 100644
|
| --- a/chrome/browser/policy/cloud_policy_cache_unittest.cc
|
| +++ b/chrome/browser/policy/cloud_policy_cache_unittest.cc
|
| @@ -12,11 +12,13 @@
|
| #include "base/scoped_temp_dir.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/browser_thread.h"
|
| +#include "chrome/browser/policy/configuration_policy_provider.h"
|
| #include "chrome/browser/policy/proto/cloud_policy.pb.h"
|
| #include "chrome/browser/policy/proto/device_management_backend.pb.h"
|
| // TODO(jkummerow): remove this import when removing old DMPC test cases.
|
| #include "chrome/browser/policy/proto/device_management_constants.h"
|
| #include "chrome/browser/policy/proto/device_management_local.pb.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace policy {
|
| @@ -31,6 +33,15 @@ void DecodePolicy(const em::CloudPolicySettings& policy,
|
| Value* DecodeIntegerValue(google::protobuf::int64 value);
|
| ListValue* DecodeStringList(const em::StringList& string_list);
|
|
|
| +class MockConfigurationPolicyProviderObserver
|
| + : public ConfigurationPolicyProvider::Observer {
|
| + public:
|
| + MockConfigurationPolicyProviderObserver() {}
|
| + virtual ~MockConfigurationPolicyProviderObserver() {}
|
| + MOCK_METHOD0(OnUpdatePolicy, void());
|
| + void OnProviderGoingAway() {}
|
| +};
|
| +
|
| // Tests the device management policy cache.
|
| class CloudPolicyCacheTest : public testing::Test {
|
| protected:
|
| @@ -85,11 +96,35 @@ class CloudPolicyCacheTest : public testing::Test {
|
| EXPECT_EQ(size, file_util::WriteFile(test_file(), data.c_str(), size));
|
| }
|
|
|
| + // Takes ownership of |policy_response|.
|
| + void SetPolicy(CloudPolicyCache* cache,
|
| + em::CloudPolicyResponse* policy_response,
|
| + bool expect_changed_policy) {
|
| + scoped_ptr<em::CloudPolicyResponse> policy(policy_response);
|
| + ConfigurationPolicyObserverRegistrar registrar;
|
| + registrar.Init(cache->GetManagedPolicyProvider(), &observer);
|
| + if (expect_changed_policy)
|
| + EXPECT_CALL(observer, OnUpdatePolicy()).Times(1);
|
| + else
|
| + EXPECT_CALL(observer, OnUpdatePolicy()).Times(0);
|
| + cache->SetPolicy(*policy);
|
| + testing::Mock::VerifyAndClearExpectations(&observer);
|
| + }
|
| +
|
| FilePath test_file() {
|
| return temp_dir_.path().AppendASCII("CloudPolicyCacheTest");
|
| }
|
|
|
| + const PolicyMap& mandatory_policy(const CloudPolicyCache& cache) {
|
| + return cache.mandatory_policy_;
|
| + }
|
| +
|
| + const PolicyMap& recommended_policy(const CloudPolicyCache& cache) {
|
| + return cache.recommended_policy_;
|
| + }
|
| +
|
| MessageLoop loop_;
|
| + MockConfigurationPolicyProviderObserver observer;
|
|
|
| private:
|
| ScopedTempDir temp_dir_;
|
| @@ -157,16 +192,16 @@ TEST_F(CloudPolicyCacheTest, DecodeStringList) {
|
| TEST_F(CloudPolicyCacheTest, Empty) {
|
| CloudPolicyCache cache(test_file());
|
| PolicyMap empty;
|
| - EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy()));
|
| - EXPECT_TRUE(empty.Equals(*cache.GetRecommendedPolicy()));
|
| + EXPECT_TRUE(empty.Equals(mandatory_policy(cache)));
|
| + EXPECT_TRUE(empty.Equals(recommended_policy(cache)));
|
| EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
|
| }
|
|
|
| TEST_F(CloudPolicyCacheTest, LoadNoFile) {
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| PolicyMap empty;
|
| - EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(empty.Equals(mandatory_policy(cache)));
|
| EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
|
| }
|
|
|
| @@ -177,9 +212,9 @@ TEST_F(CloudPolicyCacheTest, RejectFuture) {
|
| em::PolicyOptions::MANDATORY));
|
| WritePolicy(*policy_response);
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| PolicyMap empty;
|
| - EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(empty.Equals(mandatory_policy(cache)));
|
| EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
|
| }
|
|
|
| @@ -189,9 +224,9 @@ TEST_F(CloudPolicyCacheTest, LoadWithFile) {
|
| em::PolicyOptions::MANDATORY));
|
| WritePolicy(*policy_response);
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| PolicyMap empty;
|
| - EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(empty.Equals(mandatory_policy(cache)));
|
| EXPECT_NE(base::Time(), cache.last_policy_refresh_time());
|
| EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time());
|
| }
|
| @@ -203,58 +238,58 @@ TEST_F(CloudPolicyCacheTest, LoadWithData) {
|
| em::PolicyOptions::MANDATORY));
|
| WritePolicy(*policy);
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| PolicyMap expected;
|
| expected.Set(kPolicyHomepageLocation,
|
| Value::CreateStringValue("http://www.example.com"));
|
| - EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(expected.Equals(mandatory_policy(cache)));
|
| }
|
|
|
| TEST_F(CloudPolicyCacheTest, SetPolicy) {
|
| CloudPolicyCache cache(test_file());
|
| - scoped_ptr<em::CloudPolicyResponse> policy(
|
| + em::CloudPolicyResponse* policy =
|
| CreateHomepagePolicy("http://www.example.com",
|
| base::Time::NowFromSystemTime(),
|
| - em::PolicyOptions::MANDATORY));
|
| - EXPECT_TRUE(cache.SetPolicy(*policy));
|
| - scoped_ptr<em::CloudPolicyResponse> policy2(
|
| + em::PolicyOptions::MANDATORY);
|
| + SetPolicy(&cache, policy, true);
|
| + em::CloudPolicyResponse* policy2 =
|
| CreateHomepagePolicy("http://www.example.com",
|
| base::Time::NowFromSystemTime(),
|
| - em::PolicyOptions::MANDATORY));
|
| - EXPECT_FALSE(cache.SetPolicy(*policy2));
|
| + em::PolicyOptions::MANDATORY);
|
| + SetPolicy(&cache, policy2, false);
|
| PolicyMap expected;
|
| expected.Set(kPolicyHomepageLocation,
|
| Value::CreateStringValue("http://www.example.com"));
|
| PolicyMap empty;
|
| - EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy()));
|
| - EXPECT_TRUE(empty.Equals(*cache.GetRecommendedPolicy()));
|
| - policy.reset(CreateHomepagePolicy("http://www.example.com",
|
| + EXPECT_TRUE(expected.Equals(mandatory_policy(cache)));
|
| + EXPECT_TRUE(empty.Equals(recommended_policy(cache)));
|
| + policy = CreateHomepagePolicy("http://www.example.com",
|
| base::Time::NowFromSystemTime(),
|
| - em::PolicyOptions::RECOMMENDED));
|
| - EXPECT_TRUE(cache.SetPolicy(*policy));
|
| - EXPECT_TRUE(expected.Equals(*cache.GetRecommendedPolicy()));
|
| - EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy()));
|
| + em::PolicyOptions::RECOMMENDED);
|
| + SetPolicy(&cache, policy, true);
|
| + EXPECT_TRUE(expected.Equals(recommended_policy(cache)));
|
| + EXPECT_TRUE(empty.Equals(mandatory_policy(cache)));
|
| }
|
|
|
| TEST_F(CloudPolicyCacheTest, ResetPolicy) {
|
| CloudPolicyCache cache(test_file());
|
|
|
| - scoped_ptr<em::CloudPolicyResponse> policy(
|
| + em::CloudPolicyResponse* policy =
|
| CreateHomepagePolicy("http://www.example.com",
|
| base::Time::NowFromSystemTime(),
|
| - em::PolicyOptions::MANDATORY));
|
| - EXPECT_TRUE(cache.SetPolicy(*policy));
|
| + em::PolicyOptions::MANDATORY);
|
| + SetPolicy(&cache, policy, true);
|
| PolicyMap expected;
|
| expected.Set(kPolicyHomepageLocation,
|
| Value::CreateStringValue("http://www.example.com"));
|
| - EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(expected.Equals(mandatory_policy(cache)));
|
|
|
| - scoped_ptr<em::CloudPolicyResponse> empty_policy(
|
| + em::CloudPolicyResponse* empty_policy =
|
| CreateHomepagePolicy("", base::Time::NowFromSystemTime(),
|
| - em::PolicyOptions::MANDATORY));
|
| - EXPECT_TRUE(cache.SetPolicy(*empty_policy));
|
| + em::PolicyOptions::MANDATORY);
|
| + SetPolicy(&cache, empty_policy, true);
|
| PolicyMap empty;
|
| - EXPECT_TRUE(empty.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(empty.Equals(mandatory_policy(cache)));
|
| }
|
|
|
| TEST_F(CloudPolicyCacheTest, PersistPolicy) {
|
| @@ -271,11 +306,11 @@ TEST_F(CloudPolicyCacheTest, PersistPolicy) {
|
|
|
| EXPECT_TRUE(file_util::PathExists(test_file()));
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| PolicyMap expected;
|
| expected.Set(kPolicyHomepageLocation,
|
| Value::CreateStringValue("http://www.example.com"));
|
| - EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(expected.Equals(mandatory_policy(cache)));
|
| }
|
|
|
| TEST_F(CloudPolicyCacheTest, FreshPolicyOverride) {
|
| @@ -286,17 +321,17 @@ TEST_F(CloudPolicyCacheTest, FreshPolicyOverride) {
|
| WritePolicy(*policy);
|
|
|
| CloudPolicyCache cache(test_file());
|
| - scoped_ptr<em::CloudPolicyResponse> updated_policy(
|
| + em::CloudPolicyResponse* updated_policy =
|
| CreateHomepagePolicy("http://www.chromium.org",
|
| base::Time::NowFromSystemTime(),
|
| - em::PolicyOptions::MANDATORY));
|
| - EXPECT_TRUE(cache.SetPolicy(*updated_policy));
|
| + em::PolicyOptions::MANDATORY);
|
| + SetPolicy(&cache, updated_policy, true);
|
|
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| PolicyMap expected;
|
| expected.Set(kPolicyHomepageLocation,
|
| Value::CreateStringValue("http://www.chromium.org"));
|
| - EXPECT_TRUE(expected.Equals(*cache.GetMandatoryPolicy()));
|
| + EXPECT_TRUE(expected.Equals(mandatory_policy(cache)));
|
| }
|
|
|
| } // namespace policy
|
| @@ -363,7 +398,10 @@ class DeviceManagementPolicyCacheTest
|
| return temp_dir_.path().AppendASCII("DeviceManagementPolicyCacheTest");
|
| }
|
|
|
| - protected:
|
| + const DictionaryValue* device_policy(const CloudPolicyCache& cache) {
|
| + return cache.device_policy_.get();
|
| + }
|
| +
|
| MessageLoop loop_;
|
|
|
| private:
|
| @@ -375,17 +413,15 @@ class DeviceManagementPolicyCacheTest
|
| TEST_F(DeviceManagementPolicyCacheTest, Empty) {
|
| CloudPolicyCache cache(test_file());
|
| DictionaryValue empty;
|
| - scoped_ptr<Value> policy(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(empty.Equals(policy.get()));
|
| + EXPECT_TRUE(empty.Equals(device_policy(cache)));
|
| EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
|
| }
|
|
|
| TEST_F(DeviceManagementPolicyCacheTest, LoadNoFile) {
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| DictionaryValue empty;
|
| - scoped_ptr<Value> policy(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(empty.Equals(policy.get()));
|
| + EXPECT_TRUE(empty.Equals(device_policy(cache)));
|
| EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
|
| }
|
|
|
| @@ -394,10 +430,9 @@ TEST_F(DeviceManagementPolicyCacheTest, RejectFuture) {
|
| WritePolicy(policy_response, base::Time::NowFromSystemTime() +
|
| base::TimeDelta::FromMinutes(5));
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| DictionaryValue empty;
|
| - scoped_ptr<Value> policy(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(empty.Equals(policy.get()));
|
| + EXPECT_TRUE(empty.Equals(device_policy(cache)));
|
| EXPECT_EQ(base::Time(), cache.last_policy_refresh_time());
|
| }
|
|
|
| @@ -405,10 +440,9 @@ TEST_F(DeviceManagementPolicyCacheTest, LoadWithFile) {
|
| em::DevicePolicyResponse policy_response;
|
| WritePolicy(policy_response, base::Time::NowFromSystemTime());
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| DictionaryValue empty;
|
| - scoped_ptr<Value> policy(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(empty.Equals(policy.get()));
|
| + EXPECT_TRUE(empty.Equals(device_policy(cache)));
|
| EXPECT_NE(base::Time(), cache.last_policy_refresh_time());
|
| EXPECT_GE(base::Time::Now(), cache.last_policy_refresh_time());
|
| }
|
| @@ -418,27 +452,25 @@ TEST_F(DeviceManagementPolicyCacheTest, LoadWithData) {
|
| AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
|
| WritePolicy(policy, base::Time::NowFromSystemTime());
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| DictionaryValue expected;
|
| expected.Set("HomepageLocation",
|
| Value::CreateStringValue("http://www.example.com"));
|
| - scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(expected.Equals(policy_value.get()));
|
| + EXPECT_TRUE(expected.Equals(device_policy(cache)));
|
| }
|
|
|
| TEST_F(DeviceManagementPolicyCacheTest, SetDevicePolicy) {
|
| CloudPolicyCache cache(test_file());
|
| em::DevicePolicyResponse policy;
|
| AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
|
| - EXPECT_TRUE(cache.SetDevicePolicy(policy));
|
| + cache.SetDevicePolicy(policy);
|
| em::DevicePolicyResponse policy2;
|
| AddStringPolicy(&policy2, "HomepageLocation", "http://www.example.com");
|
| - EXPECT_FALSE(cache.SetDevicePolicy(policy2));
|
| + cache.SetDevicePolicy(policy2); // Does not notify observers.
|
| DictionaryValue expected;
|
| expected.Set("HomepageLocation",
|
| Value::CreateStringValue("http://www.example.com"));
|
| - scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(expected.Equals(policy_value.get()));
|
| + EXPECT_TRUE(expected.Equals(device_policy(cache)));
|
| }
|
|
|
| TEST_F(DeviceManagementPolicyCacheTest, ResetPolicy) {
|
| @@ -446,17 +478,15 @@ TEST_F(DeviceManagementPolicyCacheTest, ResetPolicy) {
|
|
|
| em::DevicePolicyResponse policy;
|
| AddStringPolicy(&policy, "HomepageLocation", "http://www.example.com");
|
| - EXPECT_TRUE(cache.SetDevicePolicy(policy));
|
| + cache.SetDevicePolicy(policy);
|
| DictionaryValue expected;
|
| expected.Set("HomepageLocation",
|
| Value::CreateStringValue("http://www.example.com"));
|
| - scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(expected.Equals(policy_value.get()));
|
| + EXPECT_TRUE(expected.Equals(device_policy(cache)));
|
|
|
| - EXPECT_TRUE(cache.SetDevicePolicy(em::DevicePolicyResponse()));
|
| - policy_value.reset(cache.GetDevicePolicy());
|
| + cache.SetDevicePolicy(em::DevicePolicyResponse());
|
| DictionaryValue empty;
|
| - EXPECT_TRUE(empty.Equals(policy_value.get()));
|
| + EXPECT_TRUE(empty.Equals(device_policy(cache)));
|
| }
|
|
|
| TEST_F(DeviceManagementPolicyCacheTest, PersistPolicy) {
|
| @@ -471,12 +501,11 @@ TEST_F(DeviceManagementPolicyCacheTest, PersistPolicy) {
|
|
|
| EXPECT_TRUE(file_util::PathExists(test_file()));
|
| CloudPolicyCache cache(test_file());
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| DictionaryValue expected;
|
| expected.Set("HomepageLocation",
|
| Value::CreateStringValue("http://www.example.com"));
|
| - scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(expected.Equals(policy_value.get()));
|
| + EXPECT_TRUE(expected.Equals(device_policy(cache)));
|
| }
|
|
|
| TEST_F(DeviceManagementPolicyCacheTest, FreshPolicyOverride) {
|
| @@ -488,14 +517,13 @@ TEST_F(DeviceManagementPolicyCacheTest, FreshPolicyOverride) {
|
| em::DevicePolicyResponse updated_policy;
|
| AddStringPolicy(&updated_policy, "HomepageLocation",
|
| "http://www.chromium.org");
|
| - EXPECT_TRUE(cache.SetDevicePolicy(updated_policy));
|
| + cache.SetDevicePolicy(updated_policy);
|
|
|
| - cache.LoadPolicyFromFile();
|
| + cache.LoadFromFile();
|
| DictionaryValue expected;
|
| expected.Set("HomepageLocation",
|
| Value::CreateStringValue("http://www.chromium.org"));
|
| - scoped_ptr<Value> policy_value(cache.GetDevicePolicy());
|
| - EXPECT_TRUE(expected.Equals(policy_value.get()));
|
| + EXPECT_TRUE(expected.Equals(device_policy(cache)));
|
| }
|
|
|
| // Tests proper decoding of policy values.
|
|
|