// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/device_api/device_attribute_api.h"
#include "base/test/gtest_tags.h"
#include "base/test/test_future.h"
#include "chrome/browser/ash/policy/core/device_policy_cros_browser_test.h"
#include "chromeos/ash/components/system/fake_statistics_provider.h"
#include "content/public/test/browser_test.h"
namespace {
constexpr char kAnnotatedAssetId[] = "annotated_asset_id";
constexpr char kAnnotatedLocation[] = "annotated_location";
constexpr char kDirectoryApiId[] = "directory_api_id";
constexpr char kHostname[] = "hostname";
constexpr char kSerialNumber[] = "serial_number";
} // namespace
// This test class provides unset device policy values and statistic data used
// by device attributes APIs.
class DeviceAttributeAPIUnsetTest : public policy::DevicePolicyCrosBrowserTest {
public:
void SetUpInProcessBrowserTestFixture() override {
DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
// Init machine statistic.
fake_statistics_provider_.SetMachineStatistic(ash::system::kSerialNumberKey,
std::string());
}
DeviceAttributeApi& device_attributes_api() { return device_attributes_api_; }
private:
ash::system::ScopedFakeStatisticsProvider fake_statistics_provider_;
DeviceAttributeApiImpl device_attributes_api_;
};
IN_PROC_BROWSER_TEST_F(DeviceAttributeAPIUnsetTest, AllAttributes) {
base::test::TestFuture<blink::mojom::DeviceAttributeResultPtr> future;
device_attributes_api().GetDirectoryId(future.GetCallback());
EXPECT_FALSE(future.Take()->get_attribute().has_value());
device_attributes_api().GetAnnotatedAssetId(future.GetCallback());
EXPECT_FALSE(future.Take()->get_attribute().has_value());
device_attributes_api().GetAnnotatedLocation(future.GetCallback());
EXPECT_FALSE(future.Take()->get_attribute().has_value());
device_attributes_api().GetSerialNumber(future.GetCallback());
EXPECT_FALSE(future.Take()->get_attribute().has_value());
device_attributes_api().GetHostname(future.GetCallback());
EXPECT_FALSE(future.Take()->get_attribute().has_value());
}
// This test class provides regular device policy values and statistic data used
// by device attributes APIs.
class DeviceAttributeAPITest : public policy::DevicePolicyCrosBrowserTest {
public:
void SetUpInProcessBrowserTestFixture() override {
DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
// Init the device policy.
device_policy()->SetDefaultSigningKey();
device_policy()->policy_data().set_annotated_asset_id(kAnnotatedAssetId);
device_policy()->policy_data().set_annotated_location(kAnnotatedLocation);
device_policy()->policy_data().set_directory_api_id(kDirectoryApiId);
enterprise_management::NetworkHostnameProto* proto =
device_policy()->payload().mutable_network_hostname();
proto->set_device_hostname_template(kHostname);
device_policy()->Build();
RefreshDevicePolicy();
// Init machine statistic.
fake_statistics_provider_.SetMachineStatistic(ash::system::kSerialNumberKey,
kSerialNumber);
}
DeviceAttributeApi& device_attributes_api() { return device_attributes_api_; }
private:
ash::system::ScopedFakeStatisticsProvider fake_statistics_provider_;
DeviceAttributeApiImpl device_attributes_api_;
};
IN_PROC_BROWSER_TEST_F(DeviceAttributeAPITest, AllAttributes) {
base::AddFeatureIdTagToTestResult(
"screenplay-163d36ff-e640-48e1-a451-03e14c9e8874");
base::test::TestFuture<blink::mojom::DeviceAttributeResultPtr> future;
device_attributes_api().GetDirectoryId(future.GetCallback());
EXPECT_EQ(future.Take()->get_attribute(), kDirectoryApiId);
device_attributes_api().GetAnnotatedAssetId(future.GetCallback());
EXPECT_EQ(future.Take()->get_attribute(), kAnnotatedAssetId);
device_attributes_api().GetAnnotatedLocation(future.GetCallback());
EXPECT_EQ(future.Take()->get_attribute(), kAnnotatedLocation);
device_attributes_api().GetHostname(future.GetCallback());
EXPECT_EQ(future.Take()->get_attribute(), kHostname);
device_attributes_api().GetSerialNumber(future.GetCallback());
EXPECT_EQ(future.Take()->get_attribute(), kSerialNumber);
}