15327988eSTom Joseph #include "common/test/mocked_utils.hpp"
2aea5dde1SSampa Misra #include "common/utils.hpp"
3eb43d6c8SKamalkumar Patel #include "host-bmc/utils.hpp"
4aea5dde1SSampa Misra #include "libpldmresponder/event_parser.hpp"
5*a31ceb91SManojkiran Eda #include "libpldmresponder/fru.hpp"
6aea5dde1SSampa Misra #include "libpldmresponder/pdr.hpp"
7aea5dde1SSampa Misra #include "libpldmresponder/pdr_utils.hpp"
8aea5dde1SSampa Misra #include "libpldmresponder/platform.hpp"
9*a31ceb91SManojkiran Eda #include "oem/ibm/libpldmresponder/collect_slot_vpd.hpp"
10aea5dde1SSampa Misra #include "oem/ibm/libpldmresponder/inband_code_update.hpp"
11aea5dde1SSampa Misra #include "oem/ibm/libpldmresponder/oem_ibm_handler.hpp"
12eb43d6c8SKamalkumar Patel #include "oem/ibm/libpldmresponder/utils.hpp"
137c1dc7eaSAndrew Jeffery #include "test/test_instance_id.hpp"
14aea5dde1SSampa Misra
15c453e164SGeorge Liu #include <libpldm/entity.h>
1621f128d8SAndrew Jeffery #include <libpldm/oem/ibm/entity.h>
17eb43d6c8SKamalkumar Patel #include <libpldm/pdr.h>
1827403f46SBrad Bishop
19eb43d6c8SKamalkumar Patel #include <nlohmann/json.hpp>
20eb43d6c8SKamalkumar Patel #include <phosphor-logging/lg2.hpp>
213a0e3b9bSSampa Misra #include <sdeventplus/event.hpp>
223a0e3b9bSSampa Misra
23eb43d6c8SKamalkumar Patel #include <filesystem>
24eb43d6c8SKamalkumar Patel #include <fstream>
25eb43d6c8SKamalkumar Patel
26aea5dde1SSampa Misra using namespace pldm::utils;
27aea5dde1SSampa Misra using namespace pldm::responder;
28aea5dde1SSampa Misra using namespace pldm::responder::pdr;
29aea5dde1SSampa Misra using namespace pldm::responder::pdr_utils;
30aea5dde1SSampa Misra using namespace pldm::responder::oem_ibm_platform;
31eb43d6c8SKamalkumar Patel using ::testing::Return;
32*a31ceb91SManojkiran Eda using ::testing::ReturnRef;
33eb43d6c8SKamalkumar Patel
34eb43d6c8SKamalkumar Patel class MockOemUtilsHandler : public oem_ibm_utils::Handler
35eb43d6c8SKamalkumar Patel {
36eb43d6c8SKamalkumar Patel public:
MockOemUtilsHandler(const pldm::utils::DBusHandler * dBusIntf)37eb43d6c8SKamalkumar Patel MockOemUtilsHandler(const pldm::utils::DBusHandler* dBusIntf) :
38eb43d6c8SKamalkumar Patel oem_ibm_utils::Handler(dBusIntf)
39eb43d6c8SKamalkumar Patel {}
40eb43d6c8SKamalkumar Patel };
41aea5dde1SSampa Misra
42aea5dde1SSampa Misra class MockCodeUpdate : public CodeUpdate
43aea5dde1SSampa Misra {
44aea5dde1SSampa Misra public:
MockCodeUpdate(const pldm::utils::DBusHandler * dBusIntf)45aea5dde1SSampa Misra MockCodeUpdate(const pldm::utils::DBusHandler* dBusIntf) :
46aea5dde1SSampa Misra CodeUpdate(dBusIntf)
47aea5dde1SSampa Misra {}
48aea5dde1SSampa Misra
49aea5dde1SSampa Misra MOCK_METHOD(void, setVersions, (), (override));
50aea5dde1SSampa Misra };
51aea5dde1SSampa Misra
52*a31ceb91SManojkiran Eda class MockSlotHandler : public SlotHandler
53*a31ceb91SManojkiran Eda {
54*a31ceb91SManojkiran Eda public:
MockSlotHandler(const sdeventplus::Event & event,pldm_pdr * repo)55*a31ceb91SManojkiran Eda MockSlotHandler(const sdeventplus::Event& event, pldm_pdr* repo) :
56*a31ceb91SManojkiran Eda SlotHandler(event, repo)
57*a31ceb91SManojkiran Eda {}
58*a31ceb91SManojkiran Eda };
59*a31ceb91SManojkiran Eda
60360c53f5SSagar Srinivas class MockOemPlatformHandler : public oem_ibm_platform::Handler
61360c53f5SSagar Srinivas {
62360c53f5SSagar Srinivas public:
MockOemPlatformHandler(const pldm::utils::DBusHandler * dBusIntf,pldm::responder::CodeUpdate * codeUpdate,pldm::responder::SlotHandler * slotHandler,int mctp_fd,uint8_t mctp_eid,pldm::InstanceIdDb & instanceIdDb,sdeventplus::Event & event)63360c53f5SSagar Srinivas MockOemPlatformHandler(const pldm::utils::DBusHandler* dBusIntf,
64*a31ceb91SManojkiran Eda pldm::responder::CodeUpdate* codeUpdate,
65*a31ceb91SManojkiran Eda pldm::responder::SlotHandler* slotHandler,
66*a31ceb91SManojkiran Eda int mctp_fd, uint8_t mctp_eid,
67*a31ceb91SManojkiran Eda pldm::InstanceIdDb& instanceIdDb,
68360c53f5SSagar Srinivas sdeventplus::Event& event) :
69*a31ceb91SManojkiran Eda oem_ibm_platform::Handler(dBusIntf, codeUpdate, slotHandler, mctp_fd,
70*a31ceb91SManojkiran Eda mctp_eid, instanceIdDb, event, nullptr)
71360c53f5SSagar Srinivas {}
72360c53f5SSagar Srinivas MOCK_METHOD(uint16_t, getNextEffecterId, ());
73360c53f5SSagar Srinivas MOCK_METHOD(uint16_t, getNextSensorId, ());
74*a31ceb91SManojkiran Eda MOCK_METHOD((const AssociatedEntityMap&), getAssociateEntityMap, (),
75*a31ceb91SManojkiran Eda (override));
76360c53f5SSagar Srinivas };
77360c53f5SSagar Srinivas
TEST(OemSetStateEffecterStatesHandler,testGoodRequest)78360c53f5SSagar Srinivas TEST(OemSetStateEffecterStatesHandler, testGoodRequest)
79aea5dde1SSampa Misra {
8078a225a2SSagar Srinivas uint16_t entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
81aea5dde1SSampa Misra uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
82aea5dde1SSampa Misra uint16_t entityInstance_ = 0;
83*a31ceb91SManojkiran Eda uint16_t containerId_ = 0;
84aea5dde1SSampa Misra uint8_t compSensorCnt_ = 1;
853fbd39ebSVarsha Kaverappa uint16_t effecterId = 0xA;
86*a31ceb91SManojkiran Eda uint16_t sensorId = 0x1;
877c1dc7eaSAndrew Jeffery TestInstanceIdDb instanceIdDb;
887c1dc7eaSAndrew Jeffery
8984b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default());
903a0e3b9bSSampa Misra auto event = sdeventplus::Event::get_default();
91aea5dde1SSampa Misra std::vector<get_sensor_state_field> stateField;
92aea5dde1SSampa Misra
93aea5dde1SSampa Misra auto mockDbusHandler = std::make_unique<MockdBusHandler>();
94aea5dde1SSampa Misra std::unique_ptr<CodeUpdate> mockCodeUpdate =
95aea5dde1SSampa Misra std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
96*a31ceb91SManojkiran Eda std::unique_ptr<MockOemPlatformHandler> oemPlatformHandler =
97*a31ceb91SManojkiran Eda std::make_unique<MockOemPlatformHandler>(
98*a31ceb91SManojkiran Eda mockDbusHandler.get(), mockCodeUpdate.get(), nullptr, 0x1, 0x9,
99*a31ceb91SManojkiran Eda instanceIdDb, event);
100aea5dde1SSampa Misra
101*a31ceb91SManojkiran Eda const AssociatedEntityMap associateMap = {};
102*a31ceb91SManojkiran Eda EXPECT_CALL(*oemPlatformHandler, getAssociateEntityMap())
103*a31ceb91SManojkiran Eda .WillRepeatedly(ReturnRef(associateMap));
104aea5dde1SSampa Misra
105aea5dde1SSampa Misra auto rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
106*a31ceb91SManojkiran Eda entityID_, entityInstance_, containerId_, stateSetId_, compSensorCnt_,
107*a31ceb91SManojkiran Eda sensorId, stateField);
108aea5dde1SSampa Misra
109aea5dde1SSampa Misra ASSERT_EQ(rc, PLDM_SUCCESS);
110aea5dde1SSampa Misra ASSERT_EQ(stateField.size(), 1);
111aea5dde1SSampa Misra ASSERT_EQ(stateField[0].event_state, tSideNum);
112aea5dde1SSampa Misra ASSERT_EQ(stateField[0].sensor_op_state, PLDM_SENSOR_ENABLED);
113aea5dde1SSampa Misra ASSERT_EQ(stateField[0].present_state, PLDM_SENSOR_UNKNOWN);
114aea5dde1SSampa Misra ASSERT_EQ(stateField[0].previous_state, PLDM_SENSOR_UNKNOWN);
115aea5dde1SSampa Misra
116aea5dde1SSampa Misra entityInstance_ = 1;
117aea5dde1SSampa Misra
118aea5dde1SSampa Misra std::vector<get_sensor_state_field> stateField1;
119aea5dde1SSampa Misra rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
120*a31ceb91SManojkiran Eda entityID_, entityInstance_, containerId_, stateSetId_, compSensorCnt_,
121*a31ceb91SManojkiran Eda sensorId, stateField1);
1225e3a2478SPavithra Barithaya ASSERT_EQ(rc, PLDM_SUCCESS);
123aea5dde1SSampa Misra ASSERT_EQ(stateField1.size(), 1);
124aea5dde1SSampa Misra ASSERT_EQ(stateField1[0].event_state, tSideNum);
125aea5dde1SSampa Misra
126aea5dde1SSampa Misra entityInstance_ = 2;
127aea5dde1SSampa Misra rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
128*a31ceb91SManojkiran Eda entityID_, entityInstance_, containerId_, stateSetId_, compSensorCnt_,
129*a31ceb91SManojkiran Eda sensorId, stateField1);
1305e3a2478SPavithra Barithaya ASSERT_EQ(rc, PLDM_SUCCESS);
131aea5dde1SSampa Misra ASSERT_EQ(stateField1[0].event_state, PLDM_SENSOR_UNKNOWN);
132aea5dde1SSampa Misra
133aea5dde1SSampa Misra entityID_ = 40;
134aea5dde1SSampa Misra stateSetId_ = 50;
135aea5dde1SSampa Misra rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
136*a31ceb91SManojkiran Eda entityID_, entityInstance_, containerId_, stateSetId_, compSensorCnt_,
137*a31ceb91SManojkiran Eda sensorId, stateField1);
138aea5dde1SSampa Misra ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
139aea5dde1SSampa Misra
14078a225a2SSagar Srinivas entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
141aea5dde1SSampa Misra entityInstance_ = 0;
142aea5dde1SSampa Misra stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
143aea5dde1SSampa Misra compSensorCnt_ = 1;
144aea5dde1SSampa Misra
145aea5dde1SSampa Misra std::vector<set_effecter_state_field> setEffecterStateField;
146aea5dde1SSampa Misra setEffecterStateField.push_back({PLDM_REQUEST_SET, pSideNum});
147aea5dde1SSampa Misra
1483a0e3b9bSSampa Misra rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
149aea5dde1SSampa Misra entityID_, entityInstance_, stateSetId_, compSensorCnt_,
1503fbd39ebSVarsha Kaverappa setEffecterStateField, effecterId);
151aea5dde1SSampa Misra ASSERT_EQ(rc, PLDM_SUCCESS);
152aea5dde1SSampa Misra
153aea5dde1SSampa Misra entityInstance_ = 2;
1543a0e3b9bSSampa Misra rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
155aea5dde1SSampa Misra entityID_, entityInstance_, stateSetId_, compSensorCnt_,
1563fbd39ebSVarsha Kaverappa setEffecterStateField, effecterId);
157aea5dde1SSampa Misra ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
158aea5dde1SSampa Misra
159aea5dde1SSampa Misra entityID_ = 34;
160aea5dde1SSampa Misra stateSetId_ = 99;
161aea5dde1SSampa Misra entityInstance_ = 0;
1623a0e3b9bSSampa Misra rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
163aea5dde1SSampa Misra entityID_, entityInstance_, stateSetId_, compSensorCnt_,
1643fbd39ebSVarsha Kaverappa setEffecterStateField, effecterId);
165aea5dde1SSampa Misra ASSERT_EQ(rc, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE);
166aea5dde1SSampa Misra }
167bb585b28SVarsha Kaverappa
TEST(EncodeCodeUpdateEvent,testGoodRequest)168bb585b28SVarsha Kaverappa TEST(EncodeCodeUpdateEvent, testGoodRequest)
169bb585b28SVarsha Kaverappa {
170bb585b28SVarsha Kaverappa size_t sensorEventSize = PLDM_SENSOR_EVENT_DATA_MIN_LENGTH + 1;
171bb585b28SVarsha Kaverappa std::vector<uint8_t> sensorEventDataVec{};
172bb585b28SVarsha Kaverappa sensorEventDataVec.resize(sensorEventSize);
173bb585b28SVarsha Kaverappa
174bb585b28SVarsha Kaverappa auto eventData = reinterpret_cast<struct pldm_sensor_event_data*>(
175bb585b28SVarsha Kaverappa sensorEventDataVec.data());
176bb585b28SVarsha Kaverappa eventData->sensor_id = 0xA;
177bb585b28SVarsha Kaverappa eventData->sensor_event_class_type = PLDM_SENSOR_OP_STATE;
178bb585b28SVarsha Kaverappa
179bb585b28SVarsha Kaverappa auto opStateSensorEventData =
180bb585b28SVarsha Kaverappa reinterpret_cast<struct pldm_sensor_event_sensor_op_state*>(
181bb585b28SVarsha Kaverappa sensorEventDataVec.data());
182bb585b28SVarsha Kaverappa opStateSensorEventData->present_op_state = uint8_t(CodeUpdateState::START);
183bb585b28SVarsha Kaverappa opStateSensorEventData->previous_op_state = uint8_t(CodeUpdateState::END);
184bb585b28SVarsha Kaverappa
18516c2a0a0SPatrick Williams std::vector<uint8_t> requestMsg(
18616c2a0a0SPatrick Williams sizeof(pldm_msg_hdr) + PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
187bb585b28SVarsha Kaverappa sensorEventDataVec.size());
188bb585b28SVarsha Kaverappa
18916c2a0a0SPatrick Williams auto rc =
19016c2a0a0SPatrick Williams encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg, 0x1);
191bb585b28SVarsha Kaverappa
192bb585b28SVarsha Kaverappa EXPECT_EQ(rc, PLDM_SUCCESS);
193bb585b28SVarsha Kaverappa }
194bb585b28SVarsha Kaverappa
TEST(EncodeCodeUpdate,testBadRequest)195bb585b28SVarsha Kaverappa TEST(EncodeCodeUpdate, testBadRequest)
196bb585b28SVarsha Kaverappa {
197bb585b28SVarsha Kaverappa std::vector<uint8_t> requestMsg;
198bb585b28SVarsha Kaverappa std::vector<uint8_t> sensorEventDataVec{};
199bb585b28SVarsha Kaverappa
20016c2a0a0SPatrick Williams auto rc =
20116c2a0a0SPatrick Williams encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg, 0x1);
202bb585b28SVarsha Kaverappa
203bb585b28SVarsha Kaverappa EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
204bb585b28SVarsha Kaverappa }
2053ca29df0SVarsha Kaverappa
TEST(clearDirPath,testClearDirPath)2063ca29df0SVarsha Kaverappa TEST(clearDirPath, testClearDirPath)
2073ca29df0SVarsha Kaverappa {
2083ca29df0SVarsha Kaverappa char dirPath[] = "/tmp/testClearDir/";
2093ca29df0SVarsha Kaverappa fs::path dir(dirPath);
2103ca29df0SVarsha Kaverappa fs::create_directories(dir);
2113ca29df0SVarsha Kaverappa struct stat buffer;
2123ca29df0SVarsha Kaverappa ASSERT_EQ(stat(dirPath, &buffer), 0);
2133ca29df0SVarsha Kaverappa char filePath[] = "/tmp/testClearDir/file.txt";
2143ca29df0SVarsha Kaverappa std::ofstream file(filePath);
2153ca29df0SVarsha Kaverappa ASSERT_EQ(stat(filePath, &buffer), 0);
2163ca29df0SVarsha Kaverappa
2173ca29df0SVarsha Kaverappa auto mockDbusHandler = std::make_unique<MockdBusHandler>();
2183ca29df0SVarsha Kaverappa std::unique_ptr<CodeUpdate> mockCodeUpdate =
2193ca29df0SVarsha Kaverappa std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
2203ca29df0SVarsha Kaverappa
2213ca29df0SVarsha Kaverappa mockCodeUpdate->clearDirPath(dirPath);
2223ca29df0SVarsha Kaverappa ASSERT_EQ(stat(filePath, &buffer), -1);
2233ca29df0SVarsha Kaverappa ASSERT_EQ(stat(dirPath, &buffer), 0);
2243ca29df0SVarsha Kaverappa }
225360c53f5SSagar Srinivas
TEST(generateStateEffecterOEMPDR,testGoodRequest)226360c53f5SSagar Srinivas TEST(generateStateEffecterOEMPDR, testGoodRequest)
227360c53f5SSagar Srinivas {
228*a31ceb91SManojkiran Eda const AssociatedEntityMap associateMap = {};
229360c53f5SSagar Srinivas auto inPDRRepo = pldm_pdr_init();
23084b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default());
2317c1dc7eaSAndrew Jeffery TestInstanceIdDb instanceIdDb;
232360c53f5SSagar Srinivas auto mockDbusHandler = std::make_unique<MockdBusHandler>();
233360c53f5SSagar Srinivas auto event = sdeventplus::Event::get_default();
234360c53f5SSagar Srinivas std::unique_ptr<CodeUpdate> mockCodeUpdate =
235360c53f5SSagar Srinivas std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
236*a31ceb91SManojkiran Eda std::unique_ptr<MockOemPlatformHandler> mockoemPlatformHandler =
23716c2a0a0SPatrick Williams std::make_unique<MockOemPlatformHandler>(
238*a31ceb91SManojkiran Eda mockDbusHandler.get(), mockCodeUpdate.get(), nullptr, 0x1, 0x9,
239*a31ceb91SManojkiran Eda instanceIdDb, event);
240360c53f5SSagar Srinivas Repo inRepo(inPDRRepo);
241360c53f5SSagar Srinivas
242*a31ceb91SManojkiran Eda EXPECT_CALL(*mockoemPlatformHandler, getAssociateEntityMap())
243*a31ceb91SManojkiran Eda .WillRepeatedly(ReturnRef(associateMap));
244*a31ceb91SManojkiran Eda
2456b1d8830SManojkiran Eda mockoemPlatformHandler->buildOEMPDR(inRepo);
246360c53f5SSagar Srinivas ASSERT_EQ(inRepo.empty(), false);
247360c53f5SSagar Srinivas
248360c53f5SSagar Srinivas pdr_utils::PdrEntry e;
249360c53f5SSagar Srinivas
250360c53f5SSagar Srinivas // Test for effecter number 1, for current boot side state
251360c53f5SSagar Srinivas auto record1 = pdr::getRecordByHandle(inRepo, 1, e);
252360c53f5SSagar Srinivas ASSERT_NE(record1, nullptr);
253360c53f5SSagar Srinivas
254360c53f5SSagar Srinivas pldm_state_effecter_pdr* pdr =
255360c53f5SSagar Srinivas reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
256360c53f5SSagar Srinivas
257360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_handle, 1);
258360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1);
259360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
260360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0);
261360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 16);
262cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
263360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
264360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0);
26568f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1);
266360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_semantic_id, 0);
267360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
268360c53f5SSagar Srinivas ASSERT_EQ(pdr->has_description_pdr, false);
269360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_effecter_count, 1);
270360c53f5SSagar Srinivas state_effecter_possible_states* states =
271360c53f5SSagar Srinivas reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
272360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769);
273360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2);
274360c53f5SSagar Srinivas bitfield8_t bf1{};
275360c53f5SSagar Srinivas bf1.byte = 6;
276360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf1.byte);
277360c53f5SSagar Srinivas
278360c53f5SSagar Srinivas // Test for effecter number 2, for next boot side state
279360c53f5SSagar Srinivas auto record2 = pdr::getRecordByHandle(inRepo, 2, e);
280360c53f5SSagar Srinivas ASSERT_NE(record2, nullptr);
281360c53f5SSagar Srinivas
282360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
283360c53f5SSagar Srinivas
284360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_handle, 2);
285360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1);
286360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
287360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0);
288360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 16);
289cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
290360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
291360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 1);
29268f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1);
293360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_semantic_id, 0);
294360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
295360c53f5SSagar Srinivas ASSERT_EQ(pdr->has_description_pdr, false);
296360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_effecter_count, 1);
297360c53f5SSagar Srinivas states =
298360c53f5SSagar Srinivas reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
299360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769);
300360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2);
301360c53f5SSagar Srinivas bitfield8_t bf2{};
302360c53f5SSagar Srinivas bf2.byte = 6;
303360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf2.byte);
304360c53f5SSagar Srinivas
305360c53f5SSagar Srinivas // Test for effecter number 3, for firmware update state control
306360c53f5SSagar Srinivas auto record3 = pdr::getRecordByHandle(inRepo, 3, e);
307360c53f5SSagar Srinivas ASSERT_NE(record3, nullptr);
308360c53f5SSagar Srinivas
309360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
310360c53f5SSagar Srinivas
311360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_handle, 3);
312360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1);
313360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
314360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0);
315360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 16);
316cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
317360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
318360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0);
31968f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1);
320360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_semantic_id, 0);
321360c53f5SSagar Srinivas ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
322360c53f5SSagar Srinivas ASSERT_EQ(pdr->has_description_pdr, false);
323360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_effecter_count, 1);
324360c53f5SSagar Srinivas states =
325360c53f5SSagar Srinivas reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
326360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32768);
327360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2);
328360c53f5SSagar Srinivas bitfield8_t bf3{};
329360c53f5SSagar Srinivas bf3.byte = 126;
330360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf3.byte);
331360c53f5SSagar Srinivas
332360c53f5SSagar Srinivas pldm_pdr_destroy(inPDRRepo);
333360c53f5SSagar Srinivas }
334360c53f5SSagar Srinivas
TEST(generateStateSensorOEMPDR,testGoodRequest)335360c53f5SSagar Srinivas TEST(generateStateSensorOEMPDR, testGoodRequest)
336360c53f5SSagar Srinivas {
337*a31ceb91SManojkiran Eda const AssociatedEntityMap associateMap = {};
338360c53f5SSagar Srinivas auto inPDRRepo = pldm_pdr_init();
33984b790cbSPatrick Williams sdbusplus::bus_t bus(sdbusplus::bus::new_default());
3407c1dc7eaSAndrew Jeffery TestInstanceIdDb instanceIdDb;
341360c53f5SSagar Srinivas
342360c53f5SSagar Srinivas auto mockDbusHandler = std::make_unique<MockdBusHandler>();
343360c53f5SSagar Srinivas auto event = sdeventplus::Event::get_default();
344360c53f5SSagar Srinivas std::unique_ptr<CodeUpdate> mockCodeUpdate =
345360c53f5SSagar Srinivas std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
346*a31ceb91SManojkiran Eda std::unique_ptr<MockOemPlatformHandler> mockoemPlatformHandler =
34716c2a0a0SPatrick Williams std::make_unique<MockOemPlatformHandler>(
348*a31ceb91SManojkiran Eda mockDbusHandler.get(), mockCodeUpdate.get(), nullptr, 0x1, 0x9,
349*a31ceb91SManojkiran Eda instanceIdDb, event);
350*a31ceb91SManojkiran Eda EXPECT_CALL(*mockoemPlatformHandler, getAssociateEntityMap())
351*a31ceb91SManojkiran Eda .WillRepeatedly(ReturnRef(associateMap));
352360c53f5SSagar Srinivas Repo inRepo(inPDRRepo);
3536b1d8830SManojkiran Eda mockoemPlatformHandler->buildOEMPDR(inRepo);
354360c53f5SSagar Srinivas ASSERT_EQ(inRepo.empty(), false);
355360c53f5SSagar Srinivas
356360c53f5SSagar Srinivas pdr_utils::PdrEntry e;
357360c53f5SSagar Srinivas
358360c53f5SSagar Srinivas // Test for sensor number 1, for current boot side state
3596b1d8830SManojkiran Eda auto record1 = pdr::getRecordByHandle(inRepo, 5, e);
360360c53f5SSagar Srinivas ASSERT_NE(record1, nullptr);
361360c53f5SSagar Srinivas
362360c53f5SSagar Srinivas pldm_state_sensor_pdr* pdr =
363360c53f5SSagar Srinivas reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
364360c53f5SSagar Srinivas
3656b1d8830SManojkiran Eda ASSERT_EQ(pdr->hdr.record_handle, 5);
366360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1);
367360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
368360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0);
369360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 14);
370cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
371360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
372360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0);
37368f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1);
374360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
375360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
376360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_sensor_count, 1);
377360c53f5SSagar Srinivas state_sensor_possible_states* states =
378360c53f5SSagar Srinivas reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
379360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769);
380360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2);
381360c53f5SSagar Srinivas bitfield8_t bf1{};
382360c53f5SSagar Srinivas bf1.byte = 6;
383360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf1.byte);
384360c53f5SSagar Srinivas
385360c53f5SSagar Srinivas // Test for sensor number 2, for next boot side state
3866b1d8830SManojkiran Eda auto record2 = pdr::getRecordByHandle(inRepo, 6, e);
387360c53f5SSagar Srinivas ASSERT_NE(record2, nullptr);
388360c53f5SSagar Srinivas
389360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
390360c53f5SSagar Srinivas
3916b1d8830SManojkiran Eda ASSERT_EQ(pdr->hdr.record_handle, 6);
392360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1);
393360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
394360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0);
395360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 14);
396cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
397360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
398360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 1);
39968f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1);
400360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
401360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
402360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_sensor_count, 1);
403360c53f5SSagar Srinivas states =
404360c53f5SSagar Srinivas reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
405360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32769);
406360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2);
407360c53f5SSagar Srinivas bitfield8_t bf2{};
408360c53f5SSagar Srinivas bf2.byte = 6;
409360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf2.byte);
410360c53f5SSagar Srinivas
411360c53f5SSagar Srinivas // Test for sensor number 3, for firmware update state control
4126b1d8830SManojkiran Eda auto record3 = pdr::getRecordByHandle(inRepo, 7, e);
413360c53f5SSagar Srinivas ASSERT_NE(record3, nullptr);
414360c53f5SSagar Srinivas
415360c53f5SSagar Srinivas pdr = reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
416360c53f5SSagar Srinivas
4176b1d8830SManojkiran Eda ASSERT_EQ(pdr->hdr.record_handle, 7);
418360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.version, 1);
419360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
420360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.record_change_num, 0);
421360c53f5SSagar Srinivas ASSERT_EQ(pdr->hdr.length, 14);
422cc5f1586SManojkiran Eda ASSERT_EQ(pdr->terminus_handle, TERMINUS_HANDLE);
423360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_type, PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE);
424360c53f5SSagar Srinivas ASSERT_EQ(pdr->entity_instance, 0);
42568f5bbdfSPatel-Kamalkumar ASSERT_EQ(pdr->container_id, 1);
426360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_init, PLDM_NO_INIT);
427360c53f5SSagar Srinivas ASSERT_EQ(pdr->sensor_auxiliary_names_pdr, false);
428360c53f5SSagar Srinivas ASSERT_EQ(pdr->composite_sensor_count, 1);
429360c53f5SSagar Srinivas states =
430360c53f5SSagar Srinivas reinterpret_cast<state_sensor_possible_states*>(pdr->possible_states);
431360c53f5SSagar Srinivas ASSERT_EQ(states->state_set_id, 32768);
432360c53f5SSagar Srinivas ASSERT_EQ(states->possible_states_size, 2);
433360c53f5SSagar Srinivas bitfield8_t bf3{};
434360c53f5SSagar Srinivas bf3.byte = 126;
435360c53f5SSagar Srinivas ASSERT_EQ(states->states[0].byte, bf3.byte);
436360c53f5SSagar Srinivas
437360c53f5SSagar Srinivas pldm_pdr_destroy(inPDRRepo);
438360c53f5SSagar Srinivas }
43915ce5a18SKamalkumar Patel
TEST(updateOemDbusPath,testgoodpath)44015ce5a18SKamalkumar Patel TEST(updateOemDbusPath, testgoodpath)
44115ce5a18SKamalkumar Patel {
44215ce5a18SKamalkumar Patel TestInstanceIdDb instanceIdDb;
44315ce5a18SKamalkumar Patel auto mockDbusHandler = std::make_unique<MockdBusHandler>();
44415ce5a18SKamalkumar Patel auto event = sdeventplus::Event::get_default();
44515ce5a18SKamalkumar Patel std::unique_ptr<CodeUpdate> mockCodeUpdate =
44615ce5a18SKamalkumar Patel std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
44715ce5a18SKamalkumar Patel std::unique_ptr<oem_ibm_platform::Handler> mockoemPlatformHandler =
44816c2a0a0SPatrick Williams std::make_unique<MockOemPlatformHandler>(
449*a31ceb91SManojkiran Eda mockDbusHandler.get(), mockCodeUpdate.get(), nullptr, 0x1, 0x9,
450*a31ceb91SManojkiran Eda instanceIdDb, event);
45115ce5a18SKamalkumar Patel std::string dbuspath = "/inventory/system1/chassis1/motherboard1/dcm0";
45215ce5a18SKamalkumar Patel mockoemPlatformHandler->updateOemDbusPaths(dbuspath);
45315ce5a18SKamalkumar Patel EXPECT_EQ(dbuspath, "/inventory/system/chassis/motherboard/dcm0");
45415ce5a18SKamalkumar Patel
45515ce5a18SKamalkumar Patel dbuspath = "/inventory/system/chassis/socket1/motherboard/dcm0";
45615ce5a18SKamalkumar Patel mockoemPlatformHandler->updateOemDbusPaths(dbuspath);
45715ce5a18SKamalkumar Patel EXPECT_EQ(dbuspath, "/inventory/system/chassis/motherboard/dcm0");
45815ce5a18SKamalkumar Patel }
459eb43d6c8SKamalkumar Patel
TEST(SetCoreCount,testgoodpath)460eb43d6c8SKamalkumar Patel TEST(SetCoreCount, testgoodpath)
461eb43d6c8SKamalkumar Patel {
462eb43d6c8SKamalkumar Patel pldm::utils::EntityMaps entityMaps = pldm::hostbmc::utils::parseEntityMap(
463eb43d6c8SKamalkumar Patel "../../oem/ibm/test/entitymap_test.json");
464eb43d6c8SKamalkumar Patel MockdBusHandler mockedDbusUtils;
465eb43d6c8SKamalkumar Patel pldm_entity entities[9]{};
466eb43d6c8SKamalkumar Patel
467eb43d6c8SKamalkumar Patel entities[0].entity_type = 45;
468eb43d6c8SKamalkumar Patel entities[0].entity_container_id = 0;
469eb43d6c8SKamalkumar Patel
470eb43d6c8SKamalkumar Patel entities[1].entity_type = 64;
471eb43d6c8SKamalkumar Patel entities[1].entity_container_id = 1;
472eb43d6c8SKamalkumar Patel
473eb43d6c8SKamalkumar Patel entities[2].entity_type = 67;
474eb43d6c8SKamalkumar Patel entities[2].entity_container_id = 2;
475eb43d6c8SKamalkumar Patel entities[3].entity_type = 67;
476eb43d6c8SKamalkumar Patel entities[3].entity_container_id = 2;
477eb43d6c8SKamalkumar Patel
478eb43d6c8SKamalkumar Patel entities[4].entity_type = 135;
479eb43d6c8SKamalkumar Patel entities[4].entity_container_id = 3;
480eb43d6c8SKamalkumar Patel entities[5].entity_type = 135;
481eb43d6c8SKamalkumar Patel entities[5].entity_container_id = 3;
482eb43d6c8SKamalkumar Patel entities[6].entity_type = 135;
483eb43d6c8SKamalkumar Patel entities[6].entity_container_id = 3;
484eb43d6c8SKamalkumar Patel entities[7].entity_type = 135;
485eb43d6c8SKamalkumar Patel entities[7].entity_container_id = 3;
486eb43d6c8SKamalkumar Patel entities[8].entity_type = 32903;
487eb43d6c8SKamalkumar Patel entities[8].entity_container_id = 3;
488eb43d6c8SKamalkumar Patel
489eb43d6c8SKamalkumar Patel auto tree = pldm_entity_association_tree_init();
490eb43d6c8SKamalkumar Patel
491eb43d6c8SKamalkumar Patel auto l1 = pldm_entity_association_tree_add_entity(
492eb43d6c8SKamalkumar Patel tree, &entities[0], 1, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true,
493eb43d6c8SKamalkumar Patel true, 0xFFFF);
494eb43d6c8SKamalkumar Patel
495eb43d6c8SKamalkumar Patel auto l2 = pldm_entity_association_tree_add_entity(
496eb43d6c8SKamalkumar Patel tree, &entities[1], 1, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
497eb43d6c8SKamalkumar Patel 0xFFFF);
498eb43d6c8SKamalkumar Patel
499eb43d6c8SKamalkumar Patel auto l3a = pldm_entity_association_tree_add_entity(
500eb43d6c8SKamalkumar Patel tree, &entities[2], 0, l2, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
501eb43d6c8SKamalkumar Patel 0xFFFF);
502eb43d6c8SKamalkumar Patel auto l3b = pldm_entity_association_tree_add_entity(
503eb43d6c8SKamalkumar Patel tree, &entities[3], 1, l2, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
504eb43d6c8SKamalkumar Patel 0xFFFF);
505eb43d6c8SKamalkumar Patel
506eb43d6c8SKamalkumar Patel auto l4a = pldm_entity_association_tree_add_entity(
507eb43d6c8SKamalkumar Patel tree, &entities[4], 0, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
508eb43d6c8SKamalkumar Patel 0xFFFF);
509eb43d6c8SKamalkumar Patel auto l4b = pldm_entity_association_tree_add_entity(
510eb43d6c8SKamalkumar Patel tree, &entities[5], 1, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
511eb43d6c8SKamalkumar Patel 0xFFFF);
512eb43d6c8SKamalkumar Patel
513eb43d6c8SKamalkumar Patel auto l5a = pldm_entity_association_tree_add_entity(
514eb43d6c8SKamalkumar Patel tree, &entities[6], 0, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
515eb43d6c8SKamalkumar Patel 0xFFFF);
516eb43d6c8SKamalkumar Patel auto l5b = pldm_entity_association_tree_add_entity(
517eb43d6c8SKamalkumar Patel tree, &entities[7], 1, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
518eb43d6c8SKamalkumar Patel 0xFFFF);
519eb43d6c8SKamalkumar Patel
520eb43d6c8SKamalkumar Patel auto l5c = pldm_entity_association_tree_add_entity(
521eb43d6c8SKamalkumar Patel tree, &entities[8], 0, l5a, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
522eb43d6c8SKamalkumar Patel 0xFFFF);
523eb43d6c8SKamalkumar Patel
524eb43d6c8SKamalkumar Patel auto l5ca = pldm_entity_association_tree_add_entity(
525eb43d6c8SKamalkumar Patel tree, &entities[8], 0, l5b, PLDM_ENTITY_ASSOCIAION_PHYSICAL, true, true,
526eb43d6c8SKamalkumar Patel 0xFFFF);
527eb43d6c8SKamalkumar Patel
528eb43d6c8SKamalkumar Patel pldm::utils::EntityAssociations entityAssociations = {
529eb43d6c8SKamalkumar Patel {l1, l2}, {l2, l3a, l3b}, {l3a, l4a, l4b},
530eb43d6c8SKamalkumar Patel {l3b, l5a, l5b}, {l5a, l5c}, {l5b, l5ca}};
531eb43d6c8SKamalkumar Patel
532eb43d6c8SKamalkumar Patel DBusMapping dbusMapping{"/foo/bar", "xyz.openbmc_project.Foo.Bar",
533eb43d6c8SKamalkumar Patel "propertyName", "uint64_t"};
534eb43d6c8SKamalkumar Patel std::vector<std::string> cpuInterface = {"xyz.openbmc_project.Foo.Bar"};
535eb43d6c8SKamalkumar Patel auto oemMockedUtils =
536eb43d6c8SKamalkumar Patel std::make_unique<MockOemUtilsHandler>(&mockedDbusUtils);
53716c2a0a0SPatrick Williams int coreCount =
53816c2a0a0SPatrick Williams oemMockedUtils->setCoreCount(entityAssociations, entityMaps);
539eb43d6c8SKamalkumar Patel EXPECT_EQ(coreCount, 2);
540eb43d6c8SKamalkumar Patel pldm_entity_association_tree_destroy(tree);
541eb43d6c8SKamalkumar Patel }
542