this should do the job
This commit is contained in:
parent
ea6e5d9971
commit
3df1161560
@ -3,6 +3,7 @@
|
|||||||
#include "fsfw/cfdp.h"
|
#include "fsfw/cfdp.h"
|
||||||
#include "mocks/cfdp/FaultHandlerMock.h"
|
#include "mocks/cfdp/FaultHandlerMock.h"
|
||||||
#include "mocks/cfdp/UserMock.h"
|
#include "mocks/cfdp/UserMock.h"
|
||||||
|
|
||||||
TEST_CASE("CFDP Dest Handler", "[cfdp]") {
|
TEST_CASE("CFDP Dest Handler", "[cfdp]") {
|
||||||
using namespace cfdp;
|
using namespace cfdp;
|
||||||
EntityId localId = EntityId(UnsignedByteField<uint16_t>(2));
|
EntityId localId = EntityId(UnsignedByteField<uint16_t>(2));
|
||||||
|
@ -1,6 +1,31 @@
|
|||||||
#include "FilesystemMock.h"
|
#include "FilesystemMock.h"
|
||||||
|
|
||||||
ReturnValue_t FilesystemMock::writeToFile(FileOpParams params, const uint8_t *data) { return 0; }
|
ReturnValue_t FilesystemMock::writeToFile(FileOpParams params, const uint8_t *data) {
|
||||||
|
std::string filename(params.path);
|
||||||
|
auto iter = fileMap.find(filename);
|
||||||
|
if (iter == fileMap.end()) {
|
||||||
|
FileSegmentQueue queue;
|
||||||
|
queue.push(FileWriteInfo(filename, params.offset, data, params.size));
|
||||||
|
FileInfo info;
|
||||||
|
info.fileSegQueue = queue;
|
||||||
|
info.fileRaw.insert(info.fileRaw.end(), data, data + params.size);
|
||||||
|
fileMap.emplace(filename, info);
|
||||||
|
} else {
|
||||||
|
FileInfo& info = iter->second;
|
||||||
|
info.fileSegQueue.push(FileWriteInfo(filename, params.offset, data, params.size));
|
||||||
|
// Easiest case: append data to the end
|
||||||
|
if(params.offset == info.fileRaw.size()) {
|
||||||
|
info.fileRaw.insert(info.fileRaw.end(), data, data + params.size);
|
||||||
|
} else {
|
||||||
|
size_t totalNewLen = params.offset + params.size;
|
||||||
|
if(totalNewLen > info.fileRaw.size()) {
|
||||||
|
info.fileRaw.resize(params.offset + params.size);
|
||||||
|
}
|
||||||
|
std::copy(data, data + params.size, info.fileRaw.begin() + static_cast<unsigned int>(params.offset));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
ReturnValue_t FilesystemMock::readFromFile(FileOpParams fileOpInfo, uint8_t **buffer,
|
ReturnValue_t FilesystemMock::readFromFile(FileOpParams fileOpInfo, uint8_t **buffer,
|
||||||
size_t &readSize, size_t maxSize) {
|
size_t &readSize, size_t maxSize) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,11 +1,33 @@
|
|||||||
#ifndef FSFW_MOCKS_FILESYSTEMMOCK_H
|
#ifndef FSFW_MOCKS_FILESYSTEMMOCK_H
|
||||||
#define FSFW_MOCKS_FILESYSTEMMOCK_H
|
#define FSFW_MOCKS_FILESYSTEMMOCK_H
|
||||||
|
|
||||||
|
#include <queue>
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "fsfw/filesystem.h"
|
#include "fsfw/filesystem.h"
|
||||||
|
|
||||||
class FilesystemMock : public HasFileSystemIF {
|
class FilesystemMock : public HasFileSystemIF {
|
||||||
public:
|
public:
|
||||||
MessageQueueId_t getCommandQueue() const override;
|
struct FileWriteInfo {
|
||||||
|
FileWriteInfo(std::string filename, size_t offset, const uint8_t* data, size_t len)
|
||||||
|
: filename(std::move(filename)), offset(offset) {
|
||||||
|
this->data.insert(this->data.end(), data, data + len);
|
||||||
|
}
|
||||||
|
std::string filename;
|
||||||
|
size_t offset;
|
||||||
|
std::vector<uint8_t> data;
|
||||||
|
};
|
||||||
|
using FileSegmentQueue = std::queue<FileWriteInfo>;
|
||||||
|
|
||||||
|
struct FileInfo {
|
||||||
|
FileSegmentQueue fileSegQueue;
|
||||||
|
std::vector<uint8_t> fileRaw;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<std::string, FileInfo> fileMap;
|
||||||
|
|
||||||
ReturnValue_t writeToFile(FileOpParams params, const uint8_t *data) override;
|
ReturnValue_t writeToFile(FileOpParams params, const uint8_t *data) override;
|
||||||
ReturnValue_t readFromFile(FileOpParams fileOpInfo, uint8_t **buffer, size_t &readSize,
|
ReturnValue_t readFromFile(FileOpParams fileOpInfo, uint8_t **buffer, size_t &readSize,
|
||||||
size_t maxSize) override;
|
size_t maxSize) override;
|
||||||
|
Loading…
Reference in New Issue
Block a user