diff --git a/tests/oem/meta/fileio.cpp b/tests/oem/meta/fileio.cpp
index a40e43b..de004a4 100644
--- a/tests/oem/meta/fileio.cpp
+++ b/tests/oem/meta/fileio.cpp
@@ -7,6 +7,7 @@
 
 #include "msgbuf.h"
 
+#include "gmock/gmock.h"
 #include <gtest/gtest.h>
 
 #ifdef LIBPLDM_API_TESTING
@@ -158,3 +159,108 @@
     EXPECT_EQ(rc, -EOVERFLOW);
 }
 #endif
+
+#ifdef LIBPLDM_API_TESTING
+TEST(EncodeOemMetaFileIoReadResp, testGoodEncodeReadAttrResponse)
+{
+    int rc;
+
+    alignas(pldm_oem_meta_file_io_read_resp) unsigned char
+        decodedBuf[sizeof(pldm_oem_meta_file_io_read_resp)];
+    auto* resp = new (decodedBuf) pldm_oem_meta_file_io_read_resp;
+    resp->version = sizeof(struct pldm_oem_meta_file_io_read_resp);
+    resp->completion_code = PLDM_SUCCESS;
+    resp->handle = 1;
+    resp->option = PLDM_OEM_META_FILE_IO_READ_ATTR;
+    resp->length = 0;
+    resp->info.attr.size = 0x1284;
+    resp->info.attr.crc32 = 0xab715432;
+
+    constexpr size_t payloadLen = PLDM_OEM_META_FILE_IO_READ_RESP_MIN_SIZE +
+                                  PLDM_OEM_META_FILE_IO_READ_ATTR_INFO_LENGTH;
+    alignas(pldm_msg) unsigned char
+        encodedBuf[sizeof(pldm_msg_hdr) + payloadLen] = {};
+    auto* msg = new (encodedBuf) pldm_msg;
+
+    rc = encode_oem_meta_file_io_read_resp(
+        0, resp, sizeof(pldm_oem_meta_file_io_read_resp), msg, payloadLen);
+    ASSERT_EQ(rc, 0);
+
+    EXPECT_THAT(encodedBuf, testing::ElementsAreArray(
+                                {0x00, 0x3f, 0x03, 0x00, 0x01, 0x00, 0x00, 0x84,
+                                 0x12, 0x32, 0x54, 0x71, 0xab}));
+}
+#endif
+
+#ifdef LIBPLDM_API_TESTING
+TEST(EncodeOemMetaFileIoReadResp, testGoodEncodeReadDataResponse)
+{
+    constexpr static const uint8_t readbuf[4] = {0x23, 0xca, 0x84, 0x9d};
+    int rc;
+
+    alignas(pldm_oem_meta_file_io_read_resp) unsigned char
+        decodedBuf[sizeof(pldm_oem_meta_file_io_read_resp) + sizeof(readbuf)];
+    auto* resp = new (decodedBuf) pldm_oem_meta_file_io_read_resp;
+    resp->version = sizeof(struct pldm_oem_meta_file_io_read_resp);
+    resp->completion_code = PLDM_SUCCESS;
+    resp->handle = 1;
+    resp->option = PLDM_OEM_META_FILE_IO_READ_DATA;
+    resp->length = 4;
+    resp->info.data.transferFlag = 0x05;
+    resp->info.data.offset = 0x75cd;
+    memcpy(pldm_oem_meta_file_io_read_resp_data(resp), readbuf,
+           sizeof(readbuf));
+
+    constexpr size_t payloadLen = PLDM_OEM_META_FILE_IO_READ_RESP_MIN_SIZE +
+                                  PLDM_OEM_META_FILE_IO_READ_DATA_INFO_LENGTH +
+                                  sizeof(readbuf);
+    alignas(pldm_msg) unsigned char
+        encodedBuf[sizeof(pldm_msg_hdr) + payloadLen] = {};
+    auto* msg = new (encodedBuf) pldm_msg;
+
+    rc = encode_oem_meta_file_io_read_resp(
+        0, resp, sizeof(pldm_oem_meta_file_io_read_resp) + sizeof(readbuf), msg,
+        payloadLen);
+    ASSERT_EQ(rc, 0);
+
+    EXPECT_THAT(encodedBuf, testing::ElementsAreArray(
+                                {0x00, 0x3f, 0x03, 0x00, 0x01, 0x01, 0x04, 0x05,
+                                 0xcd, 0x75, 0x23, 0xca, 0x84, 0x9d}));
+}
+#endif
+
+#ifdef LIBPLDM_API_TESTING
+TEST(EncodeOemMetaFileIoReadResp, testInvalidFieldsEncodeResponse)
+{
+    struct pldm_msg msg = {};
+
+    auto rc = encode_oem_meta_file_io_read_resp(
+        0, NULL, 0, &msg, PLDM_OEM_META_FILE_IO_READ_RESP_MIN_SIZE);
+    EXPECT_EQ(rc, -EINVAL);
+}
+#endif
+
+#ifdef LIBPLDM_API_TESTING
+TEST(EncodeOemMetaFileIoReadResp, testInvalidLengthEncodeResponse)
+{
+    struct pldm_oem_meta_file_io_read_resp resp = {};
+    struct pldm_msg msg = {};
+
+    auto rc =
+        encode_oem_meta_file_io_read_resp(0, &resp, sizeof(resp), &msg, 0);
+    EXPECT_EQ(rc, -EOVERFLOW);
+}
+#endif
+
+#ifdef LIBPLDM_API_TESTING
+TEST(EncodeOemMetaFileIoReadResp, testInvalidDataEncodeResponse)
+{
+    struct pldm_oem_meta_file_io_read_resp resp = {};
+    struct pldm_msg msg = {};
+
+    auto rc = encode_oem_meta_file_io_read_resp(
+        0, &resp, sizeof(resp), &msg,
+        PLDM_OEM_META_FILE_IO_READ_RESP_MIN_SIZE - 1);
+    EXPECT_EQ(rc, -EOVERFLOW);
+}
+#endif
