chromium/chrome/browser/ash/policy/core/device_attributes_browsertest.cc

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <optional>

#include "base/run_loop.h"
#include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
#include "chrome/browser/ash/policy/core/device_attributes_impl.h"
#include "chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.h"
#include "chrome/browser/ash/policy/core/device_cloud_policy_store_ash.h"
#include "chrome/browser/ash/policy/core/device_policy_cros_browser_test.h"
#include "chrome/browser/ash/settings/scoped_testing_cros_settings.h"
#include "chrome/browser/ash/settings/stub_cros_settings_provider.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_process_platform_part_ash.h"
#include "chromeos/ash/components/install_attributes/stub_install_attributes.h"
#include "chromeos/ash/components/settings/cros_settings_names.h"
#include "chromeos/ash/components/system/fake_statistics_provider.h"
#include "chromeos/ash/components/system/statistics_provider.h"
#include "components/policy/core/common/cloud/cloud_policy_constants.h"
#include "components/policy/core/common/cloud/mock_cloud_policy_store.h"
#include "components/policy/core/common/cloud/test/policy_builder.h"
#include "components/policy/proto/device_management_backend.pb.h"
#include "content/public/test/browser_test.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

using testing::InvokeWithoutArgs;

namespace policy {

namespace {

constexpr char kFakeDomain[] = "fake.domain.acme.corp";
constexpr char kFakeDisplayDomain[] = "acme.corp";
constexpr char kFakeSSOProfile[] = "fake sso profile";
constexpr char kFakeAssetId[] = "fake asset ID";
constexpr char kFakeSerialNumber[] = "fake serial number";
constexpr char kFakeMachineName[] = "fake machine name";
constexpr char kFakeAnnotatedLocation[] = "fake annotated location";
constexpr char kFakeHostname[] = "fake-hostname";
constexpr char kFakeDirectoryApiID[] = "fake directory API ID";
constexpr char kFakeObfuscatedCustomerID[] = "fake obfuscated customer ID";
constexpr char kFakeLogoURL[] = "www.fakelogo.com/url";
constexpr char kFakeDeviceID[] = "fake device ID";

}  // namespace

class DeviceAttributesTest : public DevicePolicyCrosBrowserTest {
 public:
  DeviceAttributesTest() {
    device_state_.set_skip_initial_policy_setup(true);
    fake_statistics_provider_.SetVpdStatus(
        ash::system::StatisticsProvider::VpdStatus::kValid);
  }

  ~DeviceAttributesTest() override = default;

 protected:
  ash::StubInstallAttributes* stub_install_attributes() {
    return install_attributes_.Get();
  }

  DeviceAttributesImpl attributes_;
  ash::ScopedStubInstallAttributes install_attributes_;
  ash::ScopedTestingCrosSettings scoped_testing_cros_settings_;
  ash::system::ScopedFakeStatisticsProvider fake_statistics_provider_;
};

IN_PROC_BROWSER_TEST_F(DeviceAttributesTest, ReturnsAttributes) {
  // Attributes are empty before setting device policy and install attributes.
  EXPECT_EQ("", attributes_.GetEnterpriseEnrollmentDomain());
  EXPECT_EQ("", attributes_.GetEnterpriseDomainManager());
  EXPECT_EQ("", attributes_.GetSSOProfile());
  EXPECT_EQ("", attributes_.GetDeviceAssetID());
  EXPECT_EQ("", attributes_.GetDeviceSerialNumber());
  EXPECT_EQ("", attributes_.GetMachineName());
  EXPECT_EQ("", attributes_.GetDeviceAnnotatedLocation());
  EXPECT_EQ(std::nullopt, attributes_.GetDeviceHostname());
  EXPECT_EQ("", attributes_.GetDirectoryApiID());
  EXPECT_EQ("", attributes_.GetObfuscatedCustomerID());
  EXPECT_EQ("", attributes_.GetCustomerLogoURL());
  EXPECT_EQ(MarketSegment::UNKNOWN, attributes_.GetEnterpriseMarketSegment());

  // Set fake device policy and install attributes.
  stub_install_attributes()->SetCloudManaged(kFakeDomain, kFakeDeviceID);
  device_policy()->policy_data().set_display_domain(kFakeDisplayDomain);
  device_policy()->policy_data().set_sso_profile(kFakeSSOProfile);
  device_policy()->policy_data().set_annotated_asset_id(kFakeAssetId);
  device_policy()->policy_data().set_machine_name(kFakeMachineName);
  device_policy()->policy_data().set_annotated_location(kFakeAnnotatedLocation);
  device_policy()->policy_data().set_directory_api_id(kFakeDirectoryApiID);
  device_policy()->policy_data().set_obfuscated_customer_id(
      kFakeObfuscatedCustomerID);
  device_policy()->policy_data().mutable_customer_logo()->set_logo_url(
      kFakeLogoURL);
  device_policy()->policy_data().set_market_segment(
      enterprise_management::PolicyData_MarketSegment_ENROLLED_ENTERPRISE);
  scoped_testing_cros_settings_.device_settings()->Set(
      ash::kDeviceHostnameTemplate, base::Value(kFakeHostname));
  policy_helper()->RefreshPolicyAndWaitUntilDeviceCloudPolicyUpdated();

  fake_statistics_provider_.SetMachineStatistic(ash::system::kSerialNumberKey,
                                                kFakeSerialNumber);

  // Verify returned attributes correspond to what was set.
  EXPECT_EQ(kFakeDomain, attributes_.GetEnterpriseEnrollmentDomain());
  EXPECT_EQ(kFakeDisplayDomain, attributes_.GetEnterpriseDomainManager());
  EXPECT_EQ(kFakeSSOProfile, attributes_.GetSSOProfile());
  EXPECT_EQ(kFakeAssetId, attributes_.GetDeviceAssetID());
  EXPECT_EQ(kFakeSerialNumber, attributes_.GetDeviceSerialNumber());
  EXPECT_EQ(kFakeMachineName, attributes_.GetMachineName());
  EXPECT_EQ(kFakeAnnotatedLocation, attributes_.GetDeviceAnnotatedLocation());
  EXPECT_EQ(kFakeHostname, attributes_.GetDeviceHostname());
  EXPECT_EQ(kFakeDirectoryApiID, attributes_.GetDirectoryApiID());
  EXPECT_EQ(kFakeObfuscatedCustomerID, attributes_.GetObfuscatedCustomerID());
  EXPECT_EQ(kFakeLogoURL, attributes_.GetCustomerLogoURL());
  EXPECT_EQ(MarketSegment::ENTERPRISE,
            attributes_.GetEnterpriseMarketSegment());
}

}  // namespace policy