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_fileio_test.cpp b/oem/ibm/test/libpldmresponder_fileio_test.cpp
index e425a9a..65998a7 100644
--- a/oem/ibm/test/libpldmresponder_fileio_test.cpp
+++ b/oem/ibm/test/libpldmresponder_fileio_test.cpp
@@ -222,7 +222,8 @@
&address, sizeof(address));
// Pass invalid payload length
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFileIntoMemory(request, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
@@ -252,7 +253,8 @@
// Initialise the file table with 2 valid file handles 0 & 1.
auto& table = buildFileTable(fileTableConfig.c_str());
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFileIntoMemory(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_INVALID_FILE_HANDLE);
@@ -283,7 +285,8 @@
using namespace pldm::filetable;
auto& table = buildFileTable(fileTableConfig.c_str());
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFileIntoMemory(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_DATA_OUT_OF_RANGE);
@@ -314,7 +317,8 @@
using namespace pldm::filetable;
auto& table = buildFileTable(fileTableConfig.c_str());
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFileIntoMemory(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
@@ -348,7 +352,8 @@
using namespace pldm::filetable;
auto& table = buildFileTable(fileTableConfig.c_str());
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFileIntoMemory(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
@@ -376,7 +381,8 @@
&address, sizeof(address));
// Pass invalid payload length
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.writeFileFromMemory(request, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
@@ -411,7 +417,8 @@
// Initialise the file table with 2 valid file handles 0 & 1.
auto& table = buildFileTable(fileTableConfig.c_str());
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.writeFileFromMemory(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_INVALID_FILE_HANDLE);
@@ -443,7 +450,8 @@
// Initialise the file table with 2 valid file handles 0 & 1.
auto& table = buildFileTable(TestFileTable::fileTableConfig.c_str());
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.writeFileFromMemory(request, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_DATA_OUT_OF_RANGE);
@@ -512,7 +520,8 @@
request->operation_flag = opFlag;
request->table_type = type;
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.getFileTable(requestMsgPtr, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_SUCCESS);
@@ -535,7 +544,8 @@
auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
// Pass invalid command payload length
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.getFileTable(request, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
@@ -557,7 +567,8 @@
request->operation_flag = opFlag;
request->table_type = type;
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.getFileTable(requestMsgPtr, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_INVALID_FILE_TABLE_TYPE);
@@ -585,7 +596,8 @@
auto& table = buildFileTable(fileTableConfig.c_str());
// Invalid payload length
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFile(requestMsgPtr, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
@@ -635,7 +647,8 @@
std::vector<char> buffer(length);
stream.read(buffer.data(), length);
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto responseMsg = handler.readFile(requestMsgPtr, payload_length);
auto response = reinterpret_cast<pldm_read_file_resp*>(
responseMsg.data() + sizeof(pldm_msg_hdr));
@@ -685,7 +698,8 @@
request->length = length;
// Invalid payload length
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.writeFile(requestMsgPtr, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
@@ -732,7 +746,8 @@
request->length = length;
memcpy(request->file_data, fileData.data(), fileData.size());
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto responseMsg = handler.writeFile(requestMsgPtr, payload_length);
auto response = reinterpret_cast<pldm_read_file_resp*>(
responseMsg.data() + sizeof(pldm_msg_hdr));
@@ -765,7 +780,8 @@
request->length = 17;
request->address = 0;
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.writeFileByTypeFromMemory(req, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -833,7 +849,8 @@
request->length = 17;
request->address = 0;
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFileByTypeIntoMemory(req, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
struct pldm_read_write_file_by_type_memory_resp* resp =
@@ -871,7 +888,8 @@
request->offset = 0;
request->length = 13;
- oem_ibm::Handler handler;
+ std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
+ oem_ibm::Handler handler(oemPlatformHandler.get());
auto response = handler.readFileByType(req, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
struct pldm_read_write_file_by_type_resp* resp =