| 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
|
| deleted file mode 100644
|
| index 27cf3b3435c4ee37b1636665988e29761eb98759..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/policy/policy_service_unittest.cc
|
| +++ /dev/null
|
| @@ -1,346 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#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/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 {
|
| -
|
| -namespace {
|
| -
|
| -class MockPolicyServiceObserver : public PolicyService::Observer {
|
| - public:
|
| - virtual ~MockPolicyServiceObserver() {}
|
| - MOCK_METHOD4(OnPolicyUpdated, void(PolicyDomain,
|
| - const std::string&,
|
| - const PolicyMap& previous,
|
| - const PolicyMap& current));
|
| -};
|
| -
|
| -// Helper to compare the arguments to an EXPECT_CALL of OnPolicyUpdated() with
|
| -// their expected values.
|
| -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 {
|
| - public:
|
| - PolicyServiceTest() {}
|
| -
|
| - void SetUp() OVERRIDE {
|
| - 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_);
|
| - providers.push_back(&provider2_);
|
| - policy_service_.reset(new PolicyServiceImpl(providers));
|
| - }
|
| -
|
| - 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,
|
| - const PolicyMap& expected) {
|
| - const PolicyMap* policies =
|
| - policy_service_->GetPolicies(domain, component_id);
|
| - return policies && policies->Equals(expected);
|
| - }
|
| -
|
| - protected:
|
| - MockConfigurationPolicyProvider provider0_;
|
| - MockConfigurationPolicyProvider provider1_;
|
| - MockConfigurationPolicyProvider provider2_;
|
| - PolicyMap policy0_;
|
| - PolicyMap policy1_;
|
| - PolicyMap policy2_;
|
| - scoped_ptr<PolicyServiceImpl> policy_service_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest);
|
| -};
|
| -
|
| -TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) {
|
| - PolicyMap expected;
|
| - expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| - base::Value::CreateIntegerValue(13));
|
| - EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
|
| -}
|
| -
|
| -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));
|
| -
|
| - PolicyMap expectedCurrent;
|
| - expectedCurrent.CopyFrom(expectedPrevious);
|
| - expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| - 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_.NotifyPolicyUpdated();
|
| - Mock::VerifyAndClearExpectations(&observer);
|
| -
|
| - // No changes.
|
| - EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
|
| - provider0_.NotifyPolicyUpdated();
|
| - Mock::VerifyAndClearExpectations(&observer);
|
| - EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
|
| -
|
| - // New policy.
|
| - expectedPrevious.CopyFrom(expectedCurrent);
|
| - expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| - 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_.NotifyPolicyUpdated();
|
| - Mock::VerifyAndClearExpectations(&observer);
|
| -
|
| - // Removed policy.
|
| - expectedPrevious.CopyFrom(expectedCurrent);
|
| - expectedCurrent.Erase("bbb");
|
| - policy0_.Erase("bbb");
|
| - EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
|
| - PolicyEquals(&expectedPrevious),
|
| - PolicyEquals(&expectedCurrent)));
|
| - provider0_.NotifyPolicyUpdated();
|
| - Mock::VerifyAndClearExpectations(&observer);
|
| -
|
| - // Changed policy.
|
| - expectedPrevious.CopyFrom(expectedCurrent);
|
| - expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| - 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_.NotifyPolicyUpdated();
|
| - Mock::VerifyAndClearExpectations(&observer);
|
| -
|
| - // No changes again.
|
| - EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
|
| - provider0_.NotifyPolicyUpdated();
|
| - 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));
|
| - expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| - base::Value::CreateIntegerValue(0));
|
| - 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));
|
| - 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));
|
| - policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
|
| - base::Value::CreateIntegerValue(1));
|
| - provider1_.NotifyPolicyUpdated();
|
| - 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)));
|
| - 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);
|
| - 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)));
|
| - 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));
|
| - policy0_.Erase("aaa");
|
| - provider0_.NotifyPolicyUpdated();
|
| - Mock::VerifyAndClearExpectations(this);
|
| -
|
| - // No more notifications after destroying the registrar.
|
| - EXPECT_CALL(*this, OnPolicyValueUpdated(_, _)).Times(0);
|
| - registrar.reset();
|
| - 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
|
|
|