basic host FS unittests
fsfw/fsfw/pipeline/pr-development This commit looks good Details

This commit is contained in:
Robin Müller 2022-08-11 10:10:05 +02:00
parent e796e025b6
commit 8aaabc5d73
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
6 changed files with 51 additions and 7 deletions

View File

@ -132,6 +132,9 @@ class HasFileSystemIF {
* @return * @return
*/ */
virtual ReturnValue_t createDirectory(FilesystemParams params, bool createParentDirs) = 0; virtual ReturnValue_t createDirectory(FilesystemParams params, bool createParentDirs) = 0;
virtual ReturnValue_t createDirectory(FilesystemParams params) {
return createDirectory(params, false);
}
/** /**
* @brief Generic function to remove a directory * @brief Generic function to remove a directory
@ -143,10 +146,11 @@ class HasFileSystemIF {
return removeDirectory(params, false); return removeDirectory(params, false);
} }
virtual ReturnValue_t renameFile(const char* oldPath, char* newPath) { virtual ReturnValue_t rename(const char* oldPath, const char* newPath) {
return rename(oldPath, newPath, nullptr); return rename(oldPath, newPath, nullptr);
} }
virtual ReturnValue_t rename(const char* oldPath, char* newPath, FileSystemArgsIF* args) = 0; virtual ReturnValue_t rename(const char* oldPath, const char* newPath,
FileSystemArgsIF* args) = 0;
}; };
#endif /* FSFW_MEMORY_HASFILESYSTEMIF_H_ */ #endif /* FSFW_MEMORY_HASFILESYSTEMIF_H_ */

View File

@ -132,7 +132,8 @@ ReturnValue_t HostFilesystem::removeDirectory(FilesystemParams params, bool dele
return HasFileSystemIF::GENERIC_DIR_ERROR; return HasFileSystemIF::GENERIC_DIR_ERROR;
} }
ReturnValue_t HostFilesystem::rename(const char *oldPath_, char *newPath_, FileSystemArgsIF *args) { ReturnValue_t HostFilesystem::rename(const char *oldPath_, const char *newPath_,
FileSystemArgsIF *args) {
if (oldPath_ == nullptr or newPath_ == nullptr) { if (oldPath_ == nullptr or newPath_ == nullptr) {
return HasReturnvaluesIF::RETURN_FAILED; return HasReturnvaluesIF::RETURN_FAILED;
} }

View File

@ -15,11 +15,15 @@ class HostFilesystem : public HasFileSystemIF {
ReturnValue_t removeFile(const char *path, FileSystemArgsIF *args) override; ReturnValue_t removeFile(const char *path, FileSystemArgsIF *args) override;
ReturnValue_t createDirectory(FilesystemParams params, bool createParentDirs) override; ReturnValue_t createDirectory(FilesystemParams params, bool createParentDirs) override;
ReturnValue_t removeDirectory(FilesystemParams params, bool deleteRecurively) override; ReturnValue_t removeDirectory(FilesystemParams params, bool deleteRecurively) override;
ReturnValue_t rename(const char *oldPath, char *newPath, FileSystemArgsIF *args) override; ReturnValue_t rename(const char *oldPath, const char *newPath, FileSystemArgsIF *args) override;
std::error_code errorCode; std::error_code errorCode;
using HasFileSystemIF::createDirectory;
using HasFileSystemIF::createFile; using HasFileSystemIF::createFile;
using HasFileSystemIF::removeDirectory;
using HasFileSystemIF::removeFile; using HasFileSystemIF::removeFile;
using HasFileSystemIF::rename;
private: private:
}; };
#endif // FSFW_HAL_HOSTFILESYSTEM_H #endif // FSFW_HAL_HOSTFILESYSTEM_H

View File

@ -1,17 +1,22 @@
#include <catch2/catch_test_macros.hpp> #include <catch2/catch_test_macros.hpp>
#include <filesystem>
#include "fsfw_hal/host/HostFilesystem.h" #include "fsfw_hal/host/HostFilesystem.h"
#include <filesystem>
TEST_CASE("Host Filesystem", "[hal][host]") { TEST_CASE("Host Filesystem", "[hal][host]") {
namespace fs = std::filesystem; namespace fs = std::filesystem;
auto hostFs = HostFilesystem(); auto hostFs = HostFilesystem();
auto tmpDir = fs::temp_directory_path(); auto tmpDir = fs::temp_directory_path();
fs::path file0 = tmpDir / "hello.txt";
fs::path file1 = tmpDir / "hello.txt";
REQUIRE_NOTHROW(fs::remove(file0));
REQUIRE_NOTHROW(fs::remove(file1));
SECTION("Create file") { SECTION("Create file") {
fs::path file = tmpDir / "hello.txt"; fs::path file = tmpDir / "hello.txt";
FilesystemParams params(file.c_str()); FilesystemParams params(file.c_str());
REQUIRE(hostFs.createFile(params) == result::OK); REQUIRE(hostFs.createFile(params) == result::OK);
CHECK(fs::is_regular_file(file));
REQUIRE(fs::exists(file)); REQUIRE(fs::exists(file));
REQUIRE_NOTHROW(fs::remove(file)); REQUIRE_NOTHROW(fs::remove(file));
} }
@ -20,9 +25,38 @@ TEST_CASE("Host Filesystem", "[hal][host]") {
fs::path file = tmpDir / "hello.txt"; fs::path file = tmpDir / "hello.txt";
FilesystemParams params(file.c_str()); FilesystemParams params(file.c_str());
REQUIRE(hostFs.createFile(params) == result::OK); REQUIRE(hostFs.createFile(params) == result::OK);
CHECK(fs::is_regular_file(file));
REQUIRE(fs::exists(file)); REQUIRE(fs::exists(file));
REQUIRE(hostFs.removeFile(file.c_str()) == result::OK); REQUIRE(hostFs.removeFile(file.c_str()) == result::OK);
REQUIRE(not fs::exists(file)); REQUIRE(not fs::exists(file));
} }
SECTION("Create Directory") {
fs::path dirPath = tmpDir / "test_dir";
FilesystemParams params(dirPath.c_str());
REQUIRE(hostFs.createDirectory(params) == result::OK);
CHECK(fs::is_directory(dirPath));
REQUIRE(fs::exists(dirPath));
REQUIRE_NOTHROW(fs::remove(dirPath));
}
SECTION("Remove Directory") {
fs::path dirPath = tmpDir / "test_dir";
FilesystemParams params(dirPath.c_str());
REQUIRE(hostFs.createDirectory(params) == result::OK);
REQUIRE(fs::exists(dirPath));
REQUIRE(hostFs.removeDirectory(params) == result::OK);
REQUIRE(not fs::exists(dirPath));
}
SECTION("Rename File") {
fs::path file = tmpDir / "hello.txt";
fs::path newFile = tmpDir / "hello2.txt";
FilesystemParams params(file.c_str());
REQUIRE(hostFs.createFile(params) == result::OK);
CHECK(fs::is_regular_file(file));
REQUIRE(fs::exists(file));
REQUIRE(hostFs.rename(file.c_str(), newFile.c_str()) == result::OK);
REQUIRE_NOTHROW(fs::remove(newFile));
}
} }

