Add unit test for ReadFileIntoMemory and WriteFileFromMemory

The code is refactored to support mocking the transferDataHost API.
Unit testcases are added for ReadFileIntoMemory and WriteFileFromMemory
responder implementations.

Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>

Change-Id: Iab9966a7aea602cc2abcdf386f077001368e66d9
diff --git a/libpldmresponder/file_io.cpp b/libpldmresponder/file_io.cpp
index ed043c6..06d683b 100644
--- a/libpldmresponder/file_io.cpp
+++ b/libpldmresponder/file_io.cpp
@@ -40,8 +40,8 @@
 
 constexpr auto xdmaDev = "/dev/xdma";
 
-int transferDataHost(const fs::path& path, uint32_t offset, uint32_t length,
-                     uint64_t address, bool upstream)
+int DMA::transferDataHost(const fs::path& path, uint32_t offset,
+                          uint32_t length, uint64_t address, bool upstream)
 {
     static const size_t pageSize = getpagesize();
     uint32_t numPages = length / pageSize;
@@ -126,38 +126,6 @@
 
 } // namespace dma
 
-void transferAll(uint8_t command, fs::path& path, uint32_t offset,
-                 uint32_t length, uint64_t address, bool upstream,
-                 pldm_msg* response)
-{
-    uint32_t origLength = length;
-
-    while (length > dma::maxSize)
-    {
-        auto rc = dma::transferDataHost(path, offset, dma::maxSize, address,
-                                        upstream);
-        if (rc < 0)
-        {
-            encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, response);
-            return;
-        }
-
-        offset += dma::maxSize;
-        length -= dma::maxSize;
-        address += dma::maxSize;
-    }
-
-    auto rc = dma::transferDataHost(path, offset, length, address, upstream);
-    if (rc < 0)
-    {
-        encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, response);
-        return;
-    }
-
-    encode_rw_file_memory_resp(0, command, PLDM_SUCCESS, origLength, response);
-    return;
-}
-
 void readFileIntoMemory(const uint8_t* request, size_t payloadLength,
                         pldm_msg* response)
 {
@@ -209,8 +177,10 @@
         return;
     }
 
-    transferAll(PLDM_READ_FILE_INTO_MEMORY, path, offset, length, address, true,
-                response);
+    using namespace dma;
+    DMA intf;
+    transferAll<DMA>(&intf, PLDM_READ_FILE_INTO_MEMORY, path, offset, length,
+                     address, true, response);
 }
 
 void writeFileFromMemory(const uint8_t* request, size_t payloadLength,
@@ -259,8 +229,10 @@
         return;
     }
 
-    transferAll(PLDM_WRITE_FILE_FROM_MEMORY, path, offset, length, address,
-                false, response);
+    using namespace dma;
+    DMA intf;
+    transferAll<DMA>(&intf, PLDM_WRITE_FILE_FROM_MEMORY, path, offset, length,
+                     address, false, response);
 }
 
 } // namespace responder