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> 1227403f46SBrad Bishop #include <libpldm/entity_oem_ibm.h> 1327403f46SBrad Bishop 143a0e3b9bSSampa Misra #include <sdeventplus/event.hpp> 153a0e3b9bSSampa Misra 16aea5dde1SSampa Misra #include <iostream> 17aea5dde1SSampa Misra 18aea5dde1SSampa Misra using namespace pldm::utils; 19aea5dde1SSampa Misra using namespace pldm::responder; 20aea5dde1SSampa Misra using namespace pldm::responder::pdr; 21aea5dde1SSampa Misra using namespace pldm::responder::pdr_utils; 22aea5dde1SSampa Misra using namespace pldm::responder::oem_ibm_platform; 23aea5dde1SSampa Misra 24aea5dde1SSampa Misra class MockCodeUpdate : public CodeUpdate 25aea5dde1SSampa Misra { 26aea5dde1SSampa Misra public: 27aea5dde1SSampa Misra MockCodeUpdate(const pldm::utils::DBusHandler* dBusIntf) : 28aea5dde1SSampa Misra CodeUpdate(dBusIntf) 29aea5dde1SSampa Misra {} 30aea5dde1SSampa Misra 31aea5dde1SSampa Misra MOCK_METHOD(void, setVersions, (), (override)); 32aea5dde1SSampa Misra }; 33aea5dde1SSampa Misra 34360c53f5SSagar Srinivas class MockOemPlatformHandler : public oem_ibm_platform::Handler 35360c53f5SSagar Srinivas { 36360c53f5SSagar Srinivas public: 37360c53f5SSagar Srinivas MockOemPlatformHandler(const pldm::utils::DBusHandler* dBusIntf, 38360c53f5SSagar Srinivas pldm::responder::CodeUpdate* codeUpdate, int mctp_fd, 39*a330b2f0SAndrew Jeffery uint8_t mctp_eid, pldm::InstanceIdDb& instanceIdDb, 40360c53f5SSagar Srinivas sdeventplus::Event& event) : 41360c53f5SSagar Srinivas oem_ibm_platform::Handler(dBusIntf, codeUpdate, mctp_fd, mctp_eid, 42*a330b2f0SAndrew Jeffery instanceIdDb, event, nullptr) 43360c53f5SSagar Srinivas {} 44360c53f5SSagar Srinivas MOCK_METHOD(uint16_t, getNextEffecterId, ()); 45360c53f5SSagar Srinivas MOCK_METHOD(uint16_t, getNextSensorId, ()); 46360c53f5SSagar Srinivas }; 47360c53f5SSagar Srinivas 48360c53f5SSagar Srinivas TEST(OemSetStateEffecterStatesHandler, testGoodRequest) 49aea5dde1SSampa Misra { 5078a225a2SSagar Srinivas uint16_t entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE; 51aea5dde1SSampa Misra uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE; 52aea5dde1SSampa Misra uint16_t entityInstance_ = 0; 53aea5dde1SSampa Misra uint8_t compSensorCnt_ = 1; 543fbd39ebSVarsha Kaverappa uint16_t effecterId = 0xA; 557c1dc7eaSAndrew Jeffery TestInstanceIdDb instanceIdDb; 567c1dc7eaSAndrew Jeffery 5784b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default()); 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>( 67*a330b2f0SAndrew Jeffery mockDbusHandler.get(), mockCodeUpdate.get(), 0x1, 0x9, instanceIdDb, 68*a330b2f0SAndrew Jeffery event, 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 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 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 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()); 1907c1dc7eaSAndrew Jeffery std::filesystem::path dbPath; 1917c1dc7eaSAndrew Jeffery TestInstanceIdDb instanceIdDb; 192360c53f5SSagar Srinivas auto mockDbusHandler = std::make_unique<MockdBusHandler>(); 193360c53f5SSagar Srinivas auto event = sdeventplus::Event::get_default(); 194360c53f5SSagar Srinivas std::unique_ptr<CodeUpdate> mockCodeUpdate = 195360c53f5SSagar Srinivas std::make_unique<MockCodeUpdate>(mockDbusHandler.get()); 196360c53f5SSagar Srinivas std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler = 197360c53f5SSagar Srinivas std::make_unique<MockOemPlatformHandler>(mockDbusHandler.get(), 198360c53f5SSagar Srinivas mockCodeUpdate.get(), 0x1, 0x9, 199*a330b2f0SAndrew Jeffery instanceIdDb, event); 200360c53f5SSagar Srinivas Repo inRepo(inPDRRepo); 201360c53f5SSagar Srinivas 2026b1d8830SManojkiran Eda mockoemPlatformHandler->buildOEMPDR(inRepo); 203360c53f5SSagar Srinivas ASSERT_EQ(inRepo.empty(), false); 204360c53f5SSagar Srinivas 205360c53f5SSagar Srinivas pdr_utils::PdrEntry e; 206360c53f5SSagar Srinivas 207360c53f5SSagar Srinivas // Test for effecter number 1, for current boot side state 208360c53f5SSagar Srinivas auto record1 = pdr::getRecordByHandle(inRepo, 1, e); 209360c53f5SSagar Srinivas ASSERT_NE(record1, nullptr); 210360c53f5SSagar Srinivas 211360c53f5SSagar Srinivas pldm_state_effecter_pdr* pdr = 212360c53f5SSagar Srinivas reinterpret_cast<pldm_state_effecter_pdr*>(e.data); 213360c53f5SSagar Srinivas 214360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_handle, 1); 215360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1); 216360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR); 217360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0); 218360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 16); 219cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE); 220360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE); 221360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0); 22268f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1); 223360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_semantic_id, 0); 224360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT); 225360c53f5SSagar Srinivas ASSERT_EQ(pdr->has_description_pdr, false); 226360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_effecter_count, 1); 227360c53f5SSagar Srinivas state_effecter_possible_states* states = 228360c53f5SSagar Srinivas reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states); 229360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769); 230360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2); 231360c53f5SSagar Srinivas bitfield8_t bf1{}; 232360c53f5SSagar Srinivas bf1.byte = 6; 233360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf1.byte); 234360c53f5SSagar Srinivas 235360c53f5SSagar Srinivas // Test for effecter number 2, for next boot side state 236360c53f5SSagar Srinivas auto record2 = pdr::getRecordByHandle(inRepo, 2, e); 237360c53f5SSagar Srinivas ASSERT_NE(record2, nullptr); 238360c53f5SSagar Srinivas 239360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data); 240360c53f5SSagar Srinivas 241360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_handle, 2); 242360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1); 243360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR); 244360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0); 245360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 16); 246cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE); 247360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE); 248360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 1); 24968f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1); 250360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_semantic_id, 0); 251360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT); 252360c53f5SSagar Srinivas ASSERT_EQ(pdr->has_description_pdr, false); 253360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_effecter_count, 1); 254360c53f5SSagar Srinivas states = 255360c53f5SSagar Srinivas reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states); 256360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769); 257360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2); 258360c53f5SSagar Srinivas bitfield8_t bf2{}; 259360c53f5SSagar Srinivas bf2.byte = 6; 260360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf2.byte); 261360c53f5SSagar Srinivas 262360c53f5SSagar Srinivas // Test for effecter number 3, for firmware update state control 263360c53f5SSagar Srinivas auto record3 = pdr::getRecordByHandle(inRepo, 3, e); 264360c53f5SSagar Srinivas ASSERT_NE(record3, nullptr); 265360c53f5SSagar Srinivas 266360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data); 267360c53f5SSagar Srinivas 268360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_handle, 3); 269360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1); 270360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR); 271360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0); 272360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 16); 273cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE); 274360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE); 275360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0); 27668f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1); 277360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_semantic_id, 0); 278360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT); 279360c53f5SSagar Srinivas ASSERT_EQ(pdr->has_description_pdr, false); 280360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_effecter_count, 1); 281360c53f5SSagar Srinivas states = 282360c53f5SSagar Srinivas reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states); 283360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32768); 284360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2); 285360c53f5SSagar Srinivas bitfield8_t bf3{}; 286360c53f5SSagar Srinivas bf3.byte = 126; 287360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf3.byte); 288360c53f5SSagar Srinivas 289360c53f5SSagar Srinivas pldm_pdr_destroy(inPDRRepo); 290360c53f5SSagar Srinivas } 291360c53f5SSagar Srinivas 292360c53f5SSagar Srinivas TEST(generateStateSensorOEMPDR, testGoodRequest) 293360c53f5SSagar Srinivas { 294360c53f5SSagar Srinivas auto inPDRRepo = pldm_pdr_init(); 29584b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default()); 2967c1dc7eaSAndrew Jeffery std::filesystem::path dbPath; 2977c1dc7eaSAndrew Jeffery TestInstanceIdDb instanceIdDb; 298360c53f5SSagar Srinivas 299360c53f5SSagar Srinivas auto mockDbusHandler = std::make_unique<MockdBusHandler>(); 300360c53f5SSagar Srinivas auto event = sdeventplus::Event::get_default(); 301360c53f5SSagar Srinivas std::unique_ptr<CodeUpdate> mockCodeUpdate = 302360c53f5SSagar Srinivas std::make_unique<MockCodeUpdate>(mockDbusHandler.get()); 303360c53f5SSagar Srinivas std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler = 304360c53f5SSagar Srinivas std::make_unique<MockOemPlatformHandler>(mockDbusHandler.get(), 305360c53f5SSagar Srinivas mockCodeUpdate.get(), 0x1, 0x9, 306*a330b2f0SAndrew Jeffery instanceIdDb, event); 307360c53f5SSagar Srinivas Repo inRepo(inPDRRepo); 3086b1d8830SManojkiran Eda mockoemPlatformHandler->buildOEMPDR(inRepo); 309360c53f5SSagar Srinivas ASSERT_EQ(inRepo.empty(), false); 310360c53f5SSagar Srinivas 311360c53f5SSagar Srinivas pdr_utils::PdrEntry e; 312360c53f5SSagar Srinivas 313360c53f5SSagar Srinivas // Test for sensor number 1, for current boot side state 3146b1d8830SManojkiran Eda auto record1 = pdr::getRecordByHandle(inRepo, 5, e); 315360c53f5SSagar Srinivas ASSERT_NE(record1, nullptr); 316360c53f5SSagar Srinivas 317360c53f5SSagar Srinivas pldm_state_sensor_pdr* pdr = 318360c53f5SSagar Srinivas reinterpret_cast<pldm_state_sensor_pdr*>(e.data); 319360c53f5SSagar Srinivas 3206b1d8830SManojkiran Eda ASSERT_EQ(pdr->hdr.record_handle, 5); 321360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1); 322360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR); 323360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0); 324360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 14); 325cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE); 326360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE); 327360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0); 32868f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1); 329360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT); 330360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false); 331360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_sensor_count, 1); 332360c53f5SSagar Srinivas state_sensor_possible_states* states = 333360c53f5SSagar Srinivas reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states); 334360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769); 335360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2); 336360c53f5SSagar Srinivas bitfield8_t bf1{}; 337360c53f5SSagar Srinivas bf1.byte = 6; 338360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf1.byte); 339360c53f5SSagar Srinivas 340360c53f5SSagar Srinivas // Test for sensor number 2, for next boot side state 3416b1d8830SManojkiran Eda auto record2 = pdr::getRecordByHandle(inRepo, 6, e); 342360c53f5SSagar Srinivas ASSERT_NE(record2, nullptr); 343360c53f5SSagar Srinivas 344360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data); 345360c53f5SSagar Srinivas 3466b1d8830SManojkiran Eda ASSERT_EQ(pdr->hdr.record_handle, 6); 347360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1); 348360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR); 349360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0); 350360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 14); 351cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE); 352360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE); 353360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 1); 35468f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1); 355360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT); 356360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false); 357360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_sensor_count, 1); 358360c53f5SSagar Srinivas states = 359360c53f5SSagar Srinivas reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states); 360360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769); 361360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2); 362360c53f5SSagar Srinivas bitfield8_t bf2{}; 363360c53f5SSagar Srinivas bf2.byte = 6; 364360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf2.byte); 365360c53f5SSagar Srinivas 366360c53f5SSagar Srinivas // Test for sensor number 3, for firmware update state control 3676b1d8830SManojkiran Eda auto record3 = pdr::getRecordByHandle(inRepo, 7, e); 368360c53f5SSagar Srinivas ASSERT_NE(record3, nullptr); 369360c53f5SSagar Srinivas 370360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data); 371360c53f5SSagar Srinivas 3726b1d8830SManojkiran Eda ASSERT_EQ(pdr->hdr.record_handle, 7); 373360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1); 374360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR); 375360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0); 376360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 14); 377cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE); 378360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE); 379360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0); 38068f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1); 381360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT); 382360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false); 383360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_sensor_count, 1); 384360c53f5SSagar Srinivas states = 385360c53f5SSagar Srinivas reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states); 386360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32768); 387360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2); 388360c53f5SSagar Srinivas bitfield8_t bf3{}; 389360c53f5SSagar Srinivas bf3.byte = 126; 390360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf3.byte); 391360c53f5SSagar Srinivas 392360c53f5SSagar Srinivas pldm_pdr_destroy(inPDRRepo); 393360c53f5SSagar Srinivas } 394