blob: cdd22e68628f06803c277952bc5a8dd6ce686456 [file] [log] [blame]
#include "libpldmresponder/base.hpp"
#include <string.h>
#include <array>
#include "libpldm/base.h"
#include <gtest/gtest.h>
using namespace pldm::responder;
TEST(GetPLDMTypes, testGoodRequest)
{
pldm_msg_payload request{};
pldm_msg response{};
std::array<uint8_t, PLDM_GET_TYPES_RESP_BYTES> responseMsg{};
response.body.payload = responseMsg.data();
response.body.payload_length = responseMsg.size();
getPLDMTypes(&request, &response);
// Only base type supported at the moment
ASSERT_EQ(response.body.payload[0], 0);
ASSERT_EQ(response.body.payload[1], 1);
ASSERT_EQ(response.body.payload[2], 0);
}
TEST(GetPLDMCommands, testGoodRequest)
{
// Only base type supported at the moment, and commands -
// GetPLDMTypes, GetPLDMCommands
pldm_msg response{};
std::array<uint8_t, PLDM_GET_COMMANDS_RESP_BYTES> responseMsg{};
response.body.payload = responseMsg.data();
response.body.payload_length = responseMsg.size();
pldm_msg_payload request{};
std::array<uint8_t, 5> requestPayload{};
request.payload = requestPayload.data();
request.payload_length = requestPayload.size();
getPLDMCommands(&request, &response);
ASSERT_EQ(response.body.payload[0], 0);
ASSERT_EQ(response.body.payload[1], 48); // 48 = 0b110000
ASSERT_EQ(response.body.payload[2], 0);
}
TEST(GetPLDMCommands, testBadRequest)
{
pldm_msg response{};
std::array<uint8_t, PLDM_GET_COMMANDS_RESP_BYTES> responseMsg{};
response.body.payload = responseMsg.data();
response.body.payload_length = responseMsg.size();
pldm_msg_payload request{};
std::array<uint8_t, 5> requestPayload{};
request.payload = requestPayload.data();
request.payload[0] = 0xFF;
request.payload_length = requestPayload.size();
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;
ver32_t 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)));
}
TEST(GetPLDMVersion, testBadRequest)
{
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{};
std::array<uint8_t, (PLDM_GET_VERSION_REQ_BYTES - 3)> requestPayloadSmall{};
request.body.payload = requestPayloadSmall.data();
request.body.payload_length = requestPayloadSmall.size();
uint8_t pldmType = 7;
uint32_t transferHandle = 0x0;
uint8_t flag = PLDM_GET_FIRSTPART;
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], PLDM_ERROR_INVALID_LENGTH);
request.body.payload = requestPayload.data();
request.body.payload_length = requestPayload.size();
rc = encode_get_version_req(0, transferHandle, flag, pldmType, &request);
ASSERT_EQ(0, rc);
getPLDMVersion(&(request.body), &response);
ASSERT_EQ(response.body.payload[0], PLDM_ERROR_INVALID_PLDM_TYPE);
}