blob: c6a44208249246cd113fc2cb7251df68dc2370a0 [file] [log] [blame]
#include <string.h>
#include <array>
#include "libpldm/base.h"
#include "libpldm/fru.h"
#include <gtest/gtest.h>
TEST(GetFruRecordTableMetadata, testGoodEncodeRequest)
{
std::array<uint8_t, sizeof(pldm_msg_hdr)> requestMsg{};
auto requestPtr = reinterpret_cast<pldm_msg*>(requestMsg.data());
auto rc = encode_get_fru_record_table_metadata_req(0, requestPtr);
ASSERT_EQ(rc, PLDM_SUCCESS);
ASSERT_EQ(requestPtr->hdr.request, PLDM_REQUEST);
ASSERT_EQ(requestPtr->hdr.instance_id, 0);
ASSERT_EQ(requestPtr->hdr.type, PLDM_FRU);
ASSERT_EQ(requestPtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
}
TEST(GetFruRecordTableMetadata, testBadEncodeRequest)
{
auto rc = encode_get_fru_record_table_metadata_req(0, NULL);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
}
TEST(GetFruRecordTableMetadata, testGoodDecodeResponse)
{
std::vector<uint8_t> responseMsg(
sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES);
auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
responsePtr->payload);
responsePtr->hdr.request = PLDM_RESPONSE;
responsePtr->hdr.instance_id = 0;
responsePtr->hdr.type = PLDM_FRU;
responsePtr->hdr.command = PLDM_GET_FRU_RECORD_TABLE_METADATA;
response->completion_code = PLDM_SUCCESS;
response->fru_data_major_version = 0x12;
response->fru_data_minor_version = 0x21;
response->fru_table_maximum_size = 0x1234ABCD;
response->fru_table_length = 0x56781234;
response->total_record_set_identifiers = 0x34EF;
response->total_table_records = 0xEEEF;
response->checksum = 0x6543FA71;
uint8_t completion_code = 0xFF;
uint8_t fru_data_major_version = 0x00;
uint8_t fru_data_minor_version = 0x00;
uint32_t fru_table_maximum_size = 0x00000000;
uint32_t fru_table_length = 0x00000000;
uint16_t total_record_set_identifiers = 0x0000;
uint16_t total_table_records = 0x0000;
uint32_t checksum = 0x00000000;
auto rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
&fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
&total_record_set_identifiers, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_SUCCESS);
ASSERT_EQ(completion_code, PLDM_SUCCESS);
ASSERT_EQ(fru_data_major_version, 0x12);
ASSERT_EQ(fru_data_minor_version, 0x21);
ASSERT_EQ(fru_table_maximum_size, 0x1234ABCD);
ASSERT_EQ(fru_table_length, 0x56781234);
ASSERT_EQ(total_record_set_identifiers, 0x34EF);
ASSERT_EQ(total_table_records, 0xEEEF);
ASSERT_EQ(checksum, 0x6543FA71);
response->fru_data_major_version = 0x00;
response->fru_data_minor_version = 0x00;
response->fru_table_maximum_size = 0x00000000;
response->fru_table_length = 0x00000000;
response->total_record_set_identifiers = 0x0000;
response->total_table_records = 0x0000;
response->checksum = 0x00000000;
fru_data_major_version = 0x00;
fru_data_minor_version = 0x00;
fru_table_maximum_size = 0x00000000;
fru_table_length = 0x00000000;
total_record_set_identifiers = 0x0000;
total_table_records = 0x0000;
checksum = 0x00000000;
response->completion_code = PLDM_ERROR_INVALID_LENGTH;
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
&fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
&total_record_set_identifiers, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_SUCCESS);
ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
ASSERT_EQ(responsePtr->hdr.instance_id, 0);
ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
ASSERT_EQ(completion_code, PLDM_ERROR_INVALID_LENGTH);
ASSERT_EQ(fru_data_major_version, 0x00);
ASSERT_EQ(fru_data_minor_version, 0x00);
ASSERT_EQ(fru_table_maximum_size, 0x00000000);
ASSERT_EQ(fru_table_length, 0x00000000);
ASSERT_EQ(total_record_set_identifiers, 0x0000);
ASSERT_EQ(total_table_records, 0x0000);
ASSERT_EQ(checksum, 0x00000000);
}
TEST(GetFruRecordTableMetadata, testBadDecodeResponse)
{
std::vector<uint8_t> responseMsg(
sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES);
auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
size_t payload_length = responseMsg.size() - sizeof(pldm_msg_hdr);
auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
responsePtr->payload);
response->completion_code = PLDM_SUCCESS;
response->fru_data_major_version = 0x12;
response->fru_data_minor_version = 0x21;
response->fru_table_maximum_size = 0x1234ABCD;
response->fru_table_length = 0x56781234;
response->total_record_set_identifiers = 0x34EF;
response->total_table_records = 0xEEEF;
response->checksum = 0x6543FA71;
uint8_t completion_code = 0xFF;
uint8_t fru_data_major_version = 0x00;
uint8_t fru_data_minor_version = 0x00;
uint32_t fru_table_maximum_size = 0x00000000;
uint32_t fru_table_length = 0x00000000;
uint16_t total_record_set_identifiers = 0x0000;
uint16_t total_table_records = 0x0000;
uint32_t checksum = 0x00000000;
auto rc = decode_get_fru_record_table_metadata_resp(
responsePtr, PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES + 2,
&completion_code, &fru_data_major_version, &fru_data_minor_version,
&fru_table_maximum_size, &fru_table_length,
&total_record_set_identifiers, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, NULL,
&fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
&total_record_set_identifiers, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
NULL, &fru_table_maximum_size, &fru_table_length,
&total_record_set_identifiers, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
&fru_data_minor_version, NULL, &fru_table_length,
&total_record_set_identifiers, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
&fru_data_minor_version, &fru_table_maximum_size, NULL,
&total_record_set_identifiers, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
&fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
NULL, &total_table_records, &checksum);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
&fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
&total_record_set_identifiers, NULL, &checksum);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
rc = decode_get_fru_record_table_metadata_resp(
responsePtr, payload_length, &completion_code, &fru_data_major_version,
&fru_data_minor_version, &fru_table_maximum_size, &fru_table_length,
&total_record_set_identifiers, &total_table_records, NULL);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
}
TEST(GetFruRecordTableMetadata, testGoodEncodeResponse)
{
std::array<uint8_t, sizeof(pldm_msg_hdr) +
PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES>
responseMsg{};
auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
responsePtr->hdr.request = PLDM_RESPONSE;
responsePtr->hdr.instance_id = 0;
responsePtr->hdr.type = PLDM_FRU;
responsePtr->hdr.command = PLDM_GET_FRU_RECORD_TABLE_METADATA;
uint8_t completion_code = PLDM_SUCCESS;
uint8_t fru_data_major_version = 0x12;
uint8_t fru_data_minor_version = 0x21;
uint32_t fru_table_maximum_size = 0x1234ABCD;
uint32_t fru_table_length = 0x56781234;
uint16_t total_record_set_identifiers = 0x34EF;
uint16_t total_table_records = 0xEEEF;
uint32_t checksum = 0x6543FA71;
auto rc = encode_get_fru_record_table_metadata_resp(
0, completion_code, fru_data_major_version, fru_data_minor_version,
fru_table_maximum_size, fru_table_length, total_record_set_identifiers,
total_table_records, checksum, responsePtr);
auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
responsePtr->payload);
ASSERT_EQ(rc, PLDM_SUCCESS);
ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
ASSERT_EQ(responsePtr->hdr.instance_id, 0);
ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
ASSERT_EQ(response->completion_code, PLDM_SUCCESS);
ASSERT_EQ(response->fru_data_major_version, 0x12);
ASSERT_EQ(response->fru_data_minor_version, 0x21);
ASSERT_EQ(response->fru_table_maximum_size, 0x1234ABCD);
ASSERT_EQ(response->fru_table_length, 0x56781234);
ASSERT_EQ(response->total_record_set_identifiers, 0x34EF);
ASSERT_EQ(response->total_table_records, 0xEEEF);
ASSERT_EQ(response->checksum, 0x6543FA71);
response->fru_data_major_version = 0;
response->fru_data_major_version = 0x00;
response->fru_data_minor_version = 0x00;
response->fru_table_maximum_size = 0x00000000;
response->fru_table_length = 0x00000000;
response->total_record_set_identifiers = 0x0000;
response->total_table_records = 0x0000;
response->checksum = 0x00000000;
completion_code = PLDM_ERROR_INVALID_DATA;
rc = encode_get_fru_record_table_metadata_resp(
0, completion_code, fru_data_major_version, fru_data_minor_version,
fru_table_maximum_size, fru_table_length, total_record_set_identifiers,
total_table_records, checksum, responsePtr);
ASSERT_EQ(rc, PLDM_SUCCESS);
ASSERT_EQ(responsePtr->hdr.request, PLDM_RESPONSE);
ASSERT_EQ(responsePtr->hdr.instance_id, 0);
ASSERT_EQ(responsePtr->hdr.type, PLDM_FRU);
ASSERT_EQ(responsePtr->hdr.command, PLDM_GET_FRU_RECORD_TABLE_METADATA);
ASSERT_EQ(completion_code, PLDM_ERROR_INVALID_DATA);
ASSERT_EQ(response->fru_data_major_version, 0x00);
ASSERT_EQ(response->fru_data_minor_version, 0x00);
ASSERT_EQ(response->fru_table_maximum_size, 0x00000000);
ASSERT_EQ(response->fru_table_length, 0x00000000);
ASSERT_EQ(response->total_record_set_identifiers, 0x0000);
ASSERT_EQ(response->total_table_records, 0x0000);
ASSERT_EQ(response->checksum, 0x00000000);
}
TEST(GetFruRecordTableMetadata, testBadEncodeResponse)
{
std::array<uint8_t, sizeof(pldm_msg_hdr) +
PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES>
responseMsg{};
auto responsePtr = reinterpret_cast<pldm_msg*>(responseMsg.data());
uint8_t completion_code = PLDM_SUCCESS;
uint8_t fru_data_major_version = 0x12;
uint8_t fru_data_minor_version = 0x21;
uint32_t fru_table_maximum_size = 0x1234ABCD;
uint32_t fru_table_length = 0x56781234;
uint16_t total_record_set_identifiers = 0x34EF;
uint16_t total_table_records = 0xEEEF;
uint32_t checksum = 0x6543FA71;
auto rc = encode_get_fru_record_table_metadata_resp(
0, completion_code, fru_data_major_version, fru_data_minor_version,
fru_table_maximum_size, fru_table_length, total_record_set_identifiers,
total_table_records, checksum, NULL);
auto response = reinterpret_cast<pldm_get_fru_record_table_metadata_resp*>(
responsePtr->payload);
ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
ASSERT_EQ(completion_code, PLDM_SUCCESS);
ASSERT_EQ(response->fru_data_major_version, 0x00);
ASSERT_EQ(response->fru_data_minor_version, 0x00);
ASSERT_EQ(response->fru_table_maximum_size, 0x00000000);
ASSERT_EQ(response->fru_table_length, 0x00000000);
ASSERT_EQ(response->total_record_set_identifiers, 0x0000);
ASSERT_EQ(response->total_table_records, 0x0000);
ASSERT_EQ(response->checksum, 0x00000000);
}