15327988eSTom Joseph #include "common/test/mocked_utils.hpp"
2aea5dde1SSampa Misra #include "common/utils.hpp"
3aea5dde1SSampa Misra #include "libpldmresponder/event_parser.hpp"
4aea5dde1SSampa Misra #include "libpldmresponder/pdr.hpp"
5aea5dde1SSampa Misra #include "libpldmresponder/pdr_utils.hpp"
6aea5dde1SSampa Misra #include "libpldmresponder/platform.hpp"
7aea5dde1SSampa Misra #include "oem/ibm/libpldmresponder/inband_code_update.hpp"
8aea5dde1SSampa Misra #include "oem/ibm/libpldmresponder/oem_ibm_handler.hpp"
97c1dc7eaSAndrew Jeffery #include "test/test_instance_id.hpp"
10aea5dde1SSampa Misra 
11c453e164SGeorge Liu #include <libpldm/entity.h>
1221f128d8SAndrew Jeffery #include <libpldm/oem/ibm/entity.h>
1327403f46SBrad Bishop 
143a0e3b9bSSampa Misra #include <sdeventplus/event.hpp>
153a0e3b9bSSampa Misra 
16aea5dde1SSampa Misra using namespace pldm::utils;
17aea5dde1SSampa Misra using namespace pldm::responder;
18aea5dde1SSampa Misra using namespace pldm::responder::pdr;
19aea5dde1SSampa Misra using namespace pldm::responder::pdr_utils;
20aea5dde1SSampa Misra using namespace pldm::responder::oem_ibm_platform;
21aea5dde1SSampa Misra 
22aea5dde1SSampa Misra class MockCodeUpdate : public CodeUpdate
23aea5dde1SSampa Misra {
24aea5dde1SSampa Misra   public:
MockCodeUpdate(const pldm::utils::DBusHandler * dBusIntf)25aea5dde1SSampa Misra     MockCodeUpdate(const pldm::utils::DBusHandler* dBusIntf) :
26aea5dde1SSampa Misra         CodeUpdate(dBusIntf)
27aea5dde1SSampa Misra     {}
28aea5dde1SSampa Misra 
29aea5dde1SSampa Misra     MOCK_METHOD(void, setVersions, (), (override));
30aea5dde1SSampa Misra };
31aea5dde1SSampa Misra 
32360c53f5SSagar Srinivas class MockOemPlatformHandler : public oem_ibm_platform::Handler
33360c53f5SSagar Srinivas {
34360c53f5SSagar Srinivas   public:
MockOemPlatformHandler(const pldm::utils::DBusHandler * dBusIntf,pldm::responder::CodeUpdate * codeUpdate,int mctp_fd,uint8_t mctp_eid,pldm::InstanceIdDb & instanceIdDb,sdeventplus::Event & event)35360c53f5SSagar Srinivas     MockOemPlatformHandler(const pldm::utils::DBusHandler* dBusIntf,
36360c53f5SSagar Srinivas                            pldm::responder::CodeUpdate* codeUpdate, int mctp_fd,
37a330b2f0SAndrew Jeffery                            uint8_t mctp_eid, pldm::InstanceIdDb& instanceIdDb,
38360c53f5SSagar Srinivas                            sdeventplus::Event& event) :
39360c53f5SSagar Srinivas         oem_ibm_platform::Handler(dBusIntf, codeUpdate, mctp_fd, mctp_eid,
40a330b2f0SAndrew Jeffery                                   instanceIdDb, event, nullptr)
41360c53f5SSagar Srinivas     {}
42360c53f5SSagar Srinivas     MOCK_METHOD(uint16_t, getNextEffecterId, ());
43360c53f5SSagar Srinivas     MOCK_METHOD(uint16_t, getNextSensorId, ());
44360c53f5SSagar Srinivas };
45360c53f5SSagar Srinivas 
TEST(OemSetStateEffecterStatesHandler,testGoodRequest)46360c53f5SSagar Srinivas TEST(OemSetStateEffecterStatesHandler, testGoodRequest)
47aea5dde1SSampa Misra {
4878a225a2SSagar Srinivas     uint16_t entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
49aea5dde1SSampa Misra     uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
50aea5dde1SSampa Misra     uint16_t entityInstance_ = 0;
51aea5dde1SSampa Misra     uint8_t compSensorCnt_ = 1;
523fbd39ebSVarsha Kaverappa     uint16_t effecterId = 0xA;
537c1dc7eaSAndrew Jeffery     TestInstanceIdDb instanceIdDb;
547c1dc7eaSAndrew Jeffery 
5584b790cbSPatrick Williams     sdbusplus::bus_t bus(sdbusplus::bus::new_default());
563a0e3b9bSSampa Misra     auto event = sdeventplus::Event::get_default();
57aea5dde1SSampa Misra     std::vector<get_sensor_state_field> stateField;
58aea5dde1SSampa Misra 
59aea5dde1SSampa Misra     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
60aea5dde1SSampa Misra     std::unique_ptr<CodeUpdate> mockCodeUpdate =
61aea5dde1SSampa Misra         std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
62aea5dde1SSampa Misra     std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
63aea5dde1SSampa Misra 
64aea5dde1SSampa Misra     oemPlatformHandler = std::make_unique<oem_ibm_platform::Handler>(
65a330b2f0SAndrew Jeffery         mockDbusHandler.get(), mockCodeUpdate.get(), 0x1, 0x9, instanceIdDb,
66a330b2f0SAndrew Jeffery         event, nullptr);
67aea5dde1SSampa Misra 
68aea5dde1SSampa Misra     auto rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
69aea5dde1SSampa Misra         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField);
70aea5dde1SSampa Misra 
71aea5dde1SSampa Misra     ASSERT_EQ(rc, PLDM_SUCCESS);
72aea5dde1SSampa Misra     ASSERT_EQ(stateField.size(), 1);
73aea5dde1SSampa Misra     ASSERT_EQ(stateField[0].event_state, tSideNum);
74aea5dde1SSampa Misra     ASSERT_EQ(stateField[0].sensor_op_state, PLDM_SENSOR_ENABLED);
75aea5dde1SSampa Misra     ASSERT_EQ(stateField[0].present_state, PLDM_SENSOR_UNKNOWN);
76aea5dde1SSampa Misra     ASSERT_EQ(stateField[0].previous_state, PLDM_SENSOR_UNKNOWN);
77aea5dde1SSampa Misra 
78aea5dde1SSampa Misra     entityInstance_ = 1;
79aea5dde1SSampa Misra 
80aea5dde1SSampa Misra     std::vector<get_sensor_state_field> stateField1;
81aea5dde1SSampa Misra     rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
82aea5dde1SSampa Misra         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
835e3a2478SPavithra Barithaya     ASSERT_EQ(rc, PLDM_SUCCESS);
84aea5dde1SSampa Misra     ASSERT_EQ(stateField1.size(), 1);
85aea5dde1SSampa Misra     ASSERT_EQ(stateField1[0].event_state, tSideNum);
86aea5dde1SSampa Misra 
87aea5dde1SSampa Misra     entityInstance_ = 2;
88aea5dde1SSampa Misra     rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
89aea5dde1SSampa Misra         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
905e3a2478SPavithra Barithaya     ASSERT_EQ(rc, PLDM_SUCCESS);
91aea5dde1SSampa Misra     ASSERT_EQ(stateField1[0].event_state, PLDM_SENSOR_UNKNOWN);
92aea5dde1SSampa Misra 
93aea5dde1SSampa Misra     entityID_ = 40;
94aea5dde1SSampa Misra     stateSetId_ = 50;
95aea5dde1SSampa Misra     rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
96aea5dde1SSampa Misra         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
97aea5dde1SSampa Misra     ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
98aea5dde1SSampa Misra 
9978a225a2SSagar Srinivas     entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
100aea5dde1SSampa Misra     entityInstance_ = 0;
101aea5dde1SSampa Misra     stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
102aea5dde1SSampa Misra     compSensorCnt_ = 1;
103aea5dde1SSampa Misra 
104aea5dde1SSampa Misra     std::vector<set_effecter_state_field> setEffecterStateField;
105aea5dde1SSampa Misra     setEffecterStateField.push_back({PLDM_REQUEST_SET, pSideNum});
106aea5dde1SSampa Misra 
1073a0e3b9bSSampa Misra     rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
108aea5dde1SSampa Misra         entityID_, entityInstance_, stateSetId_, compSensorCnt_,
1093fbd39ebSVarsha Kaverappa         setEffecterStateField, effecterId);
110aea5dde1SSampa Misra     ASSERT_EQ(rc, PLDM_SUCCESS);
111aea5dde1SSampa Misra 
112aea5dde1SSampa Misra     entityInstance_ = 2;
1133a0e3b9bSSampa Misra     rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
114aea5dde1SSampa Misra         entityID_, entityInstance_, stateSetId_, compSensorCnt_,
1153fbd39ebSVarsha Kaverappa         setEffecterStateField, effecterId);
116aea5dde1SSampa Misra 
117aea5dde1SSampa Misra     ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
118aea5dde1SSampa Misra 
119aea5dde1SSampa Misra     entityID_ = 34;
120aea5dde1SSampa Misra     stateSetId_ = 99;
121aea5dde1SSampa Misra     entityInstance_ = 0;
1223a0e3b9bSSampa Misra     rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
123aea5dde1SSampa Misra         entityID_, entityInstance_, stateSetId_, compSensorCnt_,
1243fbd39ebSVarsha Kaverappa         setEffecterStateField, effecterId);
125aea5dde1SSampa Misra     ASSERT_EQ(rc, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE);
126aea5dde1SSampa Misra }
127bb585b28SVarsha Kaverappa 
TEST(EncodeCodeUpdateEvent,testGoodRequest)128bb585b28SVarsha Kaverappa TEST(EncodeCodeUpdateEvent, testGoodRequest)
129bb585b28SVarsha Kaverappa {
130bb585b28SVarsha Kaverappa     size_t sensorEventSize = PLDM_SENSOR_EVENT_DATA_MIN_LENGTH + 1;
131bb585b28SVarsha Kaverappa     std::vector<uint8_t> sensorEventDataVec{};
132bb585b28SVarsha Kaverappa     sensorEventDataVec.resize(sensorEventSize);
133bb585b28SVarsha Kaverappa 
134bb585b28SVarsha Kaverappa     auto eventData = reinterpret_cast<struct pldm_sensor_event_data*>(
135bb585b28SVarsha Kaverappa         sensorEventDataVec.data());
136bb585b28SVarsha Kaverappa     eventData->sensor_id = 0xA;
137bb585b28SVarsha Kaverappa     eventData->sensor_event_class_type = PLDM_SENSOR_OP_STATE;
138bb585b28SVarsha Kaverappa 
139bb585b28SVarsha Kaverappa     auto opStateSensorEventData =
140bb585b28SVarsha Kaverappa         reinterpret_cast<struct pldm_sensor_event_sensor_op_state*>(
141bb585b28SVarsha Kaverappa             sensorEventDataVec.data());
142bb585b28SVarsha Kaverappa     opStateSensorEventData->present_op_state = uint8_t(CodeUpdateState::START);
143bb585b28SVarsha Kaverappa     opStateSensorEventData->previous_op_state = uint8_t(CodeUpdateState::END);
144bb585b28SVarsha Kaverappa 
145bb585b28SVarsha Kaverappa     std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr) +
146bb585b28SVarsha Kaverappa                                     PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
147bb585b28SVarsha Kaverappa                                     sensorEventDataVec.size());
148bb585b28SVarsha Kaverappa 
1496da4f91bSPatrick Williams     auto rc = encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg,
1506da4f91bSPatrick Williams                              0x1);
151bb585b28SVarsha Kaverappa 
152bb585b28SVarsha Kaverappa     EXPECT_EQ(rc, PLDM_SUCCESS);
153bb585b28SVarsha Kaverappa }
154bb585b28SVarsha Kaverappa 
TEST(EncodeCodeUpdate,testBadRequest)155bb585b28SVarsha Kaverappa TEST(EncodeCodeUpdate, testBadRequest)
156bb585b28SVarsha Kaverappa {
157bb585b28SVarsha Kaverappa     std::vector<uint8_t> requestMsg;
158bb585b28SVarsha Kaverappa     std::vector<uint8_t> sensorEventDataVec{};
159bb585b28SVarsha Kaverappa 
1606da4f91bSPatrick Williams     auto rc = encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg,
1616da4f91bSPatrick Williams                              0x1);
162bb585b28SVarsha Kaverappa 
163bb585b28SVarsha Kaverappa     EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
164bb585b28SVarsha Kaverappa }
1653ca29df0SVarsha Kaverappa 
TEST(clearDirPath,testClearDirPath)1663ca29df0SVarsha Kaverappa TEST(clearDirPath, testClearDirPath)
1673ca29df0SVarsha Kaverappa {
1683ca29df0SVarsha Kaverappa     char dirPath[] = "/tmp/testClearDir/";
1693ca29df0SVarsha Kaverappa     fs::path dir(dirPath);
1703ca29df0SVarsha Kaverappa     fs::create_directories(dir);
1713ca29df0SVarsha Kaverappa     struct stat buffer;
1723ca29df0SVarsha Kaverappa     ASSERT_EQ(stat(dirPath, &buffer), 0);
1733ca29df0SVarsha Kaverappa     char filePath[] = "/tmp/testClearDir/file.txt";
1743ca29df0SVarsha Kaverappa     std::ofstream file(filePath);
1753ca29df0SVarsha Kaverappa     ASSERT_EQ(stat(filePath, &buffer), 0);
1763ca29df0SVarsha Kaverappa 
1773ca29df0SVarsha Kaverappa     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
1783ca29df0SVarsha Kaverappa     std::unique_ptr<CodeUpdate> mockCodeUpdate =
1793ca29df0SVarsha Kaverappa         std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
1803ca29df0SVarsha Kaverappa 
1813ca29df0SVarsha Kaverappa     mockCodeUpdate->clearDirPath(dirPath);
1823ca29df0SVarsha Kaverappa     ASSERT_EQ(stat(filePath, &buffer), -1);
1833ca29df0SVarsha Kaverappa     ASSERT_EQ(stat(dirPath, &buffer), 0);
1843ca29df0SVarsha Kaverappa }
185360c53f5SSagar Srinivas 
TEST(generateStateEffecterOEMPDR,testGoodRequest)186360c53f5SSagar Srinivas TEST(generateStateEffecterOEMPDR, testGoodRequest)
187360c53f5SSagar Srinivas {
188360c53f5SSagar Srinivas     auto inPDRRepo = pldm_pdr_init();
18984b790cbSPatrick Williams     sdbusplus::bus_t bus(sdbusplus::bus::new_default());
1907c1dc7eaSAndrew Jeffery     TestInstanceIdDb instanceIdDb;
191360c53f5SSagar Srinivas     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
192360c53f5SSagar Srinivas     auto event = sdeventplus::Event::get_default();
193360c53f5SSagar Srinivas     std::unique_ptr<CodeUpdate> mockCodeUpdate =
194360c53f5SSagar Srinivas         std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
195360c53f5SSagar Srinivas     std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler =
196360c53f5SSagar Srinivas         std::make_unique<MockOemPlatformHandler>(mockDbusHandler.get(),
197360c53f5SSagar Srinivas                                                  mockCodeUpdate.get(), 0x1, 0x9,
198a330b2f0SAndrew Jeffery                                                  instanceIdDb, event);
199360c53f5SSagar Srinivas     Repo inRepo(inPDRRepo);
200360c53f5SSagar Srinivas 
2016b1d8830SManojkiran Eda     mockoemPlatformHandler->buildOEMPDR(inRepo);
202360c53f5SSagar Srinivas     ASSERT_EQ(inRepo.empty(), false);
203360c53f5SSagar Srinivas 
204360c53f5SSagar Srinivas     pdr_utils::PdrEntry e;
205360c53f5SSagar Srinivas 
206360c53f5SSagar Srinivas     // Test for effecter number 1, for current boot side state
207360c53f5SSagar Srinivas     auto record1 = pdr::getRecordByHandle(inRepo, 1, e);
208360c53f5SSagar Srinivas     ASSERT_NE(record1, nullptr);
209360c53f5SSagar Srinivas 
210360c53f5SSagar Srinivas     pldm_state_effecter_pdr* pdr =
211360c53f5SSagar Srinivas         reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
212360c53f5SSagar Srinivas 
213360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_handle, 1);
214360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.version, 1);
215360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
216360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_change_num, 0);
217360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.length, 16);
218cc5f1586SManojkiran Eda     ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
219360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
220360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_instance, 0);
22168f5bbdfSPatel-Kamalkumar     ASSERT_EQ(pdr->container_id, 1);
222360c53f5SSagar Srinivas     ASSERT_EQ(pdr->effecter_semantic_id, 0);
223360c53f5SSagar Srinivas     ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
224360c53f5SSagar Srinivas     ASSERT_EQ(pdr->has_description_pdr, false);
225360c53f5SSagar Srinivas     ASSERT_EQ(pdr->composite_effecter_count, 1);
226360c53f5SSagar Srinivas     state_effecter_possible_states* states =
227360c53f5SSagar Srinivas         reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
228360c53f5SSagar Srinivas     ASSERT_EQ(states->state_set_id, 32769);
229360c53f5SSagar Srinivas     ASSERT_EQ(states->possible_states_size, 2);
230360c53f5SSagar Srinivas     bitfield8_t bf1{};
231360c53f5SSagar Srinivas     bf1.byte = 6;
232360c53f5SSagar Srinivas     ASSERT_EQ(states->states[0].byte, bf1.byte);
233360c53f5SSagar Srinivas 
234360c53f5SSagar Srinivas     // Test for effecter number 2, for next boot side state
235360c53f5SSagar Srinivas     auto record2 = pdr::getRecordByHandle(inRepo, 2, e);
236360c53f5SSagar Srinivas     ASSERT_NE(record2, nullptr);
237360c53f5SSagar Srinivas 
238360c53f5SSagar Srinivas     pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
239360c53f5SSagar Srinivas 
240360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_handle, 2);
241360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.version, 1);
242360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
243360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_change_num, 0);
244360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.length, 16);
245cc5f1586SManojkiran Eda     ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
246360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
247360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_instance, 1);
24868f5bbdfSPatel-Kamalkumar     ASSERT_EQ(pdr->container_id, 1);
249360c53f5SSagar Srinivas     ASSERT_EQ(pdr->effecter_semantic_id, 0);
250360c53f5SSagar Srinivas     ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
251360c53f5SSagar Srinivas     ASSERT_EQ(pdr->has_description_pdr, false);
252360c53f5SSagar Srinivas     ASSERT_EQ(pdr->composite_effecter_count, 1);
253360c53f5SSagar Srinivas     states =
254360c53f5SSagar Srinivas         reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
255360c53f5SSagar Srinivas     ASSERT_EQ(states->state_set_id, 32769);
256360c53f5SSagar Srinivas     ASSERT_EQ(states->possible_states_size, 2);
257360c53f5SSagar Srinivas     bitfield8_t bf2{};
258360c53f5SSagar Srinivas     bf2.byte = 6;
259360c53f5SSagar Srinivas     ASSERT_EQ(states->states[0].byte, bf2.byte);
260360c53f5SSagar Srinivas 
261360c53f5SSagar Srinivas     // Test for effecter number 3, for firmware update state control
262360c53f5SSagar Srinivas     auto record3 = pdr::getRecordByHandle(inRepo, 3, e);
263360c53f5SSagar Srinivas     ASSERT_NE(record3, nullptr);
264360c53f5SSagar Srinivas 
265360c53f5SSagar Srinivas     pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
266360c53f5SSagar Srinivas 
267360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_handle, 3);
268360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.version, 1);
269360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
270360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_change_num, 0);
271360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.length, 16);
272cc5f1586SManojkiran Eda     ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
273360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
274360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_instance, 0);
27568f5bbdfSPatel-Kamalkumar     ASSERT_EQ(pdr->container_id, 1);
276360c53f5SSagar Srinivas     ASSERT_EQ(pdr->effecter_semantic_id, 0);
277360c53f5SSagar Srinivas     ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
278360c53f5SSagar Srinivas     ASSERT_EQ(pdr->has_description_pdr, false);
279360c53f5SSagar Srinivas     ASSERT_EQ(pdr->composite_effecter_count, 1);
280360c53f5SSagar Srinivas     states =
281360c53f5SSagar Srinivas         reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
282360c53f5SSagar Srinivas     ASSERT_EQ(states->state_set_id, 32768);
283360c53f5SSagar Srinivas     ASSERT_EQ(states->possible_states_size, 2);
284360c53f5SSagar Srinivas     bitfield8_t bf3{};
285360c53f5SSagar Srinivas     bf3.byte = 126;
286360c53f5SSagar Srinivas     ASSERT_EQ(states->states[0].byte, bf3.byte);
287360c53f5SSagar Srinivas 
288360c53f5SSagar Srinivas     pldm_pdr_destroy(inPDRRepo);
289360c53f5SSagar Srinivas }
290360c53f5SSagar Srinivas 
TEST(generateStateSensorOEMPDR,testGoodRequest)291360c53f5SSagar Srinivas TEST(generateStateSensorOEMPDR, testGoodRequest)
292360c53f5SSagar Srinivas {
293360c53f5SSagar Srinivas     auto inPDRRepo = pldm_pdr_init();
29484b790cbSPatrick Williams     sdbusplus::bus_t bus(sdbusplus::bus::new_default());
2957c1dc7eaSAndrew Jeffery     TestInstanceIdDb instanceIdDb;
296360c53f5SSagar Srinivas 
297360c53f5SSagar Srinivas     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
298360c53f5SSagar Srinivas     auto event = sdeventplus::Event::get_default();
299360c53f5SSagar Srinivas     std::unique_ptr<CodeUpdate> mockCodeUpdate =
300360c53f5SSagar Srinivas         std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
301360c53f5SSagar Srinivas     std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler =
302360c53f5SSagar Srinivas         std::make_unique<MockOemPlatformHandler>(mockDbusHandler.get(),
303360c53f5SSagar Srinivas                                                  mockCodeUpdate.get(), 0x1, 0x9,
304a330b2f0SAndrew Jeffery                                                  instanceIdDb, event);
305360c53f5SSagar Srinivas     Repo inRepo(inPDRRepo);
3066b1d8830SManojkiran Eda     mockoemPlatformHandler->buildOEMPDR(inRepo);
307360c53f5SSagar Srinivas     ASSERT_EQ(inRepo.empty(), false);
308360c53f5SSagar Srinivas 
309360c53f5SSagar Srinivas     pdr_utils::PdrEntry e;
310360c53f5SSagar Srinivas 
311360c53f5SSagar Srinivas     // Test for sensor number 1, for current boot side state
3126b1d8830SManojkiran Eda     auto record1 = pdr::getRecordByHandle(inRepo, 5, e);
313360c53f5SSagar Srinivas     ASSERT_NE(record1, nullptr);
314360c53f5SSagar Srinivas 
315360c53f5SSagar Srinivas     pldm_state_sensor_pdr* pdr =
316360c53f5SSagar Srinivas         reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
317360c53f5SSagar Srinivas 
3186b1d8830SManojkiran Eda     ASSERT_EQ(pdr->hdr.record_handle, 5);
319360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.version, 1);
320360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
321360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_change_num, 0);
322360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.length, 14);
323cc5f1586SManojkiran Eda     ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
324360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
325360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_instance, 0);
32668f5bbdfSPatel-Kamalkumar     ASSERT_EQ(pdr->container_id, 1);
327360c53f5SSagar Srinivas     ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
328360c53f5SSagar Srinivas     ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
329360c53f5SSagar Srinivas     ASSERT_EQ(pdr->composite_sensor_count, 1);
330360c53f5SSagar Srinivas     state_sensor_possible_states* states =
331360c53f5SSagar Srinivas         reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
332360c53f5SSagar Srinivas     ASSERT_EQ(states->state_set_id, 32769);
333360c53f5SSagar Srinivas     ASSERT_EQ(states->possible_states_size, 2);
334360c53f5SSagar Srinivas     bitfield8_t bf1{};
335360c53f5SSagar Srinivas     bf1.byte = 6;
336360c53f5SSagar Srinivas     ASSERT_EQ(states->states[0].byte, bf1.byte);
337360c53f5SSagar Srinivas 
338360c53f5SSagar Srinivas     // Test for sensor number 2, for next boot side state
3396b1d8830SManojkiran Eda     auto record2 = pdr::getRecordByHandle(inRepo, 6, e);
340360c53f5SSagar Srinivas     ASSERT_NE(record2, nullptr);
341360c53f5SSagar Srinivas 
342360c53f5SSagar Srinivas     pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
343360c53f5SSagar Srinivas 
3446b1d8830SManojkiran Eda     ASSERT_EQ(pdr->hdr.record_handle, 6);
345360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.version, 1);
346360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
347360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_change_num, 0);
348360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.length, 14);
349cc5f1586SManojkiran Eda     ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
350360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
351360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_instance, 1);
35268f5bbdfSPatel-Kamalkumar     ASSERT_EQ(pdr->container_id, 1);
353360c53f5SSagar Srinivas     ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
354360c53f5SSagar Srinivas     ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
355360c53f5SSagar Srinivas     ASSERT_EQ(pdr->composite_sensor_count, 1);
356360c53f5SSagar Srinivas     states =
357360c53f5SSagar Srinivas         reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
358360c53f5SSagar Srinivas     ASSERT_EQ(states->state_set_id, 32769);
359360c53f5SSagar Srinivas     ASSERT_EQ(states->possible_states_size, 2);
360360c53f5SSagar Srinivas     bitfield8_t bf2{};
361360c53f5SSagar Srinivas     bf2.byte = 6;
362360c53f5SSagar Srinivas     ASSERT_EQ(states->states[0].byte, bf2.byte);
363360c53f5SSagar Srinivas 
364360c53f5SSagar Srinivas     // Test for sensor number 3, for firmware update state control
3656b1d8830SManojkiran Eda     auto record3 = pdr::getRecordByHandle(inRepo, 7, e);
366360c53f5SSagar Srinivas     ASSERT_NE(record3, nullptr);
367360c53f5SSagar Srinivas 
368360c53f5SSagar Srinivas     pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
369360c53f5SSagar Srinivas 
3706b1d8830SManojkiran Eda     ASSERT_EQ(pdr->hdr.record_handle, 7);
371360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.version, 1);
372360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
373360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.record_change_num, 0);
374360c53f5SSagar Srinivas     ASSERT_EQ(pdr->hdr.length, 14);
375cc5f1586SManojkiran Eda     ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
376360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
377360c53f5SSagar Srinivas     ASSERT_EQ(pdr->entity_instance, 0);
37868f5bbdfSPatel-Kamalkumar     ASSERT_EQ(pdr->container_id, 1);
379360c53f5SSagar Srinivas     ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
380360c53f5SSagar Srinivas     ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
381360c53f5SSagar Srinivas     ASSERT_EQ(pdr->composite_sensor_count, 1);
382360c53f5SSagar Srinivas     states =
383360c53f5SSagar Srinivas         reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
384360c53f5SSagar Srinivas     ASSERT_EQ(states->state_set_id, 32768);
385360c53f5SSagar Srinivas     ASSERT_EQ(states->possible_states_size, 2);
386360c53f5SSagar Srinivas     bitfield8_t bf3{};
387360c53f5SSagar Srinivas     bf3.byte = 126;
388360c53f5SSagar Srinivas     ASSERT_EQ(states->states[0].byte, bf3.byte);
389360c53f5SSagar Srinivas 
390360c53f5SSagar Srinivas     pldm_pdr_destroy(inPDRRepo);
391360c53f5SSagar Srinivas }
392*15ce5a18SKamalkumar Patel 
TEST(updateOemDbusPath,testgoodpath)393*15ce5a18SKamalkumar Patel TEST(updateOemDbusPath, testgoodpath)
394*15ce5a18SKamalkumar Patel {
395*15ce5a18SKamalkumar Patel     TestInstanceIdDb instanceIdDb;
396*15ce5a18SKamalkumar Patel     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
397*15ce5a18SKamalkumar Patel     auto event = sdeventplus::Event::get_default();
398*15ce5a18SKamalkumar Patel     std::unique_ptr<CodeUpdate> mockCodeUpdate =
399*15ce5a18SKamalkumar Patel         std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
400*15ce5a18SKamalkumar Patel     std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler =
401*15ce5a18SKamalkumar Patel         std::make_unique<MockOemPlatformHandler>(mockDbusHandler.get(),
402*15ce5a18SKamalkumar Patel                                                  mockCodeUpdate.get(), 0x1, 0x9,
403*15ce5a18SKamalkumar Patel                                                  instanceIdDb, event);
404*15ce5a18SKamalkumar Patel     std::string dbuspath = "/inventory/system1/chassis1/motherboard1/dcm0";
405*15ce5a18SKamalkumar Patel     mockoemPlatformHandler->updateOemDbusPaths(dbuspath);
406*15ce5a18SKamalkumar Patel     EXPECT_EQ(dbuspath, "/inventory/system/chassis/motherboard/dcm0");
407*15ce5a18SKamalkumar Patel 
408*15ce5a18SKamalkumar Patel     dbuspath = "/inventory/system/chassis/socket1/motherboard/dcm0";
409*15ce5a18SKamalkumar Patel     mockoemPlatformHandler->updateOemDbusPaths(dbuspath);
410*15ce5a18SKamalkumar Patel     EXPECT_EQ(dbuspath, "/inventory/system/chassis/motherboard/dcm0");
411*15ce5a18SKamalkumar Patel }
412