| Index: chrome/browser/policy/forwarding_policy_provider_unittest.cc
|
| diff --git a/chrome/browser/policy/forwarding_policy_provider_unittest.cc b/chrome/browser/policy/forwarding_policy_provider_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8875f20d2660bbee484ecd005f036a8bf6f1350a
|
| --- /dev/null
|
| +++ b/chrome/browser/policy/forwarding_policy_provider_unittest.cc
|
| @@ -0,0 +1,173 @@
|
| +// Copyright (c) 2013 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/forwarding_policy_provider.h"
|
| +
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/values.h"
|
| +#include "chrome/browser/policy/mock_configuration_policy_provider.h"
|
| +#include "chrome/browser/policy/policy_bundle.h"
|
| +#include "chrome/browser/policy/policy_map.h"
|
| +#include "chrome/browser/policy/policy_types.h"
|
| +#include "chrome/browser/policy/schema_registry.h"
|
| +#include "components/policy/core/common/schema.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using testing::_;
|
| +using testing::Mock;
|
| +using testing::Return;
|
| +
|
| +namespace policy {
|
| +
|
| +class ForwardingPolicyProviderTest : public testing::Test {
|
| + protected:
|
| + ForwardingPolicyProviderTest() : forwarding_provider_(&mock_provider_) {
|
| + mock_provider_.Init();
|
| + forwarding_provider_.Init(&schema_registry_);
|
| + forwarding_provider_.AddObserver(&observer_);
|
| + }
|
| +
|
| + virtual ~ForwardingPolicyProviderTest() {
|
| + forwarding_provider_.RemoveObserver(&observer_);
|
| + forwarding_provider_.Shutdown();
|
| + mock_provider_.Shutdown();
|
| + }
|
| +
|
| + SchemaRegistry schema_registry_;
|
| + MockConfigurationPolicyObserver observer_;
|
| + MockConfigurationPolicyProvider mock_provider_;
|
| + ForwardingPolicyProvider forwarding_provider_;
|
| +};
|
| +
|
| +TEST_F(ForwardingPolicyProviderTest, Empty) {
|
| + EXPECT_FALSE(schema_registry_.IsReady());
|
| + EXPECT_FALSE(
|
| + forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS));
|
| +
|
| + EXPECT_CALL(mock_provider_, IsInitializationComplete(POLICY_DOMAIN_CHROME))
|
| + .WillOnce(Return(false));
|
| + EXPECT_FALSE(
|
| + forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME));
|
| + Mock::VerifyAndClearExpectations(&mock_provider_);
|
| +
|
| + const PolicyBundle empty_bundle;
|
| + EXPECT_TRUE(forwarding_provider_.policies().Equals(empty_bundle));
|
| +}
|
| +
|
| +TEST_F(ForwardingPolicyProviderTest, ForwardsChromePolicy) {
|
| + PolicyBundle bundle;
|
| + const PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, "");
|
| + bundle.Get(chrome_ns).Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + base::Value::CreateStringValue("value"), NULL);
|
| +
|
| + EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_));
|
| + scoped_ptr<PolicyBundle> delegate_bundle(new PolicyBundle);
|
| + delegate_bundle->CopyFrom(bundle);
|
| + delegate_bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"))
|
| + .Set("component policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + base::Value::CreateStringValue("not forwarded"), NULL);
|
| + mock_provider_.UpdatePolicy(delegate_bundle.Pass());
|
| + Mock::VerifyAndClearExpectations(&observer_);
|
| +
|
| + EXPECT_FALSE(
|
| + forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS));
|
| + EXPECT_TRUE(forwarding_provider_.policies().Equals(bundle));
|
| +}
|
| +
|
| +TEST_F(ForwardingPolicyProviderTest, RefreshPolicies) {
|
| + EXPECT_CALL(mock_provider_, RefreshPolicies());
|
| + forwarding_provider_.RefreshPolicies();
|
| + Mock::VerifyAndClearExpectations(&mock_provider_);
|
| +}
|
| +
|
| +TEST_F(ForwardingPolicyProviderTest, SchemaReady) {
|
| + EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_));
|
| + schema_registry_.SetReady(POLICY_DOMAIN_CHROME);
|
| + schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS);
|
| + Mock::VerifyAndClearExpectations(&observer_);
|
| +
|
| + EXPECT_TRUE(forwarding_provider_.IsInitializationComplete(
|
| + policy::POLICY_DOMAIN_EXTENSIONS));
|
| +}
|
| +
|
| +TEST_F(ForwardingPolicyProviderTest, SchemaReadyWithComponents) {
|
| + PolicyMap policy_map;
|
| + policy_map.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + base::Value::CreateStringValue("omg"), NULL);
|
| + scoped_ptr<PolicyBundle> bundle(new PolicyBundle);
|
| + bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")).CopyFrom(policy_map);
|
| + bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"))
|
| + .CopyFrom(policy_map);
|
| + EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_));
|
| + mock_provider_.UpdatePolicy(bundle.Pass());
|
| + Mock::VerifyAndClearExpectations(&observer_);
|
| +
|
| + EXPECT_CALL(mock_provider_, RefreshPolicies()).Times(0);
|
| + schema_registry_.RegisterComponent(
|
| + PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), Schema());
|
| + schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS);
|
| + Mock::VerifyAndClearExpectations(&mock_provider_);
|
| +
|
| + EXPECT_CALL(mock_provider_, RefreshPolicies());
|
| + schema_registry_.SetReady(POLICY_DOMAIN_CHROME);
|
| + Mock::VerifyAndClearExpectations(&mock_provider_);
|
| +
|
| + EXPECT_FALSE(forwarding_provider_.IsInitializationComplete(
|
| + policy::POLICY_DOMAIN_EXTENSIONS));
|
| + PolicyBundle expected_bundle;
|
| + expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, ""))
|
| + .CopyFrom(policy_map);
|
| + EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle));
|
| +
|
| + EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_));
|
| + forwarding_provider_.OnUpdatePolicy(&mock_provider_);
|
| + Mock::VerifyAndClearExpectations(&observer_);
|
| +
|
| + EXPECT_TRUE(forwarding_provider_.IsInitializationComplete(
|
| + policy::POLICY_DOMAIN_EXTENSIONS));
|
| + expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"))
|
| + .CopyFrom(policy_map);
|
| + EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle));
|
| +}
|
| +
|
| +TEST_F(ForwardingPolicyProviderTest, DelegateUpdates) {
|
| + schema_registry_.RegisterComponent(
|
| + PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), Schema());
|
| + EXPECT_FALSE(schema_registry_.IsReady());
|
| + EXPECT_FALSE(forwarding_provider_.IsInitializationComplete(
|
| + policy::POLICY_DOMAIN_EXTENSIONS));
|
| +
|
| + PolicyMap policy_map;
|
| + policy_map.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
|
| + base::Value::CreateStringValue("omg"), NULL);
|
| + // Chrome policy updates are forwarded even if the components aren't ready.
|
| + EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_));
|
| + mock_provider_.UpdateChromePolicy(policy_map);
|
| + Mock::VerifyAndClearExpectations(&observer_);
|
| +
|
| + EXPECT_CALL(mock_provider_, RefreshPolicies());
|
| + schema_registry_.SetReady(POLICY_DOMAIN_CHROME);
|
| + schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS);
|
| + EXPECT_TRUE(schema_registry_.IsReady());
|
| + Mock::VerifyAndClearExpectations(&mock_provider_);
|
| + EXPECT_FALSE(forwarding_provider_.IsInitializationComplete(
|
| + policy::POLICY_DOMAIN_EXTENSIONS));
|
| +
|
| + // The forwarding provider becomes ready after this refresh completes, and
|
| + // starts forwarding policy updates after that.
|
| + EXPECT_CALL(observer_, OnUpdatePolicy(_));
|
| + mock_provider_.UpdateChromePolicy(policy_map);
|
| + Mock::VerifyAndClearExpectations(&observer_);
|
| +
|
| + EXPECT_TRUE(forwarding_provider_.IsInitializationComplete(
|
| + policy::POLICY_DOMAIN_EXTENSIONS));
|
| +
|
| + // Keeps forwarding.
|
| + EXPECT_CALL(observer_, OnUpdatePolicy(_));
|
| + mock_provider_.UpdateChromePolicy(policy_map);
|
| + Mock::VerifyAndClearExpectations(&observer_);
|
| +}
|
| +
|
| +} // namespace policy
|
|
|