View File

@ -64,7 +64,8 @@ ReturnValue_t FilesystemMock::removeDirectory(FilesystemParams params, bool dele
return HasReturnvaluesIF::RETURN_OK; return HasReturnvaluesIF::RETURN_OK;
} }
ReturnValue_t FilesystemMock::rename(const char *oldPath, char *newPath, FileSystemArgsIF *args) { ReturnValue_t FilesystemMock::rename(const char *oldPath, const char *newPath,
FileSystemArgsIF *args) {
renameQueue.push(RenameInfo(oldPath, newPath)); renameQueue.push(RenameInfo(oldPath, newPath));
return HasReturnvaluesIF::RETURN_OK; return HasReturnvaluesIF::RETURN_OK;
} }

View File

@ -60,7 +60,7 @@ class FilesystemMock : public HasFileSystemIF {
ReturnValue_t removeFile(const char *path, FileSystemArgsIF *args) override; ReturnValue_t removeFile(const char *path, FileSystemArgsIF *args) override;
ReturnValue_t createDirectory(FilesystemParams params, bool createParentDirs) override; ReturnValue_t createDirectory(FilesystemParams params, bool createParentDirs) override;
ReturnValue_t removeDirectory(FilesystemParams params, bool deleteRecurively) override; ReturnValue_t removeDirectory(FilesystemParams params, bool deleteRecurively) override;
ReturnValue_t rename(const char *oldPath, char *newPath, FileSystemArgsIF *args) override; ReturnValue_t rename(const char *oldPath, const char *newPath, FileSystemArgsIF *args) override;
void reset(); void reset();