Implement GetPLDMVersion command
This commit implements the GetPLDMVersion which is required
as part of the base PLDM support to know the version of a
given PLDM type.
Change-Id: I1bcbd938c5b6833f62e0ee2f474b04d76b6970d9
Signed-off-by: Sampa Misra <sampmisr@in.ibm.com>
diff --git a/test/libpldmresponder_base_test.cpp b/test/libpldmresponder_base_test.cpp
index 2bd6ebd..a34d80f 100644
--- a/test/libpldmresponder_base_test.cpp
+++ b/test/libpldmresponder_base_test.cpp
@@ -57,3 +57,41 @@
getPLDMCommands(&request, &response);
ASSERT_EQ(response.body.payload[0], PLDM_ERROR_INVALID_PLDM_TYPE);
}
+
+TEST(GetPLDMVersion, testGoodRequest)
+{
+ pldm_msg response{};
+ std::array<uint8_t, PLDM_GET_VERSION_RESP_BYTES> responseMsg{};
+ response.body.payload = responseMsg.data();
+ response.body.payload_length = responseMsg.size();
+ pldm_msg request{};
+ std::array<uint8_t, PLDM_GET_VERSION_REQ_BYTES> requestPayload{};
+ request.body.payload = requestPayload.data();
+ request.body.payload_length = requestPayload.size();
+
+ uint8_t pldmType = PLDM_BASE;
+ uint32_t transferHandle = 0x0;
+ uint8_t flag = PLDM_GET_FIRSTPART;
+ uint8_t retFlag = PLDM_START_AND_END;
+ struct pldm_version version = {0xF1, 0xF0, 0xF0, 0x00};
+
+ auto rc =
+ encode_get_version_req(0, transferHandle, flag, pldmType, &request);
+
+ ASSERT_EQ(0, rc);
+
+ getPLDMVersion(&(request.body), &response);
+
+ ASSERT_EQ(response.body.payload[0], 0);
+ ASSERT_EQ(0,
+ memcmp(response.body.payload + sizeof(response.body.payload[0]),
+ &transferHandle, sizeof(transferHandle)));
+ ASSERT_EQ(0,
+ memcmp(response.body.payload + sizeof(response.body.payload[0]) +
+ sizeof(transferHandle),
+ &retFlag, sizeof(flag)));
+ ASSERT_EQ(0,
+ memcmp(response.body.payload + sizeof(response.body.payload[0]) +
+ sizeof(transferHandle) + sizeof(flag),
+ &version, sizeof(version)));
+}