/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ #include #include #include "msgbuf.h" #include static constexpr size_t oemMetaDecodeWriteFileIoReqBytes = 9; static constexpr size_t postCodeSize = 4; static constexpr size_t invalidDataSize = 0; TEST(DecodeOemMetaFileIoReq, testGoodDecodeRequest) { struct pldm_msgbuf _ctx; struct pldm_msgbuf* ctx = &_ctx; uint8_t fileHandle = 0x00; int32_t dataLengthLE = 0x04; uint8_t postCode[4] = {0x93, 0xe0, 0x00, 0xea}; int rc; constexpr auto hdrSize = sizeof(pldm_msg_hdr); uint8_t buf[hdrSize + sizeof(uint8_t) + sizeof(int32_t) + (postCodeSize * sizeof(uint8_t))] = {}; ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, &buf[hdrSize], sizeof(buf) - hdrSize), 0); pldm_msgbuf_insert_uint8(ctx, fileHandle); pldm_msgbuf_insert_int32(ctx, dataLengthLE); rc = pldm_msgbuf_insert_array_uint8(ctx, sizeof(postCode), postCode, sizeof(postCode)); ASSERT_EQ(rc, PLDM_SUCCESS); std::array retDataField{}; uint8_t retfileHandle = 0; uint32_t retFileDataCnt = 0; auto request = reinterpret_cast(buf); rc = decode_oem_meta_file_io_req(request, sizeof(buf) - hdrSize, &retfileHandle, &retFileDataCnt, retDataField.data()); ASSERT_EQ(rc, PLDM_SUCCESS); EXPECT_EQ(retfileHandle, fileHandle); EXPECT_EQ(retFileDataCnt, dataLengthLE); EXPECT_EQ(retDataField[0], postCode[0]); EXPECT_EQ(retDataField[1], postCode[1]); EXPECT_EQ(retDataField[2], postCode[2]); EXPECT_EQ(retDataField[3], postCode[3]); } TEST(DecodeOemMetaFileIoReq, testInvalidFieldsDecodeRequest) { std::array requestMsg{}; auto request = reinterpret_cast(requestMsg.data()); auto rc = decode_oem_meta_file_io_req(request, requestMsg.size(), NULL, NULL, NULL); EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA); } TEST(DecodeOemMetaFileIoReq, testInvalidLengthDecodeRequest) { uint8_t retfileHandle = 0; uint32_t retFileDataCnt = 0; uint8_t buf[1] = {}; std::array retDataField{}; auto request = reinterpret_cast(buf); auto rc = decode_oem_meta_file_io_req(request, 0, &retfileHandle, &retFileDataCnt, retDataField.data()); EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH); } TEST(DecodeOemMetaFileIoReq, testInvalidDataRequest) { uint8_t buf[1] = {}; uint8_t retfileHandle = 0; uint32_t retFileDataCnt = 0; std::array retDataField{}; auto request = reinterpret_cast(buf); auto rc = decode_oem_meta_file_io_req(request, sizeof(buf), &retfileHandle, &retFileDataCnt, retDataField.data()); EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA); }