libpldm : add encode/decode for setStateEffecterStates
This commit implements the decode of the request and encode of
the response for the setStateEffecterStates command.
Change-Id: Idc5f1316386dc650564d9859a63fbeade24d82d8
Signed-off-by: Sampa Misra <sampmisr@in.ibm.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index 35a7395..7211573 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -4,6 +4,7 @@
check_PROGRAMS = \
libpldm_base_test \
+ libpldm_platform_test \
libpldmresponder_base_test
test_cppflags = \
@@ -27,6 +28,16 @@
libpldm_base_test_LDADD = $(top_builddir)/libpldm/libpldm_la-base.o $(CODE_COVERAGE_LIBS)
libpldm_base_test_SOURCES = libpldm_base_test.cpp
+libpldm_platform_test_CPPFLAGS = $(test_cppflags)
+libpldm_platform_test_CXXFLAGS = $(test_cxxflags)
+libpldm_platform_test_LDFLAGS = $(test_ldflags)
+libpldm_platform_test_LDADD = \
+ $(top_builddir)/libpldm/libpldm_la-platform.o \
+ $(top_builddir)/libpldm/libpldm_la-base.o \
+ $(CODE_COVERAGE_LIBS)
+libpldm_platform_test_SOURCES = libpldm_platform_test.cpp
+
+
libpldmresponder_base_test_CPPFLAGS = $(test_cppflags)
libpldmresponder_base_test_CXXFLAGS = $(test_cxxflags)
libpldmresponder_base_test_LDFLAGS = $(test_ldflags)
diff --git a/test/libpldm_platform_test.cpp b/test/libpldm_platform_test.cpp
new file mode 100644
index 0000000..0de82e4
--- /dev/null
+++ b/test/libpldm_platform_test.cpp
@@ -0,0 +1,76 @@
+#include <string.h>
+
+#include <array>
+
+#include "libpldm/base.h"
+#include "libpldm/platform.h"
+
+#include <gtest/gtest.h>
+
+TEST(SetStateEffecterStates, testEncodeResponse)
+{
+ pldm_msg response{};
+ uint8_t completionCode = 0;
+
+ std::array<uint8_t, PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES>
+ responseMsg{};
+
+ response.body.payload = responseMsg.data();
+ response.body.payload_length = responseMsg.size();
+
+ auto rc = encode_set_state_effecter_states_resp(0, PLDM_SUCCESS, &response);
+
+ ASSERT_EQ(rc, PLDM_SUCCESS);
+ ASSERT_EQ(completionCode, response.body.payload[0]);
+}
+
+TEST(SetStateEffecterStates, testGoodDecodeRequest)
+{
+ std::array<uint8_t, PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES> requestMsg{};
+
+ pldm_msg_payload request{};
+ request.payload = requestMsg.data();
+ request.payload_length = requestMsg.size();
+
+ uint16_t effecterId = 0x32;
+ uint8_t compEffecterCnt = 0x2;
+
+ std::array<set_effecter_state_field, 8> stateField{};
+ stateField[0] = {PLDM_REQUEST_SET, 3};
+ stateField[1] = {PLDM_REQUEST_SET, 4};
+
+ uint16_t retEffecterId = 0;
+ uint8_t retCompEffecterCnt = 0;
+
+ std::array<set_effecter_state_field, 8> retStateField{};
+
+ memcpy(request.payload, &effecterId, sizeof(effecterId));
+ memcpy(request.payload + sizeof(effecterId), &compEffecterCnt,
+ sizeof(compEffecterCnt));
+ memcpy(request.payload + sizeof(effecterId) + sizeof(compEffecterCnt),
+ &stateField, sizeof(stateField));
+
+ auto rc = decode_set_state_effecter_states_req(
+ &request, &retEffecterId, &retCompEffecterCnt, retStateField.data());
+
+ ASSERT_EQ(rc, PLDM_SUCCESS);
+ ASSERT_EQ(effecterId, retEffecterId);
+ ASSERT_EQ(retCompEffecterCnt, compEffecterCnt);
+ ASSERT_EQ(retStateField[0].set_request, stateField[0].set_request);
+ ASSERT_EQ(retStateField[0].effecter_state, stateField[0].effecter_state);
+ ASSERT_EQ(retStateField[1].set_request, stateField[1].set_request);
+ ASSERT_EQ(retStateField[1].effecter_state, stateField[1].effecter_state);
+}
+
+TEST(SetStateEffecterStates, testBadDecodeRequest)
+{
+ std::array<uint8_t, PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES> requestMsg{};
+
+ pldm_msg_payload request{};
+ request.payload = requestMsg.data();
+ request.payload_length = requestMsg.size();
+
+ auto rc = decode_set_state_effecter_states_req(&request, NULL, NULL, NULL);
+
+ ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
+}