blob: f8e0a0541c46a27d23691fc1d650020c6b6bfc80 [file] [log] [blame]
Tom Joseph53279882021-04-28 06:29:13 -07001#include "common/test/mocked_utils.hpp"
George Liu4371f2b2020-05-09 19:55:18 +08002#include "libpldmresponder/pdr_utils.hpp"
3#include "libpldmresponder/platform.hpp"
George Liu4371f2b2020-05-09 19:55:18 +08004
George Liuc453e162022-12-21 17:16:23 +08005#include <libpldm/platform.h>
6
George Liu4371f2b2020-05-09 19:55:18 +08007#include <sdbusplus/test/sdbus_mock.hpp>
Sampa Misra5fb37d52021-03-06 07:26:00 -06008#include <sdeventplus/event.hpp>
George Liu4371f2b2020-05-09 19:55:18 +08009
10#include <gtest/gtest.h>
11
12using namespace pldm::responder;
13using namespace pldm::responder::platform;
14using namespace pldm::responder::pdr;
15using namespace pldm::responder::pdr_utils;
16
17using ::testing::_;
18using ::testing::Return;
19using ::testing::StrEq;
20
21TEST(GeneratePDRByStateSensor, testGoodJson)
22{
23 std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
24 requestPayload{};
Pavithra Barithaya5ea72372025-02-04 18:09:57 +053025 auto req = new (requestPayload.data()) pldm_msg;
George Liu4371f2b2020-05-09 19:55:18 +080026 size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
27
28 MockdBusHandler mockedUtils;
29 EXPECT_CALL(mockedUtils, getService(StrEq("/foo/bar"), _))
30 .Times(1)
31 .WillRepeatedly(Return("foo.bar"));
32
33 auto inPDRRepo = pldm_pdr_init();
34 auto outPDRRepo = pldm_pdr_init();
35 Repo outRepo(outPDRRepo);
Sampa Misra5fb37d52021-03-06 07:26:00 -060036 auto event = sdeventplus::Event::get_default();
Sagar Srinivas90314a32023-10-17 10:38:03 -050037 Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
38 inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
George Liua881c172021-06-21 18:28:11 +080039 event);
George Liu4371f2b2020-05-09 19:55:18 +080040 handler.getPDR(req, requestPayloadLength);
41 Repo inRepo(inPDRRepo);
42 getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
43
44 // 1 entries
45 ASSERT_EQ(outRepo.getRecordCount(), 1);
46
47 // Check first PDR
48 pdr_utils::PdrEntry e;
49 auto record = pdr::getRecordByHandle(outRepo, 2, e);
50 ASSERT_NE(record, nullptr);
51
Pavithra Barithaya5ea72372025-02-04 18:09:57 +053052 pldm_state_sensor_pdr* pdr = new (e.data) pldm_state_sensor_pdr;
George Liu4371f2b2020-05-09 19:55:18 +080053 EXPECT_EQ(pdr->hdr.record_handle, 2);
54 EXPECT_EQ(pdr->hdr.version, 1);
55 EXPECT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
56 EXPECT_EQ(pdr->hdr.record_change_num, 0);
57 EXPECT_EQ(pdr->hdr.length, 17);
58
59 EXPECT_EQ(pdr->sensor_id, 1);
60
61 const auto& [dbusMappings, dbusValMaps] =
62 handler.getDbusObjMaps(pdr->sensor_id, TypeId::PLDM_SENSOR_ID);
63 ASSERT_EQ(dbusMappings[0].objectPath, "/foo/bar");
64 ASSERT_EQ(dbusMappings[0].interface, "xyz.openbmc_project.Foo.Bar");
65 ASSERT_EQ(dbusMappings[0].propertyName, "propertyName");
66 ASSERT_EQ(dbusMappings[0].propertyType, "string");
67
68 pldm_pdr_destroy(inPDRRepo);
69 pldm_pdr_destroy(outPDRRepo);
70}
71
72TEST(GeneratePDR, testMalformedJson)
73{
74 std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
75 requestPayload{};
Pavithra Barithaya5ea72372025-02-04 18:09:57 +053076 auto req = new (requestPayload.data()) pldm_msg;
George Liu4371f2b2020-05-09 19:55:18 +080077 size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
78
79 MockdBusHandler mockedUtils;
80 EXPECT_CALL(mockedUtils, getService(StrEq("/foo/bar"), _))
81 .Times(1)
82 .WillRepeatedly(Return("foo.bar"));
83
84 auto inPDRRepo = pldm_pdr_init();
85 auto outPDRRepo = pldm_pdr_init();
86 Repo outRepo(outPDRRepo);
Sampa Misra5fb37d52021-03-06 07:26:00 -060087 auto event = sdeventplus::Event::get_default();
Sagar Srinivas90314a32023-10-17 10:38:03 -050088 Handler handler(&mockedUtils, 0, nullptr, "./pdr_jsons/state_sensor/good",
89 inPDRRepo, nullptr, nullptr, nullptr, nullptr, nullptr,
George Liua881c172021-06-21 18:28:11 +080090 event);
George Liu4371f2b2020-05-09 19:55:18 +080091 handler.getPDR(req, requestPayloadLength);
92 Repo inRepo(inPDRRepo);
93 getRepoByType(inRepo, outRepo, PLDM_STATE_SENSOR_PDR);
94
95 ASSERT_EQ(outRepo.getRecordCount(), 1);
96 ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/state_sensor/malformed"),
97 std::exception);
98
99 pldm_pdr_destroy(inPDRRepo);
100 pldm_pdr_destroy(outPDRRepo);
101}