oem ibm: infrastructure for oem handlers
1. This commit adds the framework for an oem handler
which can be used by specific oem use-cases
for implementing various commands.
2. This commit adds implementation for getStateSensorReadings
and setStateEffecterStates commands for oem state sets.
3. Also adds implementation for inband code update.
Change-Id: Ib38a66ee381dd06b93f6a9313d51de1c23e6ee65
Signed-off-by: Sampa Misra <sampmisr@in.ibm.com>
diff --git a/oem/ibm/test/libpldmresponder_oem_platform_test.cpp b/oem/ibm/test/libpldmresponder_oem_platform_test.cpp
new file mode 100644
index 0000000..6b837dd
--- /dev/null
+++ b/oem/ibm/test/libpldmresponder_oem_platform_test.cpp
@@ -0,0 +1,103 @@
+#include "libpldm/entity.h"
+
+#include "common/utils.hpp"
+#include "libpldmresponder/event_parser.hpp"
+#include "libpldmresponder/pdr.hpp"
+#include "libpldmresponder/pdr_utils.hpp"
+#include "libpldmresponder/platform.hpp"
+#include "oem/ibm/libpldmresponder/inband_code_update.hpp"
+#include "oem/ibm/libpldmresponder/oem_ibm_handler.hpp"
+#include "test/mocked_utils.hpp"
+
+#include <iostream>
+
+using namespace pldm::utils;
+using namespace pldm::responder;
+using namespace pldm::responder::pdr;
+using namespace pldm::responder::pdr_utils;
+using namespace pldm::responder::oem_ibm_platform;
+
+class MockCodeUpdate : public CodeUpdate
+{
+ public:
+ MockCodeUpdate(const pldm::utils::DBusHandler* dBusIntf) :
+ CodeUpdate(dBusIntf)
+ {}
+
+ MOCK_METHOD(void, setVersions, (), (override));
+};
+
+TEST(oemSetStateEffecterStatesHandler, testGoodRequest)
+{
+ uint16_t entityID_ = PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER;
+ uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
+ uint16_t entityInstance_ = 0;
+ uint8_t compSensorCnt_ = 1;
+
+ std::vector<get_sensor_state_field> stateField;
+
+ auto mockDbusHandler = std::make_unique<MockdBusHandler>();
+ std::unique_ptr<CodeUpdate> mockCodeUpdate =
+ std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+
+ oemPlatformHandler = std::make_unique<oem_ibm_platform::Handler>(
+ mockDbusHandler.get(), mockCodeUpdate.get());
+
+ auto rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
+ entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField);
+
+ ASSERT_EQ(rc, PLDM_SUCCESS);
+ ASSERT_EQ(stateField.size(), 1);
+ ASSERT_EQ(stateField[0].event_state, tSideNum);
+ ASSERT_EQ(stateField[0].sensor_op_state, PLDM_SENSOR_ENABLED);
+ ASSERT_EQ(stateField[0].present_state, PLDM_SENSOR_UNKNOWN);
+ ASSERT_EQ(stateField[0].previous_state, PLDM_SENSOR_UNKNOWN);
+
+ entityInstance_ = 1;
+
+ std::vector<get_sensor_state_field> stateField1;
+ rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
+ entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
+ ASSERT_EQ(stateField1.size(), 1);
+ ASSERT_EQ(stateField1[0].event_state, tSideNum);
+
+ entityInstance_ = 2;
+ rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
+ entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
+ ASSERT_EQ(stateField1[0].event_state, PLDM_SENSOR_UNKNOWN);
+
+ entityID_ = 40;
+ stateSetId_ = 50;
+ rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
+ entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
+ ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
+
+ entityID_ = PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER;
+ entityInstance_ = 0;
+ stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
+ compSensorCnt_ = 1;
+
+ std::vector<set_effecter_state_field> setEffecterStateField;
+ setEffecterStateField.push_back({PLDM_REQUEST_SET, pSideNum});
+
+ rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
+ entityID_, entityInstance_, stateSetId_, compSensorCnt_,
+ setEffecterStateField);
+ ASSERT_EQ(rc, PLDM_SUCCESS);
+
+ entityInstance_ = 2;
+ rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
+ entityID_, entityInstance_, stateSetId_, compSensorCnt_,
+ setEffecterStateField);
+
+ ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
+
+ entityID_ = 34;
+ stateSetId_ = 99;
+ entityInstance_ = 0;
+ rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
+ entityID_, entityInstance_, stateSetId_, compSensorCnt_,
+ setEffecterStateField);
+ ASSERT_EQ(rc, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE);
+}