Commit 64a0e62f authored by Yann Dago's avatar Yann Dago Committed by Commit Bot

Add ScopedManagementServiceOverrideForTesting class

Bug: 1086955
Change-Id: Ifd20ded53728b7b24838a343b9dd9ab4bbe2d797
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2231295Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Commit-Queue: Yann Dago <ydago@chromium.org>
Cr-Commit-Position: refs/heads/master@{#777344}
parent 270fed41
......@@ -9,7 +9,7 @@
namespace policy {
BrowserManagementService::BrowserManagementService(Profile* profile)
: profile_(profile) {
: ManagementService(ManagementTarget::BROWSER), profile_(profile) {
InitManagementStatusProviders();
}
......
......@@ -304,6 +304,8 @@ jumbo_static_library("test_support") {
"configuration_policy_provider_test.h",
"fake_async_policy_loader.cc",
"fake_async_policy_loader.h",
"management/scoped_management_service_override_for_testing.cc",
"management/scoped_management_service_override_for_testing.h",
"mock_configuration_policy_provider.cc",
"mock_configuration_policy_provider.h",
"mock_policy_service.cc",
......
......@@ -4,10 +4,15 @@
#include "components/policy/core/common/management/management_service.h"
#include "base/containers/flat_map.h"
namespace policy {
namespace {
base::flat_map<ManagementTarget, base::flat_set<EnterpriseManagementAuthority>>*
g_management_authorities_overrides = nullptr;
ManagementAuthorityTrustworthiness GetTrustworthiness(
const base::flat_set<EnterpriseManagementAuthority> authorities) {
if (authorities.find(EnterpriseManagementAuthority::CLOUD_DOMAIN) !=
......@@ -29,11 +34,17 @@ ManagementAuthorityTrustworthiness GetTrustworthiness(
ManagementStatusProvider::~ManagementStatusProvider() = default;
ManagementService::ManagementService() = default;
ManagementService::ManagementService(ManagementTarget target)
: target_(target) {}
ManagementService::~ManagementService() = default;
base::flat_set<EnterpriseManagementAuthority>
ManagementService::GetManagementAuthorities() {
if (g_management_authorities_overrides) {
auto values_for_testing = g_management_authorities_overrides->find(target_);
if (values_for_testing != g_management_authorities_overrides->end())
return values_for_testing->second;
}
base::flat_set<EnterpriseManagementAuthority> result;
for (const auto& delegate : management_status_providers_) {
if (delegate->IsManaged())
......@@ -52,4 +63,27 @@ void ManagementService::SetManagementStatusProvider(
management_status_providers_ = std::move(providers);
}
void ManagementService::SetManagementAuthoritiesForTesting(
ManagementTarget target,
base::flat_set<EnterpriseManagementAuthority> authorities) {
if (!g_management_authorities_overrides)
g_management_authorities_overrides =
new base::flat_map<ManagementTarget,
base::flat_set<EnterpriseManagementAuthority>>();
DCHECK(g_management_authorities_overrides->find(target) ==
g_management_authorities_overrides->end());
g_management_authorities_overrides->insert(
std::make_pair(target, std::move(authorities)));
}
void ManagementService::RemoveManagementAuthoritiesForTesting(
ManagementTarget target) {
DCHECK(g_management_authorities_overrides);
g_management_authorities_overrides->erase(target);
if (g_management_authorities_overrides->empty()) {
delete g_management_authorities_overrides;
g_management_authorities_overrides = nullptr;
}
}
} // namespace policy
......@@ -10,6 +10,10 @@
namespace policy {
class ScopedManagementServiceOverrideForTesting;
enum class ManagementTarget { PLATFORM = 0, BROWSER = 1, kMaxValue = BROWSER };
enum class ManagementAuthorityTrustworthiness {
NONE = 0, // No management authority found
LOW = 1, // Local device management authority
......@@ -44,7 +48,7 @@ class POLICY_EXPORT ManagementStatusProvider {
// Interface to gives information related to an entity's management state.
class POLICY_EXPORT ManagementService {
public:
ManagementService();
explicit ManagementService(ManagementTarget target);
virtual ~ManagementService();
// Returns all the active management authorities on the managed entity.
......@@ -65,6 +69,13 @@ class POLICY_EXPORT ManagementService {
private:
std::vector<std::unique_ptr<ManagementStatusProvider>>
management_status_providers_;
ManagementTarget target_;
static void SetManagementAuthoritiesForTesting(
ManagementTarget target,
base::flat_set<EnterpriseManagementAuthority> authorities);
static void RemoveManagementAuthoritiesForTesting(ManagementTarget target);
friend ScopedManagementServiceOverrideForTesting;
};
} // namespace policy
......
......@@ -3,7 +3,7 @@
// found in the LICENSE file.
#include "components/policy/core/common/management/management_service.h"
#include "components/policy/core/common/management/scoped_management_service_override_for_testing.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace policy {
......@@ -28,6 +28,9 @@ class TestManagementStatusProvider : public ManagementStatusProvider {
class TestManagementService : public ManagementService {
public:
TestManagementService() : ManagementService(ManagementTarget::kMaxValue) {}
explicit TestManagementService(ManagementTarget target)
: ManagementService(target) {}
void SetManagementStatusProviderForTesting(
std::vector<std::unique_ptr<ManagementStatusProvider>> providers) {
SetManagementStatusProvider(std::move(providers));
......@@ -38,6 +41,62 @@ class TestManagementService : public ManagementService {
void InitManagementStatusProviders() override {}
};
TEST(ManagementService, ScopedManagementServiceOverrideForTesting) {
TestManagementService platform_management_service(ManagementTarget::PLATFORM);
TestManagementService browser_management_service(ManagementTarget::BROWSER);
std::vector<std::unique_ptr<ManagementStatusProvider>> providers;
providers.emplace_back(std::make_unique<TestManagementStatusProvider>(
EnterpriseManagementAuthority::CLOUD, true));
providers.emplace_back(std::make_unique<TestManagementStatusProvider>(
EnterpriseManagementAuthority::CLOUD_DOMAIN, true));
providers.emplace_back(std::make_unique<TestManagementStatusProvider>(
EnterpriseManagementAuthority::COMPUTER_LOCAL, true));
providers.emplace_back(std::make_unique<TestManagementStatusProvider>(
EnterpriseManagementAuthority::DOMAIN_LOCAL, true));
platform_management_service.SetManagementStatusProviderForTesting(
std::move(providers));
auto platform_authorities =
platform_management_service.GetManagementAuthorities();
EXPECT_TRUE(browser_management_service.GetManagementAuthorities().empty());
EXPECT_EQ(platform_authorities.size(), 4u);
EXPECT_NE(platform_authorities.find(EnterpriseManagementAuthority::CLOUD),
platform_authorities.end());
EXPECT_NE(
platform_authorities.find(EnterpriseManagementAuthority::CLOUD_DOMAIN),
platform_authorities.end());
EXPECT_NE(
platform_authorities.find(EnterpriseManagementAuthority::COMPUTER_LOCAL),
platform_authorities.end());
EXPECT_NE(
platform_authorities.find(EnterpriseManagementAuthority::DOMAIN_LOCAL),
platform_authorities.end());
{
ScopedManagementServiceOverrideForTesting
scoped_management_service_override(
ManagementTarget::PLATFORM,
base::flat_set<EnterpriseManagementAuthority>(
{EnterpriseManagementAuthority::CLOUD,
EnterpriseManagementAuthority::DOMAIN_LOCAL}));
auto platform_authorities =
platform_management_service.GetManagementAuthorities();
EXPECT_TRUE(browser_management_service.GetManagementAuthorities().empty());
EXPECT_EQ(platform_authorities.size(), 2u);
EXPECT_NE(platform_authorities.find(EnterpriseManagementAuthority::CLOUD),
platform_authorities.end());
EXPECT_NE(
platform_authorities.find(EnterpriseManagementAuthority::DOMAIN_LOCAL),
platform_authorities.end());
}
{
ScopedManagementServiceOverrideForTesting
scoped_management_service_override(
ManagementTarget::PLATFORM,
base::flat_set<EnterpriseManagementAuthority>());
EXPECT_TRUE(browser_management_service.GetManagementAuthorities().empty());
EXPECT_TRUE(platform_management_service.GetManagementAuthorities().empty());
}
}
// Tests that only the authorities that are actively managing are returned.
TEST(ManagementService, GetManagementAuthorities) {
TestManagementService management_service;
......
......@@ -11,7 +11,8 @@
namespace policy {
PlatformManagementService::PlatformManagementService() {
PlatformManagementService::PlatformManagementService()
: ManagementService(ManagementTarget::PLATFORM) {
InitManagementStatusProviders();
}
......
// Copyright 2020 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 "components/policy/core/common/management/scoped_management_service_override_for_testing.h"
namespace policy {
ScopedManagementServiceOverrideForTesting::
ScopedManagementServiceOverrideForTesting(
ManagementTarget target,
base::flat_set<EnterpriseManagementAuthority> authorities)
: target_(target) {
ManagementService::SetManagementAuthoritiesForTesting(target,
std::move(authorities));
}
ScopedManagementServiceOverrideForTesting::
~ScopedManagementServiceOverrideForTesting() {
ManagementService::RemoveManagementAuthoritiesForTesting(target_);
}
} // namespace policy
// Copyright 2020 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.
#ifndef COMPONENTS_POLICY_CORE_COMMON_MANAGEMENT_SCOPED_MANAGEMENT_SERVICE_OVERRIDE_FOR_TESTING_H_
#define COMPONENTS_POLICY_CORE_COMMON_MANAGEMENT_SCOPED_MANAGEMENT_SERVICE_OVERRIDE_FOR_TESTING_H_
#include "base/containers/flat_set.h"
#include "components/policy/core/common/management/management_service.h"
namespace policy {
// Sets the management authorities override for |target| on construction, and
// removes it when the object goes out of scope. This class is intended to be
// used by tests that need to override management authorities to ensure their
// overrides are properly handled and reverted when the scope of the test is
// left. This class does not support nested scopes. There can only be one
// override for the same |target| in a scope.
// |target| here can be either the platform or the browser.
// |authorities| here are the management authorities we want to fake as active
// for the testing purposes.
// Use case example:
// ScopedManagementServiceOverrideForTesting
// scoped_management_service_override(ManagementTarget::PLATFORM,
// base::flat_set<EnterpriseManagementAuthority{
// EnterpriseManagementAuthority::DOMAIN_LOCAL
// }));
class ScopedManagementServiceOverrideForTesting {
public:
ScopedManagementServiceOverrideForTesting(
ManagementTarget target,
base::flat_set<EnterpriseManagementAuthority> authorities);
~ScopedManagementServiceOverrideForTesting();
private:
ManagementTarget target_;
};
} // namespace policy
#endif // #define
// COMPONENTS_POLICY_CORE_COMMON_MANAGEMENT_SCOPED_MANAGEMENT_SERVICE_OVERRIDE_FOR_TESTING_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment