1 #include "libpldmresponder/fru_parser.hpp"
2 
3 #include <gtest/gtest.h>
4 TEST(FruParser, allScenarios)
5 {
6     using namespace pldm::responder::fru_parser;
7 
8     FruParser parser{"./fru_jsons/good"};
9 
10     // Get an item with a single PLDM FRU record
11     FruRecordInfos cpu{
12         {1,
13          1,
14          {{"xyz.openbmc_project.Inventory.Decorator.Asset", "Model", "string",
15            2},
16           {"xyz.openbmc_project.Inventory.Decorator.Asset", "PartNumber",
17            "string", 3},
18           {"xyz.openbmc_project.Inventory.Decorator.Asset", "SerialNumber",
19            "string", 4},
20           {"xyz.openbmc_project.Inventory.Decorator.Asset", "Manufacturer",
21            "string", 5},
22           {"xyz.openbmc_project.Inventory.Item", "PrettyName", "string", 8},
23           {"xyz.openbmc_project.Inventory.Decorator.AssetTag", "AssetTag",
24            "string", 11},
25           {"xyz.openbmc_project.Inventory.Decorator.Revision", "Version",
26            "string", 10}}},
27         {1,
28          1,
29          {{"xyz.openbmc_project.Inventory.Decorator.Asset", "PartNumber",
30            "string", 3},
31           {"xyz.openbmc_project.Inventory.Decorator.Asset", "SerialNumber",
32            "string", 4}}}};
33     auto cpuInfos =
34         parser.getRecordInfo("xyz.openbmc_project.Inventory.Item.Cpu");
35     ASSERT_EQ(cpuInfos.size(), 2);
36     ASSERT_EQ(cpu == cpuInfos, true);
37 
38     // Get an item type with 3 PLDM FRU records
39     auto boardInfos =
40         parser.getRecordInfo("xyz.openbmc_project.Inventory.Item.Board");
41     ASSERT_EQ(boardInfos.size(), 3);
42 
43     // D-Bus lookup info for FRU information
44     DBusLookupInfo lookupInfo{
45         "xyz.openbmc_project.Inventory.Manager",
46         "/xyz/openbmc_project/inventory",
47         {"xyz.openbmc_project.Inventory.Item.Chassis",
48          "xyz.openbmc_project.Inventory.Item.Board",
49          "xyz.openbmc_project.Inventory.Item.PCIeDevice",
50          "xyz.openbmc_project.Inventory.Item.Board.Motherboard",
51          "xyz.openbmc_project.Inventory.Item.Dimm",
52          "xyz.openbmc_project.Inventory.Item.Panel",
53          "xyz.openbmc_project.Inventory.Item.DiskBackplane",
54          "xyz.openbmc_project.Inventory.Item.Fan",
55          "xyz.openbmc_project.Inventory.Item.PowerSupply",
56          "xyz.openbmc_project.Inventory.Item.Battery",
57          "xyz.openbmc_project.Inventory.Item.Vrm",
58          "xyz.openbmc_project.Inventory.Item.Cpu",
59          "xyz.openbmc_project.Inventory.Item.Bmc",
60          "xyz.openbmc_project.Inventory.Item.Connector",
61          "xyz.openbmc_project.Inventory.Item.PCIeSlot",
62          "xyz.openbmc_project.Inventory.Item.System",
63          "xyz.openbmc_project.Inventory.Item.Tpm"}};
64     auto dbusInfo = parser.inventoryLookup();
65     ASSERT_EQ(dbusInfo == lookupInfo, true);
66 
67     ASSERT_THROW(
68         parser.getRecordInfo("xyz.openbmc_project.Inventory.Item.DIMM"),
69         std::exception);
70 }
71