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

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

Issue 10191005: Added PolicyChangeRegistrar, to observe specific policies at the PolicyService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moved mock method to the test class 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.cc ('k') | chrome/chrome_browser.gypi » ('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 9fa0de5991ac795e5f00de52f2feaaa5ca169dd0..1c9baf16b97cfee76b0c708a517409a1c00d2ea7 100644
--- a/chrome/browser/policy/policy_service_unittest.cc
+++ b/chrome/browser/policy/policy_service_unittest.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/policy/policy_service_impl.h"
+#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/memory/scoped_ptr.h"
#include "base/values.h"
#include "chrome/browser/policy/mock_configuration_policy_provider.h"
@@ -33,6 +35,12 @@ MATCHER_P(PolicyEquals, expected, "") {
return arg.Equals(*expected);
}
+// Helper to compare the arguments to an EXPECT_CALL of OnPolicyValueUpdated()
+// with their expected values.
+MATCHER_P(ValueEquals, expected, "") {
+ return base::Value::Equals(arg, expected);
+}
+
} // namespace
class PolicyServiceTest : public testing::Test {
@@ -49,12 +57,10 @@ class PolicyServiceTest : public testing::Test {
providers.push_back(&provider1_);
providers.push_back(&provider2_);
policy_service_.reset(new PolicyServiceImpl(providers));
- policy_service_->AddObserver(POLICY_DOMAIN_CHROME, "", &observer_);
}
- void TearDown() OVERRIDE {
- policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, "", &observer_);
- }
+ MOCK_METHOD2(OnPolicyValueUpdated, void(const base::Value*,
+ const base::Value*));
// Returns true if the policies for |domain|, |component_id| match |expected|.
bool VerifyPolicies(PolicyDomain domain,
@@ -70,7 +76,6 @@ class PolicyServiceTest : public testing::Test {
MockConfigurationPolicyProvider provider1_;
MockConfigurationPolicyProvider provider2_;
scoped_ptr<PolicyServiceImpl> policy_service_;
- MockPolicyServiceObserver observer_;
private:
DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest);
@@ -84,6 +89,9 @@ TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) {
}
TEST_F(PolicyServiceTest, NotifyObservers) {
+ MockPolicyServiceObserver observer;
+ policy_service_->AddObserver(POLICY_DOMAIN_CHROME, "", &observer);
+
PolicyMap expectedPrevious;
expectedPrevious.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(13));
@@ -93,16 +101,16 @@ TEST_F(PolicyServiceTest, NotifyObservers) {
expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(123));
provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(123));
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
// No changes.
- EXPECT_CALL(observer_, OnPolicyUpdated(_, _, _, _)).Times(0);
+ EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
// New policy.
@@ -110,46 +118,46 @@ TEST_F(PolicyServiceTest, NotifyObservers) {
expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(456));
provider0_.AddMandatoryPolicy("bbb", base::Value::CreateIntegerValue(456));
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
// Removed policy.
expectedPrevious.CopyFrom(expectedCurrent);
expectedCurrent.Erase("bbb");
provider0_.RemovePolicy("bbb");
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ 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));
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
// No changes again.
- EXPECT_CALL(observer_, OnPolicyUpdated(_, _, _, _)).Times(0);
+ EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
+
+ policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, "", &observer);
}
TEST_F(PolicyServiceTest, Priorities) {
PolicyMap expected;
expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(13));
- EXPECT_CALL(observer_, OnPolicyUpdated(_, _, _, _)).Times(AnyNumber());
-
expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(0));
provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(0));
@@ -173,4 +181,55 @@ TEST_F(PolicyServiceTest, Priorities) {
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
}
+TEST_F(PolicyServiceTest, PolicyChangeRegistrar) {
+ scoped_ptr<PolicyChangeRegistrar> registrar(
+ new PolicyChangeRegistrar(
+ policy_service_.get(), POLICY_DOMAIN_CHROME, ""));
+
+ // Starting to observe existing policies doesn't trigger a notification.
+ EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
+ registrar->Observe("pre", base::Bind(
+ &PolicyServiceTest::OnPolicyValueUpdated,
+ base::Unretained(this)));
+ registrar->Observe("aaa", base::Bind(
+ &PolicyServiceTest::OnPolicyValueUpdated,
+ base::Unretained(this)));
+ Mock::VerifyAndClearExpectations(this);
+
+ // Changing it now triggers a notification.
+ base::FundamentalValue kValue0(0);
+ EXPECT_CALL(*this, OnPolicyValueUpdated(NULL, ValueEquals(&kValue0)));
+ provider0_.AddMandatoryPolicy("aaa", kValue0.DeepCopy());
+ provider0_.RefreshPolicies();
+ Mock::VerifyAndClearExpectations(this);
+
+ // Changing other values doesn't trigger a notification.
+ EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
+ provider0_.AddMandatoryPolicy("bbb", kValue0.DeepCopy());
+ provider0_.RefreshPolicies();
+ 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();
+ Mock::VerifyAndClearExpectations(this);
+
+ // Removing the value triggers a notification.
+ EXPECT_CALL(*this, OnPolicyValueUpdated(ValueEquals(&kValue1), NULL));
+ provider0_.RemovePolicy("aaa");
+ provider0_.RefreshPolicies();
+ 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();
+ Mock::VerifyAndClearExpectations(this);
+}
+
} // namespace policy
« no previous file with comments | « chrome/browser/policy/policy_service.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698