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