| /* |
| * 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); |
| } |