xref: /openbmc/pldm/libpldmresponder/test/libpldmresponder_pdr_sensor_test.cpp (revision 5ea723773b102e5820fb638b27175b23705c1a05)
15327988eSTom Joseph #include "common/test/mocked_utils.hpp"
25327988eSTom Joseph #include "libpldmresponder/pdr_utils.hpp"
35327988eSTom Joseph #include "libpldmresponder/platform.hpp"
45327988eSTom Joseph 
5c453e164SGeorge Liu #include <libpldm/platform.h>
6c453e164SGeorge Liu 
75327988eSTom Joseph #include <sdbusplus/test/sdbus_mock.hpp>
85327988eSTom Joseph #include <sdeventplus/event.hpp>
95327988eSTom Joseph 
105327988eSTom Joseph #include <gtest/gtest.h>
115327988eSTom Joseph 
125327988eSTom Joseph using namespace pldm::responder;
135327988eSTom Joseph using namespace pldm::responder::platform;
145327988eSTom Joseph using namespace pldm::responder::pdr;
155327988eSTom Joseph using namespace pldm::responder::pdr_utils;
165327988eSTom Joseph 
175327988eSTom Joseph using ::testing::_;
185327988eSTom Joseph using ::testing::Return;
195327988eSTom Joseph using ::testing::StrEq;
205327988eSTom Joseph 
TEST(GeneratePDRByStateSensor,testGoodJson)215327988eSTom Joseph TEST(GeneratePDRByStateSensor, testGoodJson)
225327988eSTom Joseph {
235327988eSTom Joseph     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
245327988eSTom Joseph         requestPayload{};
25*5ea72377SPavithra Barithaya     auto req = new (requestPayload.data()) pldm_msg;
265327988eSTom Joseph     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
275327988eSTom Joseph 
285327988eSTom Joseph     MockdBusHandler mockedUtils;
295327988eSTom Joseph     EXPECT_CALL(mockedUtils, getService(StrEq("/foo/bar"), _))
305327988eSTom Joseph         .Times(1)
315327988eSTom Joseph         .WillRepeatedly(Return("foo.bar"));
325327988eSTom Joseph 
335327988eSTom Joseph     auto inPDRRepo = pldm_pdr_init();
345327988eSTom Joseph     auto outPDRRepo = pldm_pdr_init();
355327988eSTom Joseph     Repo outRepo(outPDRRepo);
365327988eSTom Joseph     auto event = sdeventplus::Event::get_default();
3790314a3fSSagar Srinivas     Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
3890314a3fSSagar Srinivas                     inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
39a881c170SGeorge Liu                     event);
405327988eSTom Joseph     handler.getPDR(req, requestPayloadLength);
415327988eSTom Joseph     Repo inRepo(inPDRRepo);
425327988eSTom Joseph     getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
435327988eSTom Joseph 
445327988eSTom Joseph     // 1 entries
455327988eSTom Joseph     ASSERT_EQ(outRepo.getRecordCount(), 1);
465327988eSTom Joseph 
475327988eSTom Joseph     // Check first PDR
485327988eSTom Joseph     pdr_utils::PdrEntry e;
495327988eSTom Joseph     auto record = pdr::getRecordByHandle(outRepo, 2, e);
505327988eSTom Joseph     ASSERT_NE(record, nullptr);
515327988eSTom Joseph 
52*5ea72377SPavithra Barithaya     pldm_state_sensor_pdr* pdr = new (e.data) pldm_state_sensor_pdr;
535327988eSTom Joseph     EXPECT_EQ(pdr->hdr.record_handle, 2);
545327988eSTom Joseph     EXPECT_EQ(pdr->hdr.version, 1);
555327988eSTom Joseph     EXPECT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
565327988eSTom Joseph     EXPECT_EQ(pdr->hdr.record_change_num, 0);
575327988eSTom Joseph     EXPECT_EQ(pdr->hdr.length, 17);
585327988eSTom Joseph 
595327988eSTom Joseph     EXPECT_EQ(pdr->sensor_id, 1);
605327988eSTom Joseph 
615327988eSTom Joseph     const auto& [dbusMappings, dbusValMaps] =
625327988eSTom Joseph         handler.getDbusObjMaps(pdr->sensor_id, TypeId::PLDM_SENSOR_ID);
635327988eSTom Joseph     ASSERT_EQ(dbusMappings[0].objectPath, "/foo/bar");
645327988eSTom Joseph     ASSERT_EQ(dbusMappings[0].interface, "xyz.openbmc_project.Foo.Bar");
655327988eSTom Joseph     ASSERT_EQ(dbusMappings[0].propertyName, "propertyName");
665327988eSTom Joseph     ASSERT_EQ(dbusMappings[0].propertyType, "string");
675327988eSTom Joseph 
685327988eSTom Joseph     pldm_pdr_destroy(inPDRRepo);
695327988eSTom Joseph     pldm_pdr_destroy(outPDRRepo);
705327988eSTom Joseph }
715327988eSTom Joseph 
TEST(GeneratePDR,testMalformedJson)725327988eSTom Joseph TEST(GeneratePDR, testMalformedJson)
735327988eSTom Joseph {
745327988eSTom Joseph     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
755327988eSTom Joseph         requestPayload{};
76*5ea72377SPavithra Barithaya     auto req = new (requestPayload.data()) pldm_msg;
775327988eSTom Joseph     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
785327988eSTom Joseph 
795327988eSTom Joseph     MockdBusHandler mockedUtils;
805327988eSTom Joseph     EXPECT_CALL(mockedUtils, getService(StrEq("/foo/bar"), _))
815327988eSTom Joseph         .Times(1)
825327988eSTom Joseph         .WillRepeatedly(Return("foo.bar"));
835327988eSTom Joseph 
845327988eSTom Joseph     auto inPDRRepo = pldm_pdr_init();
855327988eSTom Joseph     auto outPDRRepo = pldm_pdr_init();
865327988eSTom Joseph     Repo outRepo(outPDRRepo);
875327988eSTom Joseph     auto event = sdeventplus::Event::get_default();
8890314a3fSSagar Srinivas     Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
8990314a3fSSagar Srinivas                     inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
90a881c170SGeorge Liu                     event);
915327988eSTom Joseph     handler.getPDR(req, requestPayloadLength);
925327988eSTom Joseph     Repo inRepo(inPDRRepo);
935327988eSTom Joseph     getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
945327988eSTom Joseph 
955327988eSTom Joseph     ASSERT_EQ(outRepo.getRecordCount(), 1);
965327988eSTom Joseph     ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/state_sensor/malformed"),
975327988eSTom Joseph                  std::exception);
985327988eSTom Joseph 
995327988eSTom Joseph     pldm_pdr_destroy(inPDRRepo);
1005327988eSTom Joseph     pldm_pdr_destroy(outPDRRepo);
1015327988eSTom Joseph }
102