diff --git a/tests/meson.build b/tests/meson.build
index 76ca6ee..dba7870 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -45,6 +45,12 @@
   ]
 endif
 
+if get_option('oem-meta').allowed()
+  tests += [
+    'oem/meta/libpldm_fileio_test',
+  ]
+endif
+
 test_include_dirs = [ libpldm_include_dir, include_directories('../src') ]
 
 foreach t : tests
diff --git a/tests/oem/meta/libpldm_fileio_test.cpp b/tests/oem/meta/libpldm_fileio_test.cpp
new file mode 100644
index 0000000..663ed65
--- /dev/null
+++ b/tests/oem/meta/libpldm_fileio_test.cpp
@@ -0,0 +1,92 @@
+/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
+#include <endian.h>
+#include <libpldm/oem/meta/file_io.h>
+
+#include "msgbuf.h"
+
+#include <gtest/gtest.h>
+
+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};
+
+    constexpr auto hdrSize = sizeof(pldm_msg_hdr);
+
+    uint8_t buf[hdrSize + sizeof(uint8_t) + sizeof(int32_t) +
+                (postCodeSize * sizeof(uint8_t))] = {};
+
+    pldm_msgbuf_init(ctx, 0, &buf[hdrSize], sizeof(buf) - hdrSize);
+
+    pldm_msgbuf_insert_uint8(ctx, fileHandle);
+    pldm_msgbuf_insert_int32(ctx, dataLengthLE);
+    pldm_msgbuf_insert_array_uint8(ctx, postCode, sizeof(postCode));
+
+    std::array<uint8_t, oemMetaDecodeWriteFileIoReqBytes> retDataField{};
+
+    uint8_t retfileHandle = 0;
+    uint32_t retFileDataCnt = 0;
+
+    auto request = reinterpret_cast<pldm_msg*>(buf);
+
+    auto rc = decode_oem_meta_file_io_req(request, sizeof(buf) - hdrSize,
+                                          &retfileHandle, &retFileDataCnt,
+                                          retDataField.data());
+
+    EXPECT_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<uint8_t, oemMetaDecodeWriteFileIoReqBytes> requestMsg{};
+    auto request = reinterpret_cast<pldm_msg*>(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<uint8_t, oemMetaDecodeWriteFileIoReqBytes> retDataField{};
+
+    auto request = reinterpret_cast<pldm_msg*>(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<uint8_t, invalidDataSize> retDataField{};
+
+    auto request = reinterpret_cast<pldm_msg*>(buf);
+
+    auto rc = decode_oem_meta_file_io_req(request, sizeof(buf), &retfileHandle,
+                                          &retFileDataCnt, retDataField.data());
+
+    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
+}
\ No newline at end of file
