blob: ca9dd669266cfb7f68fe5d40bb13c8add7fda163 [file] [log] [blame]
Tom Joseph53279882021-04-28 06:29:13 -07001#include "common/test/mocked_utils.hpp"
Sampa Misraaea5dde2020-08-31 08:33:47 -05002#include "common/utils.hpp"
3#include "libpldmresponder/event_parser.hpp"
4#include "libpldmresponder/pdr.hpp"
5#include "libpldmresponder/pdr_utils.hpp"
6#include "libpldmresponder/platform.hpp"
7#include "oem/ibm/libpldmresponder/inband_code_update.hpp"
8#include "oem/ibm/libpldmresponder/oem_ibm_handler.hpp"
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +09309#include "test/test_instance_id.hpp"
Sampa Misraaea5dde2020-08-31 08:33:47 -050010
George Liuc453e162022-12-21 17:16:23 +080011#include <libpldm/entity.h>
Brad Bishop27403f42021-12-01 21:37:44 -050012#include <libpldm/entity_oem_ibm.h>
13
Sampa Misra3a0e3b92020-10-21 05:58:00 -050014#include <sdeventplus/event.hpp>
15
Sampa Misraaea5dde2020-08-31 08:33:47 -050016#include <iostream>
17
Brad Bishop5079ac42021-08-19 18:35:06 -040018using namespace pldm::dbus_api;
Sampa Misraaea5dde2020-08-31 08:33:47 -050019using namespace pldm::utils;
20using namespace pldm::responder;
21using namespace pldm::responder::pdr;
22using namespace pldm::responder::pdr_utils;
23using namespace pldm::responder::oem_ibm_platform;
24
25class MockCodeUpdate : public CodeUpdate
26{
27 public:
28 MockCodeUpdate(const pldm::utils::DBusHandler* dBusIntf) :
29 CodeUpdate(dBusIntf)
30 {}
31
32 MOCK_METHOD(void, setVersions, (), (override));
33};
34
Sagar Srinivas360c53f2020-10-15 07:26:31 -050035class MockOemPlatformHandler : public oem_ibm_platform::Handler
36{
37 public:
38 MockOemPlatformHandler(const pldm::utils::DBusHandler* dBusIntf,
39 pldm::responder::CodeUpdate* codeUpdate, int mctp_fd,
40 uint8_t mctp_eid, Requester& requester,
41 sdeventplus::Event& event) :
42 oem_ibm_platform::Handler(dBusIntf, codeUpdate, mctp_fd, mctp_eid,
Sampa Misrac0c79482021-06-02 08:01:54 -050043 requester, event, nullptr)
Sagar Srinivas360c53f2020-10-15 07:26:31 -050044 {}
45 MOCK_METHOD(uint16_t, getNextEffecterId, ());
46 MOCK_METHOD(uint16_t, getNextSensorId, ());
47};
48
49TEST(OemSetStateEffecterStatesHandler, testGoodRequest)
Sampa Misraaea5dde2020-08-31 08:33:47 -050050{
Sagar Srinivas78a225a2020-08-27 00:52:20 -050051 uint16_t entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
Sampa Misraaea5dde2020-08-31 08:33:47 -050052 uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
53 uint16_t entityInstance_ = 0;
54 uint8_t compSensorCnt_ = 1;
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -050055 uint16_t effecterId = 0xA;
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +093056 TestInstanceIdDb instanceIdDb;
57
Patrick Williams84b790c2022-07-22 19:26:56 -050058 sdbusplus::bus_t bus(sdbusplus::bus::new_default());
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +093059 Requester requester(bus, "/abc/def", instanceIdDb);
Sampa Misra3a0e3b92020-10-21 05:58:00 -050060 auto event = sdeventplus::Event::get_default();
Sampa Misraaea5dde2020-08-31 08:33:47 -050061 std::vector<get_sensor_state_field> stateField;
62
63 auto mockDbusHandler = std::make_unique<MockdBusHandler>();
64 std::unique_ptr<CodeUpdate> mockCodeUpdate =
65 std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
66 std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
67
68 oemPlatformHandler = std::make_unique<oem_ibm_platform::Handler>(
Sampa Misrac0c79482021-06-02 08:01:54 -050069 mockDbusHandler.get(), mockCodeUpdate.get(), 0x1, 0x9, requester, event,
70 nullptr);
Sampa Misraaea5dde2020-08-31 08:33:47 -050071
72 auto rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
73 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField);
74
75 ASSERT_EQ(rc, PLDM_SUCCESS);
76 ASSERT_EQ(stateField.size(), 1);
77 ASSERT_EQ(stateField[0].event_state, tSideNum);
78 ASSERT_EQ(stateField[0].sensor_op_state, PLDM_SENSOR_ENABLED);
79 ASSERT_EQ(stateField[0].present_state, PLDM_SENSOR_UNKNOWN);
80 ASSERT_EQ(stateField[0].previous_state, PLDM_SENSOR_UNKNOWN);
81
82 entityInstance_ = 1;
83
84 std::vector<get_sensor_state_field> stateField1;
85 rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
86 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
87 ASSERT_EQ(stateField1.size(), 1);
88 ASSERT_EQ(stateField1[0].event_state, tSideNum);
89
90 entityInstance_ = 2;
91 rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
92 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
93 ASSERT_EQ(stateField1[0].event_state, PLDM_SENSOR_UNKNOWN);
94
95 entityID_ = 40;
96 stateSetId_ = 50;
97 rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
98 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
99 ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
100
Sagar Srinivas78a225a2020-08-27 00:52:20 -0500101 entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
Sampa Misraaea5dde2020-08-31 08:33:47 -0500102 entityInstance_ = 0;
103 stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
104 compSensorCnt_ = 1;
105
106 std::vector<set_effecter_state_field> setEffecterStateField;
107 setEffecterStateField.push_back({PLDM_REQUEST_SET, pSideNum});
108
Sampa Misra3a0e3b92020-10-21 05:58:00 -0500109 rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
Sampa Misraaea5dde2020-08-31 08:33:47 -0500110 entityID_, entityInstance_, stateSetId_, compSensorCnt_,
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -0500111 setEffecterStateField, effecterId);
Sampa Misraaea5dde2020-08-31 08:33:47 -0500112 ASSERT_EQ(rc, PLDM_SUCCESS);
113
114 entityInstance_ = 2;
Sampa Misra3a0e3b92020-10-21 05:58:00 -0500115 rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
Sampa Misraaea5dde2020-08-31 08:33:47 -0500116 entityID_, entityInstance_, stateSetId_, compSensorCnt_,
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -0500117 setEffecterStateField, effecterId);
Sampa Misraaea5dde2020-08-31 08:33:47 -0500118
119 ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
120
121 entityID_ = 34;
122 stateSetId_ = 99;
123 entityInstance_ = 0;
Sampa Misra3a0e3b92020-10-21 05:58:00 -0500124 rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
Sampa Misraaea5dde2020-08-31 08:33:47 -0500125 entityID_, entityInstance_, stateSetId_, compSensorCnt_,
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -0500126 setEffecterStateField, effecterId);
Sampa Misraaea5dde2020-08-31 08:33:47 -0500127 ASSERT_EQ(rc, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE);
128}
Varsha Kaverappabb585b22020-09-10 06:15:42 -0500129
130TEST(EncodeCodeUpdateEvent, testGoodRequest)
131{
132 size_t sensorEventSize = PLDM_SENSOR_EVENT_DATA_MIN_LENGTH + 1;
133 std::vector<uint8_t> sensorEventDataVec{};
134 sensorEventDataVec.resize(sensorEventSize);
135
136 auto eventData = reinterpret_cast<struct pldm_sensor_event_data*>(
137 sensorEventDataVec.data());
138 eventData->sensor_id = 0xA;
139 eventData->sensor_event_class_type = PLDM_SENSOR_OP_STATE;
140
141 auto opStateSensorEventData =
142 reinterpret_cast<struct pldm_sensor_event_sensor_op_state*>(
143 sensorEventDataVec.data());
144 opStateSensorEventData->present_op_state = uint8_t(CodeUpdateState::START);
145 opStateSensorEventData->previous_op_state = uint8_t(CodeUpdateState::END);
146
147 std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr) +
148 PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
149 sensorEventDataVec.size());
150
Patrick Williams6da4f912023-05-10 07:50:53 -0500151 auto rc = encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg,
152 0x1);
Varsha Kaverappabb585b22020-09-10 06:15:42 -0500153
154 EXPECT_EQ(rc, PLDM_SUCCESS);
155}
156
157TEST(EncodeCodeUpdate, testBadRequest)
158{
159 std::vector<uint8_t> requestMsg;
160 std::vector<uint8_t> sensorEventDataVec{};
161
Patrick Williams6da4f912023-05-10 07:50:53 -0500162 auto rc = encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg,
163 0x1);
Varsha Kaverappabb585b22020-09-10 06:15:42 -0500164
165 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
166}
Varsha Kaverappa3ca29df2020-09-27 12:39:22 -0500167
168TEST(clearDirPath, testClearDirPath)
169{
170 char dirPath[] = "/tmp/testClearDir/";
171 fs::path dir(dirPath);
172 fs::create_directories(dir);
173 struct stat buffer;
174 ASSERT_EQ(stat(dirPath, &buffer), 0);
175 char filePath[] = "/tmp/testClearDir/file.txt";
176 std::ofstream file(filePath);
177 ASSERT_EQ(stat(filePath, &buffer), 0);
178
179 auto mockDbusHandler = std::make_unique<MockdBusHandler>();
180 std::unique_ptr<CodeUpdate> mockCodeUpdate =
181 std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
182
183 mockCodeUpdate->clearDirPath(dirPath);
184 ASSERT_EQ(stat(filePath, &buffer), -1);
185 ASSERT_EQ(stat(dirPath, &buffer), 0);
186}
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500187
188TEST(generateStateEffecterOEMPDR, testGoodRequest)
189{
190 auto inPDRRepo = pldm_pdr_init();
Patrick Williams84b790c2022-07-22 19:26:56 -0500191 sdbusplus::bus_t bus(sdbusplus::bus::new_default());
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +0930192 std::filesystem::path dbPath;
193 TestInstanceIdDb instanceIdDb;
194 Requester requester(bus, "/abc/def", instanceIdDb);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500195 auto mockDbusHandler = std::make_unique<MockdBusHandler>();
196 auto event = sdeventplus::Event::get_default();
197 std::unique_ptr<CodeUpdate> mockCodeUpdate =
198 std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500199 std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler =
200 std::make_unique<MockOemPlatformHandler>(mockDbusHandler.get(),
201 mockCodeUpdate.get(), 0x1, 0x9,
202 requester, event);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500203 Repo inRepo(inPDRRepo);
204
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530205 mockoemPlatformHandler->buildOEMPDR(inRepo);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500206 ASSERT_EQ(inRepo.empty(), false);
207
208 pdr_utils::PdrEntry e;
209
210 // Test for effecter number 1, for current boot side state
211 auto record1 = pdr::getRecordByHandle(inRepo, 1, e);
212 ASSERT_NE(record1, nullptr);
213
214 pldm_state_effecter_pdr* pdr =
215 reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
216
217 ASSERT_EQ(pdr->hdr.record_handle, 1);
218 ASSERT_EQ(pdr->hdr.version, 1);
219 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
220 ASSERT_EQ(pdr->hdr.record_change_num, 0);
221 ASSERT_EQ(pdr->hdr.length, 16);
Manojkiran Edacc5f1582021-09-29 17:03:06 +0530222 ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500223 ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
224 ASSERT_EQ(pdr->entity_instance, 0);
Patel-Kamalkumar68f5bbd2022-10-07 07:29:20 +0000225 ASSERT_EQ(pdr->container_id, 1);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500226 ASSERT_EQ(pdr->effecter_semantic_id, 0);
227 ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
228 ASSERT_EQ(pdr->has_description_pdr, false);
229 ASSERT_EQ(pdr->composite_effecter_count, 1);
230 state_effecter_possible_states* states =
231 reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
232 ASSERT_EQ(states->state_set_id, 32769);
233 ASSERT_EQ(states->possible_states_size, 2);
234 bitfield8_t bf1{};
235 bf1.byte = 6;
236 ASSERT_EQ(states->states[0].byte, bf1.byte);
237
238 // Test for effecter number 2, for next boot side state
239 auto record2 = pdr::getRecordByHandle(inRepo, 2, e);
240 ASSERT_NE(record2, nullptr);
241
242 pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
243
244 ASSERT_EQ(pdr->hdr.record_handle, 2);
245 ASSERT_EQ(pdr->hdr.version, 1);
246 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
247 ASSERT_EQ(pdr->hdr.record_change_num, 0);
248 ASSERT_EQ(pdr->hdr.length, 16);
Manojkiran Edacc5f1582021-09-29 17:03:06 +0530249 ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500250 ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
251 ASSERT_EQ(pdr->entity_instance, 1);
Patel-Kamalkumar68f5bbd2022-10-07 07:29:20 +0000252 ASSERT_EQ(pdr->container_id, 1);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500253 ASSERT_EQ(pdr->effecter_semantic_id, 0);
254 ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
255 ASSERT_EQ(pdr->has_description_pdr, false);
256 ASSERT_EQ(pdr->composite_effecter_count, 1);
257 states =
258 reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
259 ASSERT_EQ(states->state_set_id, 32769);
260 ASSERT_EQ(states->possible_states_size, 2);
261 bitfield8_t bf2{};
262 bf2.byte = 6;
263 ASSERT_EQ(states->states[0].byte, bf2.byte);
264
265 // Test for effecter number 3, for firmware update state control
266 auto record3 = pdr::getRecordByHandle(inRepo, 3, e);
267 ASSERT_NE(record3, nullptr);
268
269 pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
270
271 ASSERT_EQ(pdr->hdr.record_handle, 3);
272 ASSERT_EQ(pdr->hdr.version, 1);
273 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
274 ASSERT_EQ(pdr->hdr.record_change_num, 0);
275 ASSERT_EQ(pdr->hdr.length, 16);
Manojkiran Edacc5f1582021-09-29 17:03:06 +0530276 ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500277 ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
278 ASSERT_EQ(pdr->entity_instance, 0);
Patel-Kamalkumar68f5bbd2022-10-07 07:29:20 +0000279 ASSERT_EQ(pdr->container_id, 1);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500280 ASSERT_EQ(pdr->effecter_semantic_id, 0);
281 ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
282 ASSERT_EQ(pdr->has_description_pdr, false);
283 ASSERT_EQ(pdr->composite_effecter_count, 1);
284 states =
285 reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
286 ASSERT_EQ(states->state_set_id, 32768);
287 ASSERT_EQ(states->possible_states_size, 2);
288 bitfield8_t bf3{};
289 bf3.byte = 126;
290 ASSERT_EQ(states->states[0].byte, bf3.byte);
291
292 pldm_pdr_destroy(inPDRRepo);
293}
294
295TEST(generateStateSensorOEMPDR, testGoodRequest)
296{
297 auto inPDRRepo = pldm_pdr_init();
Patrick Williams84b790c2022-07-22 19:26:56 -0500298 sdbusplus::bus_t bus(sdbusplus::bus::new_default());
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +0930299 std::filesystem::path dbPath;
300 TestInstanceIdDb instanceIdDb;
301 Requester requester(bus, "/abc/def", instanceIdDb);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500302
303 auto mockDbusHandler = std::make_unique<MockdBusHandler>();
304 auto event = sdeventplus::Event::get_default();
305 std::unique_ptr<CodeUpdate> mockCodeUpdate =
306 std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500307 std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler =
308 std::make_unique<MockOemPlatformHandler>(mockDbusHandler.get(),
309 mockCodeUpdate.get(), 0x1, 0x9,
310 requester, event);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500311 Repo inRepo(inPDRRepo);
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530312 mockoemPlatformHandler->buildOEMPDR(inRepo);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500313 ASSERT_EQ(inRepo.empty(), false);
314
315 pdr_utils::PdrEntry e;
316
317 // Test for sensor number 1, for current boot side state
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530318 auto record1 = pdr::getRecordByHandle(inRepo, 5, e);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500319 ASSERT_NE(record1, nullptr);
320
321 pldm_state_sensor_pdr* pdr =
322 reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
323
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530324 ASSERT_EQ(pdr->hdr.record_handle, 5);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500325 ASSERT_EQ(pdr->hdr.version, 1);
326 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
327 ASSERT_EQ(pdr->hdr.record_change_num, 0);
328 ASSERT_EQ(pdr->hdr.length, 14);
Manojkiran Edacc5f1582021-09-29 17:03:06 +0530329 ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500330 ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
331 ASSERT_EQ(pdr->entity_instance, 0);
Patel-Kamalkumar68f5bbd2022-10-07 07:29:20 +0000332 ASSERT_EQ(pdr->container_id, 1);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500333 ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
334 ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
335 ASSERT_EQ(pdr->composite_sensor_count, 1);
336 state_sensor_possible_states* states =
337 reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
338 ASSERT_EQ(states->state_set_id, 32769);
339 ASSERT_EQ(states->possible_states_size, 2);
340 bitfield8_t bf1{};
341 bf1.byte = 6;
342 ASSERT_EQ(states->states[0].byte, bf1.byte);
343
344 // Test for sensor number 2, for next boot side state
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530345 auto record2 = pdr::getRecordByHandle(inRepo, 6, e);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500346 ASSERT_NE(record2, nullptr);
347
348 pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
349
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530350 ASSERT_EQ(pdr->hdr.record_handle, 6);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500351 ASSERT_EQ(pdr->hdr.version, 1);
352 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
353 ASSERT_EQ(pdr->hdr.record_change_num, 0);
354 ASSERT_EQ(pdr->hdr.length, 14);
Manojkiran Edacc5f1582021-09-29 17:03:06 +0530355 ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500356 ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
357 ASSERT_EQ(pdr->entity_instance, 1);
Patel-Kamalkumar68f5bbd2022-10-07 07:29:20 +0000358 ASSERT_EQ(pdr->container_id, 1);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500359 ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
360 ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
361 ASSERT_EQ(pdr->composite_sensor_count, 1);
362 states =
363 reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
364 ASSERT_EQ(states->state_set_id, 32769);
365 ASSERT_EQ(states->possible_states_size, 2);
366 bitfield8_t bf2{};
367 bf2.byte = 6;
368 ASSERT_EQ(states->states[0].byte, bf2.byte);
369
370 // Test for sensor number 3, for firmware update state control
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530371 auto record3 = pdr::getRecordByHandle(inRepo, 7, e);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500372 ASSERT_NE(record3, nullptr);
373
374 pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
375
Manojkiran Eda6b1d8832021-03-27 11:25:06 +0530376 ASSERT_EQ(pdr->hdr.record_handle, 7);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500377 ASSERT_EQ(pdr->hdr.version, 1);
378 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
379 ASSERT_EQ(pdr->hdr.record_change_num, 0);
380 ASSERT_EQ(pdr->hdr.length, 14);
Manojkiran Edacc5f1582021-09-29 17:03:06 +0530381 ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500382 ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
383 ASSERT_EQ(pdr->entity_instance, 0);
Patel-Kamalkumar68f5bbd2022-10-07 07:29:20 +0000384 ASSERT_EQ(pdr->container_id, 1);
Sagar Srinivas360c53f2020-10-15 07:26:31 -0500385 ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
386 ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
387 ASSERT_EQ(pdr->composite_sensor_count, 1);
388 states =
389 reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
390 ASSERT_EQ(states->state_set_id, 32768);
391 ASSERT_EQ(states->possible_states_size, 2);
392 bitfield8_t bf3{};
393 bf3.byte = 126;
394 ASSERT_EQ(states->states[0].byte, bf3.byte);
395
396 pldm_pdr_destroy(inPDRRepo);
397}