Implement command GetDateTime
This commit implements the GetDateTime command which is
defined in PLDM Bios Control and Configuration Specification.
Change-Id: Iced21bbad7be07d357b6885b1b1e03b07a3da165
Signed-off-by: Sampa Misra <sampmisr@in.ibm.com>
diff --git a/test/libpldm_bios_test.cpp b/test/libpldm_bios_test.cpp
new file mode 100644
index 0000000..b1771c9
--- /dev/null
+++ b/test/libpldm_bios_test.cpp
@@ -0,0 +1,118 @@
+#include <string.h>
+
+#include <array>
+
+#include "libpldm/base.h"
+#include "libpldm/bios.h"
+
+#include <gtest/gtest.h>
+
+TEST(GetDateTime, testEncodeRequest)
+{
+ pldm_msg request{};
+ request.body.payload = nullptr;
+ request.body.payload_length = 0;
+
+ auto rc = encode_get_date_time_req(0, &request);
+ ASSERT_EQ(rc, PLDM_SUCCESS);
+}
+
+TEST(GetDateTime, testEncodeResponse)
+{
+ uint8_t completionCode = 0;
+ uint8_t seconds = 50;
+ uint8_t minutes = 20;
+ uint8_t hours = 5;
+ uint8_t day = 23;
+ uint8_t month = 11;
+ uint16_t year = 2019;
+
+ std::array<uint8_t, PLDM_GET_DATE_TIME_RESP_BYTES> responseMsg{};
+ pldm_msg response{};
+
+ response.body.payload = responseMsg.data();
+ response.body.payload_length = responseMsg.size();
+
+ auto rc = encode_get_date_time_resp(0, PLDM_SUCCESS, seconds, minutes,
+ hours, day, month, year, &response);
+
+ ASSERT_EQ(rc, PLDM_SUCCESS);
+ ASSERT_EQ(completionCode, response.body.payload[0]);
+
+ ASSERT_EQ(0,
+ memcmp(response.body.payload + sizeof(response.body.payload[0]),
+ &seconds, sizeof(seconds)));
+ ASSERT_EQ(0, memcmp(response.body.payload +
+ sizeof(response.body.payload[0]) + sizeof(seconds),
+ &minutes, sizeof(minutes)));
+ ASSERT_EQ(0,
+ memcmp(response.body.payload + sizeof(response.body.payload[0]) +
+ sizeof(seconds) + sizeof(minutes),
+ &hours, sizeof(hours)));
+ ASSERT_EQ(0,
+ memcmp(response.body.payload + sizeof(response.body.payload[0]) +
+ sizeof(seconds) + sizeof(minutes) + sizeof(hours),
+ &day, sizeof(day)));
+ ASSERT_EQ(0, memcmp(response.body.payload +
+ sizeof(response.body.payload[0]) + sizeof(seconds) +
+ sizeof(minutes) + sizeof(hours) + sizeof(day),
+ &month, sizeof(month)));
+ ASSERT_EQ(0,
+ memcmp(response.body.payload + sizeof(response.body.payload[0]) +
+ sizeof(seconds) + sizeof(minutes) + sizeof(hours) +
+ sizeof(day) + sizeof(month),
+ &year, sizeof(year)));
+}
+
+TEST(GetDateTime, testDecodeResponse)
+{
+ std::array<uint8_t, PLDM_GET_DATE_TIME_RESP_BYTES> responseMsg{};
+ pldm_msg_payload response{};
+ response.payload = responseMsg.data();
+ response.payload_length = responseMsg.size();
+
+ uint8_t completionCode = 0;
+
+ uint8_t seconds = 55;
+ uint8_t minutes = 2;
+ uint8_t hours = 8;
+ uint8_t day = 9;
+ uint8_t month = 7;
+ uint16_t year = 2020;
+
+ uint8_t retSeconds = 0;
+ uint8_t retMinutes = 0;
+ uint8_t retHours = 0;
+ uint8_t retDay = 0;
+ uint8_t retMonth = 0;
+ uint16_t retYear = 0;
+
+ memcpy(response.payload + sizeof(completionCode), &seconds,
+ sizeof(seconds));
+ memcpy(response.payload + sizeof(completionCode) + sizeof(seconds),
+ &minutes, sizeof(minutes));
+ memcpy(response.payload + sizeof(completionCode) + sizeof(seconds) +
+ sizeof(minutes),
+ &hours, sizeof(hours));
+ memcpy(response.payload + sizeof(completionCode) + sizeof(seconds) +
+ sizeof(minutes) + sizeof(hours),
+ &day, sizeof(day));
+ memcpy(response.payload + sizeof(completionCode) + sizeof(seconds) +
+ sizeof(minutes) + sizeof(hours) + sizeof(day),
+ &month, sizeof(month));
+ memcpy(response.payload + sizeof(completionCode) + sizeof(seconds) +
+ sizeof(minutes) + sizeof(hours) + sizeof(day) + sizeof(month),
+ &year, sizeof(year));
+
+ auto rc = decode_get_date_time_resp(&response, &completionCode, &retSeconds,
+ &retMinutes, &retHours, &retDay,
+ &retMonth, &retYear);
+
+ ASSERT_EQ(rc, PLDM_SUCCESS);
+ ASSERT_EQ(seconds, retSeconds);
+ ASSERT_EQ(minutes, retMinutes);
+ ASSERT_EQ(hours, retHours);
+ ASSERT_EQ(day, retDay);
+ ASSERT_EQ(month, retMonth);
+ ASSERT_EQ(year, retYear);
+}