profile_policy_connector_unittest.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector.h"
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/message_loop/message_loop.h"
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/run_loop.h"
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/values.h"
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/autofill/core/common/autofill_pref_names.h"
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/browser/browser_policy_connector.h"
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_constants.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_manager.h"
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/cloud/mock_cloud_policy_store.h"
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/mock_configuration_policy_provider.h"
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/policy_bundle.h"
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/policy_service.h"
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/common/schema_registry.h"
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "policy/policy_constants.h"
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using testing::Return;
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using testing::_;
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace policy {
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ProfilePolicyConnectorTest : public testing::Test {
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected:
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ProfilePolicyConnectorTest() {}
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~ProfilePolicyConnectorTest() {}
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    // This must be set up before the TestingBrowserProcess is created.
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    BrowserPolicyConnector::SetPolicyProviderForTesting(&mock_provider_);
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_CALL(mock_provider_, IsInitializationComplete(_))
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        .WillRepeatedly(Return(true));
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    cloud_policy_store_.NotifyStoreLoaded();
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    cloud_policy_manager_.reset(
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        new CloudPolicyManager(PolicyNamespaceKey("", ""),
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                               &cloud_policy_store_,
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                               loop_.message_loop_proxy(),
4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                               loop_.message_loop_proxy(),
4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                               loop_.message_loop_proxy()));
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void TearDown() {
5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    TestingBrowserProcess::GetGlobal()->SetBrowserPolicyConnector(NULL);
5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    cloud_policy_manager_->Shutdown();
5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  base::MessageLoop loop_;
5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SchemaRegistry schema_registry_;
5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  MockConfigurationPolicyProvider mock_provider_;
5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  MockCloudPolicyStore cloud_policy_store_;
6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<CloudPolicyManager> cloud_policy_manager_;
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ProfilePolicyConnectorTest, IsPolicyFromCloudPolicy) {
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ProfilePolicyConnector connector;
6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  connector.Init(false,
6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_CHROMEOS)
6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                 NULL,
6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                 &schema_registry_,
7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                 cloud_policy_manager_.get());
7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // No policy is set initially.
7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(
7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      connector.IsPolicyFromCloudPolicy(autofill::prefs::kAutofillEnabled));
7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, "");
7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(connector.policy_service()->GetPolicies(chrome_ns).GetValue(
7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      key::kAutoFillEnabled));
7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Set the policy at the cloud provider.
8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  cloud_policy_store_.policy_map_.Set(key::kAutoFillEnabled,
8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                      POLICY_LEVEL_MANDATORY,
8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                      POLICY_SCOPE_USER,
8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                      new base::FundamentalValue(false),
8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                      NULL);
8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  cloud_policy_store_.NotifyStoreLoaded();
8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  base::RunLoop().RunUntilIdle();
8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(connector.IsPolicyFromCloudPolicy(key::kAutoFillEnabled));
8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const base::Value* value =
8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      connector.policy_service()->GetPolicies(chrome_ns).GetValue(
9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          key::kAutoFillEnabled);
9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_TRUE(value);
9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(base::FundamentalValue(false).Equals(value));
9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Now test with a higher-priority provider also setting the policy.
9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PolicyMap map;
9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  map.Set(key::kAutoFillEnabled,
9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          POLICY_LEVEL_MANDATORY,
9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          POLICY_SCOPE_USER,
9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          new base::FundamentalValue(true),
10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)          NULL);
10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  mock_provider_.UpdateChromePolicy(map);
10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(connector.IsPolicyFromCloudPolicy(key::kAutoFillEnabled));
10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  value = connector.policy_service()->GetPolicies(chrome_ns).GetValue(
10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      key::kAutoFillEnabled);
10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ASSERT_TRUE(value);
10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_TRUE(base::FundamentalValue(true).Equals(value));
10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Cleanup.
10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  connector.Shutdown();
11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace policy
113