1aea5dde1SSampa Misra #include "libpldm/entity.h" 2aea5dde1SSampa Misra 35327988eSTom Joseph #include "common/test/mocked_utils.hpp" 4aea5dde1SSampa Misra #include "common/utils.hpp" 5aea5dde1SSampa Misra #include "libpldmresponder/event_parser.hpp" 6aea5dde1SSampa Misra #include "libpldmresponder/pdr.hpp" 7aea5dde1SSampa Misra #include "libpldmresponder/pdr_utils.hpp" 8aea5dde1SSampa Misra #include "libpldmresponder/platform.hpp" 9aea5dde1SSampa Misra #include "oem/ibm/libpldmresponder/inband_code_update.hpp" 10aea5dde1SSampa Misra #include "oem/ibm/libpldmresponder/oem_ibm_handler.hpp" 11aea5dde1SSampa Misra 1227403f46SBrad Bishop #include <libpldm/entity_oem_ibm.h> 1327403f46SBrad Bishop 143a0e3b9bSSampa Misra #include <sdeventplus/event.hpp> 153a0e3b9bSSampa Misra 16aea5dde1SSampa Misra #include <iostream> 17aea5dde1SSampa Misra 185079ac4aSBrad Bishop using namespace pldm::dbus_api; 19aea5dde1SSampa Misra using namespace pldm::utils; 20aea5dde1SSampa Misra using namespace pldm::responder; 21aea5dde1SSampa Misra using namespace pldm::responder::pdr; 22aea5dde1SSampa Misra using namespace pldm::responder::pdr_utils; 23aea5dde1SSampa Misra using namespace pldm::responder::oem_ibm_platform; 24aea5dde1SSampa Misra 25aea5dde1SSampa Misra class MockCodeUpdate : public CodeUpdate 26aea5dde1SSampa Misra { 27aea5dde1SSampa Misra public: 28aea5dde1SSampa Misra MockCodeUpdate(const pldm::utils::DBusHandler* dBusIntf) : 29aea5dde1SSampa Misra CodeUpdate(dBusIntf) 30aea5dde1SSampa Misra {} 31aea5dde1SSampa Misra 32aea5dde1SSampa Misra MOCK_METHOD(void, setVersions, (), (override)); 33aea5dde1SSampa Misra }; 34aea5dde1SSampa Misra 35360c53f5SSagar Srinivas class MockOemPlatformHandler : public oem_ibm_platform::Handler 36360c53f5SSagar Srinivas { 37360c53f5SSagar Srinivas public: 38360c53f5SSagar Srinivas MockOemPlatformHandler(const pldm::utils::DBusHandler* dBusIntf, 39360c53f5SSagar Srinivas pldm::responder::CodeUpdate* codeUpdate, int mctp_fd, 40360c53f5SSagar Srinivas uint8_t mctp_eid, Requester& requester, 41360c53f5SSagar Srinivas sdeventplus::Event& event) : 42360c53f5SSagar Srinivas oem_ibm_platform::Handler(dBusIntf, codeUpdate, mctp_fd, mctp_eid, 43c0c79481SSampa Misra requester, event, nullptr) 44360c53f5SSagar Srinivas {} 45360c53f5SSagar Srinivas MOCK_METHOD(uint16_t, getNextEffecterId, ()); 46360c53f5SSagar Srinivas MOCK_METHOD(uint16_t, getNextSensorId, ()); 47360c53f5SSagar Srinivas }; 48360c53f5SSagar Srinivas 49360c53f5SSagar Srinivas TEST(OemSetStateEffecterStatesHandler, testGoodRequest) 50aea5dde1SSampa Misra { 5178a225a2SSagar Srinivas uint16_t entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE; 52aea5dde1SSampa Misra uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE; 53aea5dde1SSampa Misra uint16_t entityInstance_ = 0; 54aea5dde1SSampa Misra uint8_t compSensorCnt_ = 1; 553fbd39ebSVarsha Kaverappa uint16_t effecterId = 0xA; 5684b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default()); 57bb585b28SVarsha Kaverappa Requester requester(bus, "/abc/def"); 583a0e3b9bSSampa Misra auto event = sdeventplus::Event::get_default(); 59aea5dde1SSampa Misra std::vector<get_sensor_state_field> stateField; 60aea5dde1SSampa Misra 61aea5dde1SSampa Misra auto mockDbusHandler = std::make_unique<MockdBusHandler>(); 62aea5dde1SSampa Misra std::unique_ptr<CodeUpdate> mockCodeUpdate = 63aea5dde1SSampa Misra std::make_unique<MockCodeUpdate>(mockDbusHandler.get()); 64aea5dde1SSampa Misra std::unique_ptr<oem_platform::Handler> oemPlatformHandler{}; 65aea5dde1SSampa Misra 66aea5dde1SSampa Misra oemPlatformHandler = std::make_unique<oem_ibm_platform::Handler>( 67c0c79481SSampa Misra mockDbusHandler.get(), mockCodeUpdate.get(), 0x1, 0x9, requester, event, 68c0c79481SSampa Misra nullptr); 69aea5dde1SSampa Misra 70aea5dde1SSampa Misra auto rc = oemPlatformHandler->getOemStateSensorReadingsHandler( 71aea5dde1SSampa Misra entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField); 72aea5dde1SSampa Misra 73aea5dde1SSampa Misra ASSERT_EQ(rc, PLDM_SUCCESS); 74aea5dde1SSampa Misra ASSERT_EQ(stateField.size(), 1); 75aea5dde1SSampa Misra ASSERT_EQ(stateField[0].event_state, tSideNum); 76aea5dde1SSampa Misra ASSERT_EQ(stateField[0].sensor_op_state, PLDM_SENSOR_ENABLED); 77aea5dde1SSampa Misra ASSERT_EQ(stateField[0].present_state, PLDM_SENSOR_UNKNOWN); 78aea5dde1SSampa Misra ASSERT_EQ(stateField[0].previous_state, PLDM_SENSOR_UNKNOWN); 79aea5dde1SSampa Misra 80aea5dde1SSampa Misra entityInstance_ = 1; 81aea5dde1SSampa Misra 82aea5dde1SSampa Misra std::vector<get_sensor_state_field> stateField1; 83aea5dde1SSampa Misra rc = oemPlatformHandler->getOemStateSensorReadingsHandler( 84aea5dde1SSampa Misra entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1); 85aea5dde1SSampa Misra ASSERT_EQ(stateField1.size(), 1); 86aea5dde1SSampa Misra ASSERT_EQ(stateField1[0].event_state, tSideNum); 87aea5dde1SSampa Misra 88aea5dde1SSampa Misra entityInstance_ = 2; 89aea5dde1SSampa Misra rc = oemPlatformHandler->getOemStateSensorReadingsHandler( 90aea5dde1SSampa Misra entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1); 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 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 149bb585b28SVarsha Kaverappa auto rc = 150bb585b28SVarsha Kaverappa encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg, 0x1); 151bb585b28SVarsha Kaverappa 152bb585b28SVarsha Kaverappa EXPECT_EQ(rc, PLDM_SUCCESS); 153bb585b28SVarsha Kaverappa } 154bb585b28SVarsha Kaverappa 155bb585b28SVarsha Kaverappa TEST(EncodeCodeUpdate, testBadRequest) 156bb585b28SVarsha Kaverappa { 157bb585b28SVarsha Kaverappa std::vector<uint8_t> requestMsg; 158bb585b28SVarsha Kaverappa std::vector<uint8_t> sensorEventDataVec{}; 159bb585b28SVarsha Kaverappa 160bb585b28SVarsha Kaverappa auto rc = 161bb585b28SVarsha Kaverappa encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg, 0x1); 162bb585b28SVarsha Kaverappa 163bb585b28SVarsha Kaverappa EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA); 164bb585b28SVarsha Kaverappa } 1653ca29df0SVarsha Kaverappa 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 186360c53f5SSagar Srinivas TEST(generateStateEffecterOEMPDR, testGoodRequest) 187360c53f5SSagar Srinivas { 188360c53f5SSagar Srinivas auto inPDRRepo = pldm_pdr_init(); 18984b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default()); 190360c53f5SSagar Srinivas Requester requester(bus, "/abc/def"); 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, 198360c53f5SSagar Srinivas requester, 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); 221*68f5bbdfSPatel-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); 248*68f5bbdfSPatel-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); 275*68f5bbdfSPatel-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 291360c53f5SSagar Srinivas TEST(generateStateSensorOEMPDR, testGoodRequest) 292360c53f5SSagar Srinivas { 293360c53f5SSagar Srinivas auto inPDRRepo = pldm_pdr_init(); 29484b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default()); 295360c53f5SSagar Srinivas Requester requester(bus, "/abc/def"); 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, 304360c53f5SSagar Srinivas requester, 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); 326*68f5bbdfSPatel-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); 352*68f5bbdfSPatel-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); 378*68f5bbdfSPatel-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