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