blob: 97fe16cacc40070822f3e41506b526f19735034e [file] [log] [blame]
/*
* Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "pldm-oem-google.h"
#include "gtest/gtest.h"
class PlatformOEMGoogleDecodeEventMessageReqTest : public ::testing::Test
{
protected:
// Set up any necessary resources before running each test.
void SetUp() override
{
// Initialize any resources here if needed.
}
// Clean up any allocated resources after running each test.
void TearDown() override
{
// Clean up any resources here if needed.
}
};
// Define test cases.
TEST_F(PlatformOEMGoogleDecodeEventMessageReqTest, NullEventData)
{
// When event_data is null, the function should return
// PLDM_EVENT_OEM_GOOGLE_ID_UNDEFINED.
uint16_t result = platform_oem_google_decode_event_message_req(
nullptr, 0, nullptr, nullptr);
EXPECT_EQ(result, PLDM_EVENT_OEM_GOOGLE_ID_UNDEFINED);
}
TEST_F(PlatformOEMGoogleDecodeEventMessageReqTest, ShortEventData)
{
// When event_data is too short, the function should return
// PLDM_EVENT_OEM_GOOGLE_ID_UNDEFINED.
uint8_t event_data[2] = {0x00, 0x01}; // Example short event data.
size_t event_data_length = sizeof(event_data);
uint16_t result = platform_oem_google_decode_event_message_req(
event_data, event_data_length, nullptr, nullptr);
EXPECT_EQ(result, PLDM_EVENT_OEM_GOOGLE_ID_UNDEFINED);
}
TEST_F(PlatformOEMGoogleDecodeEventMessageReqTest, InValidIANA)
{
// Create valid event data and check the function's behavior.
struct pldm_event_oem_google_event_hdr header
{
{0x01, 0x02, 0x03}, // invalid google IANA
0x1234, // googleOEMEventID any uint16_t value
};
uint8_t event_data[sizeof(header) * 2];
memcpy(event_data, &header, sizeof(header));
size_t event_data_length = sizeof(event_data);
size_t oem_event_data_offset = 0;
size_t oem_event_data_len = 0;
uint16_t result = platform_oem_google_decode_event_message_req(
event_data, event_data_length, &oem_event_data_offset,
&oem_event_data_len);
EXPECT_EQ(result, PLDM_EVENT_OEM_GOOGLE_ID_UNDEFINED);
// oem_event_data_offset and oem_even_data_len intact
EXPECT_EQ(oem_event_data_offset, 0);
EXPECT_EQ(oem_event_data_len, 0);
}
TEST_F(PlatformOEMGoogleDecodeEventMessageReqTest, InValidIANAEndian)
{
// Create valid event data and check the function's behavior.
struct pldm_event_oem_google_event_hdr header
{
{0xDE, 0xD4, 0x00}, // google IANA in little endian
0x1234, // googleOEMEventID any uint16_t value
};
uint8_t event_data[sizeof(header) * 2];
memcpy(event_data, &header, sizeof(header));
size_t event_data_length = sizeof(event_data);
size_t oem_event_data_offset = 0;
size_t oem_event_data_len = 0;
uint16_t result = platform_oem_google_decode_event_message_req(
event_data, event_data_length, &oem_event_data_offset,
&oem_event_data_len);
EXPECT_EQ(result, PLDM_EVENT_OEM_GOOGLE_ID_UNDEFINED);
// oem_event_data_offset and oem_even_data_len intact
EXPECT_EQ(oem_event_data_offset, 0);
EXPECT_EQ(oem_event_data_len, 0);
}
TEST_F(PlatformOEMGoogleDecodeEventMessageReqTest, ValidEventData)
{
// Create valid event data and check the function's behavior.
struct pldm_event_oem_google_event_hdr header
{
{0x00, 0xD4, 0xDE}, // google IANA
0x1234, // googleOEMEventID any uint16_t value
};
uint8_t event_data[sizeof(header) * 2];
uint8_t oem_event_data[sizeof(header)];
memset(event_data, 0xDD, sizeof(event_data));
memcpy(event_data, &header, sizeof(header));
memcpy(oem_event_data, event_data + sizeof(header), sizeof(header));
size_t event_data_length = sizeof(event_data);
size_t oem_event_data_offset = 0;
size_t oem_event_data_len = 0;
uint16_t result = platform_oem_google_decode_event_message_req(
event_data, event_data_length, &oem_event_data_offset,
&oem_event_data_len);
EXPECT_EQ(result, header.googleOEMEventID);
EXPECT_EQ(oem_event_data_offset, sizeof(header));
EXPECT_EQ(oem_event_data_len, sizeof(header));
EXPECT_EQ(memcmp(event_data + oem_event_data_offset, oem_event_data,
oem_event_data_len),
0);
}
class PLDMEventOEMGoogleSOCResetMETest : public ::testing::Test
{};
TEST_F(PLDMEventOEMGoogleSOCResetMETest, NullOEMEventData)
{
// When oem_event_data is null, the function should return nullptr.
const uint8_t* oem_event_data = nullptr;
size_t oem_event_data_len = 0;
const struct pldm_event_oem_google_soc_reset_me* result =
pldm_event_oem_google_soc_reset_me_msg(oem_event_data,
oem_event_data_len);
EXPECT_EQ(result, nullptr);
}
TEST_F(PLDMEventOEMGoogleSOCResetMETest, ShortOEMEventData)
{
// When oem_event_data is too short, the function should return nullptr.
uint8_t
oem_event_data[sizeof(struct pldm_event_oem_google_soc_reset_me) - 1];
size_t oem_event_data_len = sizeof(oem_event_data);
memset(oem_event_data, 0, sizeof(oem_event_data));
const struct pldm_event_oem_google_soc_reset_me* result =
pldm_event_oem_google_soc_reset_me_msg(oem_event_data,
oem_event_data_len);
EXPECT_EQ(result, nullptr);
}
TEST_F(PLDMEventOEMGoogleSOCResetMETest, ValidOEMEventData)
{
// Create valid oem_event_data and check the function's behavior.
struct pldm_event_oem_google_soc_reset_me data;
// Initialize data with valid values here.
memset(&data, 0, sizeof(data));
const uint8_t* oem_event_data = reinterpret_cast<const uint8_t*>(&data);
size_t oem_event_data_len = sizeof(data);
EXPECT_EQ(oem_event_data_len, 16);
const struct pldm_event_oem_google_soc_reset_me* result =
pldm_event_oem_google_soc_reset_me_msg(oem_event_data,
oem_event_data_len);
EXPECT_EQ(result, &data);
}
TEST_F(PLDMEventOEMGoogleSOCResetMETest, InvalidDescLen)
{
// Create oem_event_data with an invalid descLen value.
struct pldm_event_oem_google_soc_reset_me data;
// Initialize data with valid values here.
data.descLen = sizeof(struct pldm_event_oem_google_soc_reset_me) +
1; // Invalid descLen
const uint8_t* oem_event_data = reinterpret_cast<const uint8_t*>(&data);
size_t oem_event_data_len = sizeof(data);
const struct pldm_event_oem_google_soc_reset_me* result =
pldm_event_oem_google_soc_reset_me_msg(oem_event_data,
oem_event_data_len);
EXPECT_EQ(result, nullptr);
}