| // Copyright 2021 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "rmad/utils/component_utils.h" |
| |
| #include <memory> |
| |
| #include <google/protobuf/text_format.h> |
| #include <gtest/gtest.h> |
| #include <hardware_verifier/hardware_verifier.pb.h> |
| #include <runtime_probe/proto_bindings/runtime_probe.pb.h> |
| |
| namespace rmad { |
| |
| class ComponentUtilsTest : public testing::Test { |
| public: |
| ComponentUtilsTest() = default; |
| ~ComponentUtilsTest() override = default; |
| }; |
| |
| TEST_F(ComponentUtilsTest, Battery) { |
| constexpr char prototext[] = R"( |
| manufacturer: "ABC" |
| model_name: "abc" |
| )"; |
| |
| runtime_probe::Battery_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "battery_ABC_abc"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Battery) { |
| constexpr char prototext[] = R"( |
| battery: { |
| manufacturer: "ABC" |
| model_name: "abc" |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "battery_ABC_abc"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Storage_MMC) { |
| constexpr char prototext[] = R"( |
| type: "MMC_ASSEMBLY" |
| mmc_manfid: 10 |
| mmc_name: "abc" |
| )"; |
| |
| runtime_probe::Storage_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(eMMC)_0a_abc"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Storage_MMC) { |
| constexpr char prototext[] = R"( |
| storage: { |
| type: "MMC_ASSEMBLY" |
| mmc_manfid: 10 |
| mmc_name: "abc" |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(eMMC)_0a_abc"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Storage_NVMe) { |
| constexpr char prototext[] = R"( |
| type: "NVMe" |
| pci_vendor: 10 |
| pci_device: 11 |
| )"; |
| |
| runtime_probe::Storage_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(NVMe)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Storage_NVMe) { |
| constexpr char prototext[] = R"( |
| storage: { |
| type: "NVMe" |
| pci_vendor: 10 |
| pci_device: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(NVMe)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Storage_ATA) { |
| constexpr char prototext[] = R"( |
| type: "ATA" |
| ata_vendor: "ABC" |
| ata_model: "abc" |
| )"; |
| |
| runtime_probe::Storage_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(SATA)_ABC_abc"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Storage_ATA) { |
| constexpr char prototext[] = R"( |
| storage: { |
| type: "ATA" |
| ata_vendor: "ABC" |
| ata_model: "abc" |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(SATA)_ABC_abc"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Storage_Unknown) { |
| constexpr char prototext[] = R"( |
| type: "abc" |
| )"; |
| |
| runtime_probe::Storage_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(unknown)"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Storage_Unknown) { |
| constexpr char prototext[] = R"( |
| storage: { |
| type: "abc" |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "storage(unknown)"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Camera) { |
| constexpr char prototext[] = R"( |
| usb_vendor_id: 10 |
| usb_product_id: 11 |
| )"; |
| |
| runtime_probe::Camera_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "camera_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Camera) { |
| constexpr char prototext[] = R"( |
| camera: { |
| usb_vendor_id: 10 |
| usb_product_id: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "camera_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, InputDevice_Stylus) { |
| constexpr char prototext[] = R"( |
| device_type: TYPE_STYLUS |
| vendor: 10 |
| product: 11 |
| )"; |
| |
| runtime_probe::InputDevice_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "stylus_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_InputDevice_Stylus) { |
| constexpr char prototext[] = R"( |
| stylus: { |
| device_type: TYPE_STYLUS |
| vendor: 10 |
| product: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "stylus_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, InputDevice_Touchpad) { |
| constexpr char prototext[] = R"( |
| device_type: TYPE_TOUCHPAD |
| vendor: 10 |
| product: 11 |
| )"; |
| |
| runtime_probe::InputDevice_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "touchpad_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_InputDevice_Touchpad) { |
| constexpr char prototext[] = R"( |
| touchpad: { |
| device_type: TYPE_TOUCHPAD |
| vendor: 10 |
| product: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "touchpad_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, InputDevice_Touchscreen) { |
| constexpr char prototext[] = R"( |
| device_type: TYPE_TOUCHSCREEN |
| vendor: 10 |
| product: 11 |
| )"; |
| |
| runtime_probe::InputDevice_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "touchscreen_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_InputDevice_Touchscreen) { |
| constexpr char prototext[] = R"( |
| touchscreen: { |
| device_type: TYPE_TOUCHSCREEN |
| vendor: 10 |
| product: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "touchscreen_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, InputDevice_Unknown) { |
| constexpr char prototext[] = R"( |
| device_type: TYPE_UNKNOWN |
| )"; |
| |
| runtime_probe::InputDevice_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "input_device(unknown)"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_InputDevice_Unknown) { |
| constexpr char prototext[] = R"( |
| stylus: { |
| device_type: TYPE_UNKNOWN |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "input_device(unknown)"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Memory) { |
| constexpr char prototext[] = R"( |
| part: "ABC" |
| )"; |
| |
| runtime_probe::Memory_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "dram_ABC"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Memory) { |
| constexpr char prototext[] = R"( |
| dram: { |
| part: "ABC" |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "dram_ABC"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Display) { |
| constexpr char prototext[] = R"( |
| vendor: "ABC" |
| product_id: 10 |
| )"; |
| |
| runtime_probe::Edid_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "display_ABC_000a"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Display) { |
| constexpr char prototext[] = R"( |
| display_panel: { |
| vendor: "ABC" |
| product_id: 10 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "display_ABC_000a"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Network_Pci) { |
| constexpr char prototext[] = R"( |
| bus_type: "pci" |
| type: "cellular" |
| pci_vendor_id: 10 |
| pci_device_id: 11 |
| )"; |
| |
| runtime_probe::Network_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), |
| "network(cellular:pci)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Network_Pci) { |
| constexpr char prototext[] = R"( |
| cellular: { |
| bus_type: "pci" |
| type: "cellular" |
| pci_vendor_id: 10 |
| pci_device_id: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), |
| "network(cellular:pci)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Network_Usb) { |
| constexpr char prototext[] = R"( |
| bus_type: "usb" |
| type: "ethernet" |
| usb_vendor_id: 10 |
| usb_product_id: 11 |
| )"; |
| |
| runtime_probe::Network_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), |
| "network(ethernet:usb)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Network_Usb) { |
| constexpr char prototext[] = R"( |
| ethernet: { |
| bus_type: "usb" |
| type: "ethernet" |
| usb_vendor_id: 10 |
| usb_product_id: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), |
| "network(ethernet:usb)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Network_Sdio) { |
| constexpr char prototext[] = R"( |
| bus_type: "sdio" |
| type: "wireless" |
| sdio_vendor_id: 10 |
| sdio_device_id: 11 |
| )"; |
| |
| runtime_probe::Network_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), |
| "network(wireless:sdio)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Network_Sdio) { |
| constexpr char prototext[] = R"( |
| wireless: { |
| bus_type: "sdio" |
| type: "wireless" |
| sdio_vendor_id: 10 |
| sdio_device_id: 11 |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), |
| "network(wireless:sdio)_000a_000b"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Network_Unknown) { |
| constexpr char prototext[] = R"( |
| bus_type: "abc" |
| type: "cellular" |
| )"; |
| |
| runtime_probe::Network_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "network(cellular:unknown)"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Network_Unknown) { |
| constexpr char prototext[] = R"( |
| cellular: { |
| bus_type: "abc" |
| type: "cellular" |
| } |
| )"; |
| |
| runtime_probe::ComponentFields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "network(cellular:unknown)"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ComponentFields_Unknown) { |
| runtime_probe::ComponentFields fields; |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "unknown_component"); |
| } |
| |
| TEST_F(ComponentUtilsTest, ApI2c) { |
| constexpr char prototext[] = R"( |
| data: 1 |
| )"; |
| |
| runtime_probe::ApI2c_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "api2c_0001"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Component_ApI2c) { |
| constexpr char prototext[] = R"( |
| values: { |
| data: 1 |
| } |
| )"; |
| |
| runtime_probe::ApI2c ap_i2c; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &ap_i2c)); |
| EXPECT_EQ(GetComponentIdentifier(ap_i2c), "api2c_0001"); |
| } |
| |
| TEST_F(ComponentUtilsTest, EcI2c) { |
| constexpr char prototext[] = R"( |
| data: 1 |
| )"; |
| |
| runtime_probe::EcI2c_Fields fields; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &fields)); |
| EXPECT_EQ(GetComponentFieldsIdentifier(fields), "eci2c_0001"); |
| } |
| |
| TEST_F(ComponentUtilsTest, Component_EcI2c) { |
| constexpr char prototext[] = R"( |
| values: { |
| data: 1 |
| } |
| )"; |
| |
| runtime_probe::EcI2c ec_i2c; |
| EXPECT_TRUE( |
| google::protobuf::TextFormat::ParseFromString(prototext, &ec_i2c)); |
| EXPECT_EQ(GetComponentIdentifier(ec_i2c), "eci2c_0001"); |
| } |
| |
| } // namespace rmad |