blob: 713273ebcf6a2796a134ff2da3a7402c3682c044 [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flex_hwis/flex_hwis_mojo.h"
#include "flex_hwis/hwis_data.pb.h"
#include "flex_hwis/telemetry_for_testing.h"
#include <optional>
#include <utility>
#include <base/files/scoped_temp_dir.h>
#include <diagnostics/mojom/public/cros_healthd.mojom.h>
#include <diagnostics/mojom/public/cros_healthd_probe.mojom.h>
#include <diagnostics/mojom/public/cros_healthd_probe.mojom-forward.h>
#include <diagnostics/mojom/public/cros_healthd_probe.mojom-shared.h>
#include <gtest/gtest.h>
#include <mojo/public/cpp/bindings/remote.h>
#include <mojo/service_constants.h>
namespace flex_hwis {
namespace mojom = ::ash::cros_healthd::mojom;
class FlexHwisMojoTest : public ::testing::Test {
protected:
void SetUp() override {
CHECK(test_dir_.CreateUniqueTempDir());
flex_hwis_mojo_ = flex_hwis::FlexHwisMojo();
}
std::optional<flex_hwis::FlexHwisMojo> flex_hwis_mojo_;
base::ScopedTempDir test_dir_;
flex_hwis::TelemetryForTesting telemetry_;
};
TEST_F(FlexHwisMojoTest, MojoSystem) {
hwis_proto::Device data;
telemetry_.AddSystemInfo();
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetSystemInfo(&data);
EXPECT_EQ(data.mutable_dmi_info()->vendor(), kSystemVersion);
EXPECT_EQ(data.mutable_dmi_info()->product_name(), kSystemProductName);
EXPECT_EQ(data.mutable_dmi_info()->product_version(), kSystemProductVersion);
EXPECT_EQ(data.mutable_bios()->bios_version(), kSystemBiosVersion);
EXPECT_EQ(data.mutable_bios()->uefi(), kSystemUefi);
}
TEST_F(FlexHwisMojoTest, MojoCpu) {
hwis_proto::Device data;
telemetry_.AddCpuInfo();
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetCpuInfo(&data);
EXPECT_EQ(data.cpu(0).name(), kCpuModelName);
}
TEST_F(FlexHwisMojoTest, MojoMemory) {
hwis_proto::Device data;
telemetry_.AddMemoryInfo();
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetMemoryInfo(&data);
EXPECT_EQ(data.mutable_memory()->total_kib(), kMemoryKib);
}
TEST_F(FlexHwisMojoTest, MojoBusEthernet) {
hwis_proto::Device data;
telemetry_.AddPciBusInfo(mojom::BusDeviceClass::kEthernetController);
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetBusInfo(&data);
EXPECT_EQ(data.ethernet_adapter(0).name(), kBusPciName);
EXPECT_EQ(data.ethernet_adapter(0).id(), kPciId);
EXPECT_EQ(data.ethernet_adapter(0).driver(0), kDriver);
EXPECT_EQ(data.ethernet_adapter(0).bus(), hwis_proto::Device::PCI);
}
TEST_F(FlexHwisMojoTest, MojoBusWireless) {
hwis_proto::Device data;
telemetry_.AddPciBusInfo(mojom::BusDeviceClass::kWirelessController);
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetBusInfo(&data);
EXPECT_EQ(data.wireless_adapter(0).name(), kBusPciName);
EXPECT_EQ(data.wireless_adapter(0).id(), kPciId);
EXPECT_EQ(data.wireless_adapter(0).driver(0), kDriver);
EXPECT_EQ(data.wireless_adapter(0).bus(), hwis_proto::Device::PCI);
}
TEST_F(FlexHwisMojoTest, MojoBusBluetooth) {
hwis_proto::Device data;
telemetry_.AddUsbBusInfo(mojom::BusDeviceClass::kBluetoothAdapter);
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetBusInfo(&data);
EXPECT_EQ(data.bluetooth_adapter(0).name(), kBusUsbName);
EXPECT_EQ(data.bluetooth_adapter(0).id(), kUsbId);
EXPECT_EQ(data.bluetooth_adapter(0).driver(0), kDriver);
EXPECT_EQ(data.bluetooth_adapter(0).bus(), hwis_proto::Device::USB);
}
TEST_F(FlexHwisMojoTest, MojoBusDisplay) {
hwis_proto::Device data;
// Some flex devices have multiple graphics adapters.
telemetry_.AddPciBusInfo(mojom::BusDeviceClass::kDisplayController,
kPciVendorName, kBusProductName, kPciBusVendorId,
kPciBusDeviceId, kPciBusDriver);
telemetry_.AddPciBusInfo(mojom::BusDeviceClass::kDisplayController,
kPciVendorName, kBusProductName,
kSecondPciBusVendorId, kSecondPciBusDeviceId,
kPciBusDriver);
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetBusInfo(&data);
EXPECT_EQ(data.gpu(0).name(), kBusPciName);
EXPECT_EQ(data.gpu(0).id(), kPciId);
EXPECT_EQ(data.gpu(0).driver(0), kDriver);
EXPECT_EQ(data.gpu(0).bus(), hwis_proto::Device::PCI);
EXPECT_EQ(data.gpu(1).id(), kSecondPciId);
}
TEST_F(FlexHwisMojoTest, MojoGraphics) {
hwis_proto::Device data;
telemetry_.AddGraphicsInfo();
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetGraphicInfo(&data);
EXPECT_EQ(data.mutable_graphics_info()->gl_version(), kGraphicsVersion);
EXPECT_EQ(data.mutable_graphics_info()->gl_shading_version(),
kGraphicsShadingVer);
EXPECT_EQ(data.mutable_graphics_info()->gl_vendor(), kGraphicsVendor);
EXPECT_EQ(data.mutable_graphics_info()->gl_renderer(), kGraphicsRenderer);
EXPECT_EQ(data.mutable_graphics_info()->gl_extensions(0), kGraphicsExtension);
}
TEST_F(FlexHwisMojoTest, MojoInput) {
hwis_proto::Device data;
telemetry_.AddInputInfo();
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetInputInfo(&data);
EXPECT_EQ(data.mutable_touchpad()->stack(), kTouchpadLibraryName);
}
TEST_F(FlexHwisMojoTest, MojoTpm) {
hwis_proto::Device data;
telemetry_.AddTpmInfo();
flex_hwis_mojo_->SetTelemetryInfoForTesting(telemetry_.Get());
flex_hwis_mojo_->SetTpmInfo(&data);
EXPECT_EQ(data.mutable_tpm()->tpm_version(), kTpmFamilyStr);
EXPECT_EQ(data.mutable_tpm()->spec_level(), kTpmSpecLevel);
EXPECT_EQ(data.mutable_tpm()->manufacturer(), kTpmManufacturer);
EXPECT_EQ(data.mutable_tpm()->did_vid(), kTpmDidVid);
EXPECT_EQ(data.mutable_tpm()->tpm_allow_listed(), kTpmIsAllowed);
EXPECT_EQ(data.mutable_tpm()->tpm_owned(), kTpmOwned);
}
} // namespace flex_hwis