Index: chrome/browser/policy/cloud_policy_provider_unittest.cc |
diff --git a/chrome/browser/policy/cloud_policy_provider_unittest.cc b/chrome/browser/policy/cloud_policy_provider_unittest.cc |
index 1af50371ae893c5430b038b9a6e8f9a7761bef5d..40e2f77f551b3b1db32d838307444655c3975822 100644 |
--- a/chrome/browser/policy/cloud_policy_provider_unittest.cc |
+++ b/chrome/browser/policy/cloud_policy_provider_unittest.cc |
@@ -6,13 +6,17 @@ |
#include "base/basictypes.h" |
#include "base/values.h" |
+#include "chrome/browser/policy/browser_policy_connector.h" |
#include "chrome/browser/policy/cloud_policy_cache_base.h" |
#include "chrome/browser/policy/cloud_policy_provider_impl.h" |
#include "chrome/browser/policy/configuration_policy_pref_store.h" |
+#include "chrome/browser/policy/configuration_policy_provider.h" |
+#include "chrome/browser/policy/mock_configuration_policy_provider.h" |
#include "policy/policy_constants.h" |
#include "testing/gmock/include/gmock/gmock.h" |
using testing::AnyNumber; |
+using testing::Mock; |
using testing::_; |
namespace policy { |
@@ -23,15 +27,16 @@ class MockCloudPolicyCache : public CloudPolicyCacheBase { |
virtual ~MockCloudPolicyCache() {} |
// CloudPolicyCacheBase implementation. |
- void Load() {} |
- void SetPolicy(const em::PolicyFetchResponse& policy) {} |
+ void Load() OVERRIDE {} |
+ void SetPolicy(const em::PolicyFetchResponse& policy) OVERRIDE {} |
bool DecodePolicyData(const em::PolicyData& policy_data, |
PolicyMap* mandatory, |
- PolicyMap* recommended) { |
+ PolicyMap* recommended) OVERRIDE { |
return true; |
} |
- bool IsReady() { |
- return true; |
+ |
+ void SetUnmanaged() OVERRIDE { |
+ is_unmanaged_ = true; |
} |
// Non-const accessors for underlying PolicyMaps. |
@@ -43,14 +48,6 @@ class MockCloudPolicyCache : public CloudPolicyCacheBase { |
return &recommended_policy_; |
} |
- void SetUnmanaged() { |
- is_unmanaged_ = true; |
- } |
- |
- void SetFetchingDone() { |
- // Implement pure virtual method. |
- } |
- |
void set_initialized(bool initialized) { |
initialization_complete_ = initialized; |
} |
@@ -62,8 +59,11 @@ class MockCloudPolicyCache : public CloudPolicyCacheBase { |
class CloudPolicyProviderTest : public testing::Test { |
protected: |
void CreateCloudPolicyProvider(CloudPolicyCacheBase::PolicyLevel level) { |
- cloud_policy_provider_.reset(new CloudPolicyProviderImpl( |
- GetChromePolicyDefinitionList(), level)); |
+ cloud_policy_provider_.reset( |
+ new CloudPolicyProviderImpl( |
+ &browser_policy_connector_, |
+ GetChromePolicyDefinitionList(), |
+ level)); |
} |
// Appends the caches to a provider and then provides the policies to |
@@ -71,6 +71,7 @@ class CloudPolicyProviderTest : public testing::Test { |
void RunCachesThroughProvider(MockCloudPolicyCache caches[], int n, |
CloudPolicyCacheBase::PolicyLevel level) { |
CloudPolicyProviderImpl provider( |
+ &browser_policy_connector_, |
GetChromePolicyDefinitionList(), |
level); |
for (int i = 0; i < n; i++) { |
@@ -110,13 +111,10 @@ class CloudPolicyProviderTest : public testing::Test { |
cloud_policy_provider_->CombineTwoPolicyMaps(base, overlay, out_map); |
} |
- private: |
- // Some tests need a list of policies that doesn't contain any proxy |
- // policies. Note: these policies will be handled as if they had the |
- // type of Value::TYPE_INTEGER. |
- static const ConfigurationPolicyType simple_policies[]; |
- |
scoped_ptr<CloudPolicyProviderImpl> cloud_policy_provider_; |
+ |
+ private: |
+ BrowserPolicyConnector browser_policy_connector_; |
scoped_ptr<PolicyMap> policy_map_; |
}; |
@@ -240,4 +238,64 @@ TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsProxies) { |
EXPECT_FALSE(B.Equals(C)); |
} |
+TEST_F(CloudPolicyProviderTest, RefreshPolicies) { |
+ CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_MANDATORY); |
+ MockCloudPolicyCache cache0; |
+ MockCloudPolicyCache cache1; |
+ MockCloudPolicyCache cache2; |
+ MockConfigurationPolicyObserver observer; |
+ ConfigurationPolicyObserverRegistrar registrar; |
+ registrar.Init(cloud_policy_provider_.get(), &observer); |
+ |
+ // OnUpdatePolicy is called when the provider doesn't have any caches. |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(1); |
+ cloud_policy_provider_->RefreshPolicies(); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ // OnUpdatePolicy is called when all the caches have updated. |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(2); |
+ cloud_policy_provider_->AppendCache(&cache0); |
+ cloud_policy_provider_->AppendCache(&cache1); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(0); |
+ cloud_policy_provider_->RefreshPolicies(); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(0); |
+ // Updating just one of the caches is not enough. |
+ cloud_policy_provider_->OnCacheUpdate(&cache0); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(0); |
+ // This cache wasn't available when RefreshPolicies was called, so it isn't |
+ // required to fire the update. |
+ cloud_policy_provider_->AppendCache(&cache2); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(1); |
+ cloud_policy_provider_->OnCacheUpdate(&cache1); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(0); |
+ cloud_policy_provider_->RefreshPolicies(); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(0); |
+ cloud_policy_provider_->OnCacheUpdate(&cache0); |
+ cloud_policy_provider_->OnCacheUpdate(&cache1); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ // If a cache refreshes more than once, the provider should still wait for |
+ // the others before firing the update. |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(0); |
+ cloud_policy_provider_->OnCacheUpdate(&cache0); |
+ Mock::VerifyAndClearExpectations(&observer); |
+ |
+ // Fire updates if one of the required caches goes away while waiting. |
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(1); |
+ cloud_policy_provider_->OnCacheGoingAway(&cache2); |
+ Mock::VerifyAndClearExpectations(&observer); |
+} |
+ |
} // namespace policy |