Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Unified Diff: chrome/browser/policy/cloud_policy_provider_unittest.cc

Issue 8586030: Added ConfigurationPolicyProvider::RefreshPolicies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed LoginUtilsTest Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..1d0f059e65783da4844f4da7787bb4808a213dc8 100644
--- a/chrome/browser/policy/cloud_policy_provider_unittest.cc
+++ b/chrome/browser/policy/cloud_policy_provider_unittest.cc
@@ -6,13 +6,19 @@
#include "base/basictypes.h"
#include "base/values.h"
+#include "chrome/browser/browser_process.h"
Mattias Nissler (ping if slow) 2011/11/21 16:09:05 needed?
Joao da Silva 2011/11/21 16:49:21 Not after fixing the g_browser_process below.
+#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::StrictMock;
using testing::_;
namespace policy {
@@ -23,15 +29,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 +50,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 +61,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 +73,7 @@ class CloudPolicyProviderTest : public testing::Test {
void RunCachesThroughProvider(MockCloudPolicyCache caches[], int n,
CloudPolicyCacheBase::PolicyLevel level) {
CloudPolicyProviderImpl provider(
+ g_browser_process->browser_policy_connector(),
Mattias Nissler (ping if slow) 2011/11/21 16:09:05 Wait, shouldn't you use &browser_policy_connector_
Joao da Silva 2011/11/21 16:49:21 Yep, sloppy me. Fixed.
GetChromePolicyDefinitionList(),
level);
for (int i = 0; i < n; i++) {
@@ -110,13 +113,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 +240,67 @@ TEST_F(CloudPolicyProviderTest, CombineTwoPolicyMapsProxies) {
EXPECT_FALSE(B.Equals(C));
}
+TEST_F(CloudPolicyProviderTest, RefreshPolicies) {
+ CreateCloudPolicyProvider(CloudPolicyCacheBase::POLICY_LEVEL_MANDATORY);
+ StrictMock<MockConfigurationPolicyObserver> observer;
Mattias Nissler (ping if slow) 2011/11/21 16:09:05 Using a StrictMock to ensure that no other events
Joao da Silva 2011/11/21 16:49:21 Removed. This was introduced when the test compla
+ 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);
+ MockCloudPolicyCache cache0;
+ MockCloudPolicyCache cache1;
+ MockCloudPolicyCache cache2;
Mattias Nissler (ping if slow) 2011/11/21 16:09:05 It's a bit weird to have the cache2 declaration he
Joao da Silva 2011/11/21 16:49:21 Done.
+ 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.
Mattias Nissler (ping if slow) 2011/11/21 16:09:05 Is that intended? Either way, it probably doesn't
Joao da Silva 2011/11/21 16:49:21 It doesn't matter indeed, this comment is for clar
+ 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 waits for
Mattias Nissler (ping if slow) 2011/11/21 16:09:05 s/waits/wait/
Joao da Silva 2011/11/21 16:49:21 Done.
+ // 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);
+
+ // The other 2 caches are removed (and trigger updates) at shutdown.
+ EXPECT_CALL(observer, OnUpdatePolicy(cloud_policy_provider_.get())).Times(2);
+}
+
} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698