xref: /openbmc/pldm/fw-update/test/firmware_inventory_manager_test.cpp (revision 7ad45b401134e3b3a05a75200dbba00afd5aee46)
1*7ad45b40SUnive Tien #include "common/test/mocked_utils.hpp"
2*7ad45b40SUnive Tien #include "fw-update/firmware_inventory.hpp"
3*7ad45b40SUnive Tien #include "fw-update/firmware_inventory_manager.hpp"
4*7ad45b40SUnive Tien 
5*7ad45b40SUnive Tien #include <gmock/gmock.h>
6*7ad45b40SUnive Tien #include <gtest/gtest.h>
7*7ad45b40SUnive Tien 
8*7ad45b40SUnive Tien using namespace pldm;
9*7ad45b40SUnive Tien using namespace std::chrono;
10*7ad45b40SUnive Tien using namespace pldm::fw_update;
11*7ad45b40SUnive Tien 
12*7ad45b40SUnive Tien // Helper class for testing: inherits FirmwareInventory and exposes protected
13*7ad45b40SUnive Tien class FirmwareInventoryTest : public pldm::fw_update::FirmwareInventory
14*7ad45b40SUnive Tien {
15*7ad45b40SUnive Tien   public:
16*7ad45b40SUnive Tien     using FirmwareInventory::FirmwareInventory;
17*7ad45b40SUnive Tien 
getSoftwarePath() const18*7ad45b40SUnive Tien     const std::string& getSoftwarePath() const
19*7ad45b40SUnive Tien     {
20*7ad45b40SUnive Tien         return this->softwarePath;
21*7ad45b40SUnive Tien     }
getAssociation() const22*7ad45b40SUnive Tien     const SoftwareAssociationDefinitions& getAssociation() const
23*7ad45b40SUnive Tien     {
24*7ad45b40SUnive Tien         return this->association;
25*7ad45b40SUnive Tien     }
getVersion() const26*7ad45b40SUnive Tien     const SoftwareVersion& getVersion() const
27*7ad45b40SUnive Tien     {
28*7ad45b40SUnive Tien         return this->version;
29*7ad45b40SUnive Tien     }
30*7ad45b40SUnive Tien };
31*7ad45b40SUnive Tien 
32*7ad45b40SUnive Tien class FirmwareInventoryManagerTest : public FirmwareInventoryManager
33*7ad45b40SUnive Tien {
34*7ad45b40SUnive Tien   public:
FirmwareInventoryManagerTest(const pldm::utils::DBusHandler * handler,const Configurations & config)35*7ad45b40SUnive Tien     FirmwareInventoryManagerTest(const pldm::utils::DBusHandler* handler,
36*7ad45b40SUnive Tien                                  const Configurations& config) :
37*7ad45b40SUnive Tien         FirmwareInventoryManager(handler, config)
38*7ad45b40SUnive Tien     {}
39*7ad45b40SUnive Tien 
getSoftwareMap()40*7ad45b40SUnive Tien     SoftwareMap& getSoftwareMap()
41*7ad45b40SUnive Tien     {
42*7ad45b40SUnive Tien         return softwareMap;
43*7ad45b40SUnive Tien     }
44*7ad45b40SUnive Tien };
45*7ad45b40SUnive Tien 
TEST(GetBoardPath_WithMockHandler,ReturnsExpectedBoardPath)46*7ad45b40SUnive Tien TEST(GetBoardPath_WithMockHandler, ReturnsExpectedBoardPath)
47*7ad45b40SUnive Tien {
48*7ad45b40SUnive Tien     MockdBusHandler mockHandler;
49*7ad45b40SUnive Tien     InventoryPath inventoryPath =
50*7ad45b40SUnive Tien         "/xyz/openbmc_project/inventory/system/board/PLDM_Device";
51*7ad45b40SUnive Tien     pldm::utils::GetAncestorsResponse fakeResponse = {{inventoryPath, {}}};
52*7ad45b40SUnive Tien     EXPECT_CALL(mockHandler, getAncestors)
53*7ad45b40SUnive Tien         .WillOnce(::testing::Return(fakeResponse));
54*7ad45b40SUnive Tien 
55*7ad45b40SUnive Tien     Configurations configurations;
56*7ad45b40SUnive Tien     std::string boardInventoryPath =
57*7ad45b40SUnive Tien         "/xyz/openbmc_project/inventory/system/board/PLDM_Device";
58*7ad45b40SUnive Tien     pldm::eid endpointId = 1;
59*7ad45b40SUnive Tien     pldm::UUID endpointUuid = "uuid";
60*7ad45b40SUnive Tien     pldm::MctpMedium endpointMedium = "medium";
61*7ad45b40SUnive Tien     pldm::NetworkId endpointNetId = 0;
62*7ad45b40SUnive Tien     pldm::MctpInfoName endpointName = "BMC";
63*7ad45b40SUnive Tien     pldm::MctpInfo endpointInfo = std::make_tuple(
64*7ad45b40SUnive Tien         endpointId, endpointUuid, endpointMedium, endpointNetId, endpointName);
65*7ad45b40SUnive Tien     configurations[boardInventoryPath] = endpointInfo;
66*7ad45b40SUnive Tien 
67*7ad45b40SUnive Tien     FirmwareInventoryManagerTest inventoryManager(&mockHandler, configurations);
68*7ad45b40SUnive Tien 
69*7ad45b40SUnive Tien     SoftwareIdentifier softwareIdentifier{endpointId, 100};
70*7ad45b40SUnive Tien     SoftwareName softwareName{"TestDevice"};
71*7ad45b40SUnive Tien     std::string firmwareVersion{"1.0.0"};
72*7ad45b40SUnive Tien     Descriptors firmwareDescriptors;
73*7ad45b40SUnive Tien     ComponentInfo firmwareComponentInfo;
74*7ad45b40SUnive Tien 
75*7ad45b40SUnive Tien     inventoryManager.createFirmwareEntry(
76*7ad45b40SUnive Tien         softwareIdentifier, softwareName, firmwareVersion, firmwareDescriptors,
77*7ad45b40SUnive Tien         firmwareComponentInfo);
78*7ad45b40SUnive Tien     ASSERT_TRUE(inventoryManager.getSoftwareMap().contains(softwareIdentifier));
79*7ad45b40SUnive Tien 
80*7ad45b40SUnive Tien     auto inventoryIt =
81*7ad45b40SUnive Tien         inventoryManager.getSoftwareMap().find(softwareIdentifier);
82*7ad45b40SUnive Tien     ASSERT_NE(inventoryIt, inventoryManager.getSoftwareMap().end());
83*7ad45b40SUnive Tien     const auto* inventory =
84*7ad45b40SUnive Tien         static_cast<FirmwareInventoryTest*>(inventoryIt->second.get());
85*7ad45b40SUnive Tien     ASSERT_NE(inventory, nullptr);
86*7ad45b40SUnive Tien     EXPECT_NE(inventory->getSoftwarePath().find(
87*7ad45b40SUnive Tien                   "/xyz/openbmc_project/software/PLDM_Device_TestDevice_"),
88*7ad45b40SUnive Tien               std::string::npos);
89*7ad45b40SUnive Tien     EXPECT_EQ(inventory->getVersion().version(), firmwareVersion);
90*7ad45b40SUnive Tien }
91