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

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

Issue 10236003: Added RefreshPolicies to PolicyService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 8 years, 8 months 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
« no previous file with comments | « chrome/browser/policy/policy_service_stub.cc ('k') | chrome/browser/prefs/proxy_policy_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/policy/policy_service_unittest.cc
diff --git a/chrome/browser/policy/policy_service_unittest.cc b/chrome/browser/policy/policy_service_unittest.cc
index 1c9baf16b97cfee76b0c708a517409a1c00d2ea7..27cf3b3435c4ee37b1636665988e29761eb98759 100644
--- a/chrome/browser/policy/policy_service_unittest.cc
+++ b/chrome/browser/policy/policy_service_unittest.cc
@@ -7,13 +7,17 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop.h"
#include "base/values.h"
#include "chrome/browser/policy/mock_configuration_policy_provider.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/test/test_browser_thread.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::AnyNumber;
using ::testing::Mock;
+using ::testing::Return;
using ::testing::_;
namespace policy {
@@ -48,10 +52,23 @@ class PolicyServiceTest : public testing::Test {
PolicyServiceTest() {}
void SetUp() OVERRIDE {
- provider0_.AddMandatoryPolicy("pre", base::Value::CreateIntegerValue(13));
- provider0_.SetInitializationComplete(true);
- provider1_.SetInitializationComplete(true);
- provider2_.SetInitializationComplete(true);
+ EXPECT_CALL(provider0_, ProvideInternal(_))
+ .WillRepeatedly(CopyPolicyMap(&policy0_));
+ EXPECT_CALL(provider1_, ProvideInternal(_))
+ .WillRepeatedly(CopyPolicyMap(&policy1_));
+ EXPECT_CALL(provider2_, ProvideInternal(_))
+ .WillRepeatedly(CopyPolicyMap(&policy2_));
+
+ EXPECT_CALL(provider0_, IsInitializationComplete())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(provider1_, IsInitializationComplete())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(provider2_, IsInitializationComplete())
+ .WillRepeatedly(Return(true));
+
+ policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(13));
+
PolicyServiceImpl::Providers providers;
providers.push_back(&provider0_);
providers.push_back(&provider1_);
@@ -62,6 +79,8 @@ class PolicyServiceTest : public testing::Test {
MOCK_METHOD2(OnPolicyValueUpdated, void(const base::Value*,
const base::Value*));
+ MOCK_METHOD0(OnPolicyRefresh, void());
+
// Returns true if the policies for |domain|, |component_id| match |expected|.
bool VerifyPolicies(PolicyDomain domain,
const std::string& component_id,
@@ -75,6 +94,9 @@ class PolicyServiceTest : public testing::Test {
MockConfigurationPolicyProvider provider0_;
MockConfigurationPolicyProvider provider1_;
MockConfigurationPolicyProvider provider2_;
+ PolicyMap policy0_;
+ PolicyMap policy1_;
+ PolicyMap policy2_;
scoped_ptr<PolicyServiceImpl> policy_service_;
private:
@@ -100,16 +122,17 @@ TEST_F(PolicyServiceTest, NotifyObservers) {
expectedCurrent.CopyFrom(expectedPrevious);
expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(123));
- provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(123));
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(123));
EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
PolicyEquals(&expectedPrevious),
PolicyEquals(&expectedCurrent)));
- provider0_.RefreshPolicies();
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(&observer);
// No changes.
EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
- provider0_.RefreshPolicies();
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(&observer);
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
@@ -117,37 +140,40 @@ TEST_F(PolicyServiceTest, NotifyObservers) {
expectedPrevious.CopyFrom(expectedCurrent);
expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(456));
- provider0_.AddMandatoryPolicy("bbb", base::Value::CreateIntegerValue(456));
+ policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(456));
EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
PolicyEquals(&expectedPrevious),
PolicyEquals(&expectedCurrent)));
- provider0_.RefreshPolicies();
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(&observer);
// Removed policy.
expectedPrevious.CopyFrom(expectedCurrent);
expectedCurrent.Erase("bbb");
- provider0_.RemovePolicy("bbb");
+ policy0_.Erase("bbb");
EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
PolicyEquals(&expectedPrevious),
PolicyEquals(&expectedCurrent)));
- provider0_.RefreshPolicies();
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(&observer);
// Changed policy.
expectedPrevious.CopyFrom(expectedCurrent);
expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(789));
- provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(789));
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(789));
+
EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
PolicyEquals(&expectedPrevious),
PolicyEquals(&expectedCurrent)));
- provider0_.RefreshPolicies();
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(&observer);
// No changes again.
EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
- provider0_.RefreshPolicies();
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(&observer);
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
@@ -160,24 +186,28 @@ TEST_F(PolicyServiceTest, Priorities) {
base::Value::CreateIntegerValue(13));
expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(0));
- provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(0));
- provider1_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(1));
- provider2_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(2));
- provider0_.RefreshPolicies();
- provider1_.RefreshPolicies();
- provider2_.RefreshPolicies();
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(0));
+ policy1_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(1));
+ policy2_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(2));
+ provider0_.NotifyPolicyUpdated();
+ provider1_.NotifyPolicyUpdated();
+ provider2_.NotifyPolicyUpdated();
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(1));
- provider0_.RemovePolicy("aaa");
- provider0_.RefreshPolicies();
+ policy0_.Erase("aaa");
+ provider0_.NotifyPolicyUpdated();
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(2));
- provider1_.AddRecommendedPolicy("aaa", base::Value::CreateIntegerValue(1));
- provider1_.RefreshPolicies();
+ policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
+ base::Value::CreateIntegerValue(1));
+ provider1_.NotifyPolicyUpdated();
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
}
@@ -199,37 +229,118 @@ TEST_F(PolicyServiceTest, PolicyChangeRegistrar) {
// Changing it now triggers a notification.
base::FundamentalValue kValue0(0);
EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0)));
- provider0_.AddMandatoryPolicy("aaa", kValue0.DeepCopy());
- provider0_.RefreshPolicies();
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue0.DeepCopy());
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(this);
// Changing other values doesn't trigger a notification.
EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
- provider0_.AddMandatoryPolicy("bbb", kValue0.DeepCopy());
- provider0_.RefreshPolicies();
+ policy0_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue0.DeepCopy());
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(this);
// Modifying the value triggers a notification.
base::FundamentalValue kValue1(1);
EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue0),
ValueEquals(&kValue1)));
- provider0_.AddMandatoryPolicy("aaa", kValue1.DeepCopy());
- provider0_.RefreshPolicies();
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue1.DeepCopy());
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(this);
// Removing the value triggers a notification.
EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL));
- provider0_.RemovePolicy("aaa");
- provider0_.RefreshPolicies();
+ policy0_.Erase("aaa");
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(this);
// No more notifications after destroying the registrar.
EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
registrar.reset();
- provider0_.AddMandatoryPolicy("aaa", kValue1.DeepCopy());
- provider0_.AddMandatoryPolicy("pre", kValue1.DeepCopy());
- provider0_.RefreshPolicies();
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue1.DeepCopy());
+ policy0_.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue1.DeepCopy());
+ provider0_.NotifyPolicyUpdated();
Mock::VerifyAndClearExpectations(this);
}
+TEST_F(PolicyServiceTest, RefreshPolicies) {
+ MessageLoop loop;
+ content::TestBrowserThread ui_thread(content::BrowserThread::UI, &loop);
+ content::TestBrowserThread file_thread(content::BrowserThread::FILE, &loop);
+ content::TestBrowserThread io_thread(content::BrowserThread::IO, &loop);
+
+ EXPECT_CALL(provider0_, RefreshPolicies()).Times(AnyNumber());
+ EXPECT_CALL(provider1_, RefreshPolicies()).Times(AnyNumber());
+ EXPECT_CALL(provider2_, RefreshPolicies()).Times(AnyNumber());
+
+ EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
+ policy_service_->RefreshPolicies(base::Bind(
+ &PolicyServiceTest::OnPolicyRefresh,
+ base::Unretained(this)));
+ loop.RunAllPending();
+ Mock::VerifyAndClearExpectations(this);
+
+ EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
+ base::FundamentalValue kValue0(0);
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue0.DeepCopy());
+ provider0_.NotifyPolicyUpdated();
+ loop.RunAllPending();
+ Mock::VerifyAndClearExpectations(this);
+
+ EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
+ base::FundamentalValue kValue1(1);
+ policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
+ kValue1.DeepCopy());
+ provider1_.NotifyPolicyUpdated();
+ loop.RunAllPending();
+ Mock::VerifyAndClearExpectations(this);
+
+ // A provider can refresh more than once after a RefreshPolicies call, but
+ // OnPolicyRefresh should be triggered only after all providers are
+ // refreshed.
+ EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
+ policy1_.Set("bbb", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
+ kValue1.DeepCopy());
+ provider1_.NotifyPolicyUpdated();
+ loop.RunAllPending();
+ Mock::VerifyAndClearExpectations(this);
+
+ // If another RefreshPolicies() call happens while waiting for a previous
+ // one to complete, then all providers must refresh again.
+ EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
+ policy_service_->RefreshPolicies(base::Bind(
+ &PolicyServiceTest::OnPolicyRefresh,
+ base::Unretained(this)));
+ loop.RunAllPending();
+ Mock::VerifyAndClearExpectations(this);
+
+ EXPECT_CALL(*this, OnPolicyRefresh()).Times(0);
+ policy2_.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue0.DeepCopy());
+ provider2_.NotifyPolicyUpdated();
+ loop.RunAllPending();
+ Mock::VerifyAndClearExpectations(this);
+
+ // Providers 0 and 1 must reload again.
+ EXPECT_CALL(*this, OnPolicyRefresh()).Times(2);
+ base::FundamentalValue kValue2(2);
+ policy0_.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+ kValue2.DeepCopy());
+ provider0_.NotifyPolicyUpdated();
+ provider1_.NotifyPolicyUpdated();
+ loop.RunAllPending();
+ Mock::VerifyAndClearExpectations(this);
+
+ const PolicyMap* policies = policy_service_->GetPolicies(
+ POLICY_DOMAIN_CHROME, "");
+ ASSERT_TRUE(policies);
+ EXPECT_TRUE(base::Value::Equals(&kValue2, policies->GetValue("aaa")));
+ EXPECT_TRUE(base::Value::Equals(&kValue0, policies->GetValue("bbb")));
+}
+
} // namespace policy
« no previous file with comments | « chrome/browser/policy/policy_service_stub.cc ('k') | chrome/browser/prefs/proxy_policy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698