From 562250100cd0c7daa3d2fb02e59b13be3bdf978c Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Fri, 22 Dec 2017 13:17:45 +0100 Subject: [PATCH] fix test --- common/cpp/include/common/file_info.h | 2 +- common/cpp/include/system_wrappers/io.h | 12 ++++----- .../cpp/include/system_wrappers/system_io.h | 16 +++++------ common/cpp/src/system_io.cpp | 20 +++++++------- common/cpp/src/system_io_linux.cpp | 14 +++++----- common/cpp/src/system_io_windows.cpp | 14 +++++----- examples/worker/process_folder/CMakeLists.txt | 8 ++++++ .../worker/process_folder/check_windows.bat | 2 +- .../read_file_content/cleanup_windows.bat | 1 + worker/api/cpp/src/folder_data_broker.cpp | 2 +- worker/api/cpp/src/folder_data_broker.h | 2 +- .../api/cpp/unittests/test_folder_broker.cpp | 27 +++++++++---------- 12 files changed, 64 insertions(+), 56 deletions(-) diff --git a/common/cpp/include/common/file_info.h b/common/cpp/include/common/file_info.h index da182e342..88bd4f4af 100644 --- a/common/cpp/include/common/file_info.h +++ b/common/cpp/include/common/file_info.h @@ -14,7 +14,7 @@ struct FileInfo { uint64_t size{0}; }; -typedef std::unique_ptr<uint8_t[]> FileData; +using FileData = std::unique_ptr<uint8_t[]>; } diff --git a/common/cpp/include/system_wrappers/io.h b/common/cpp/include/system_wrappers/io.h index 8370b7b9d..88bb23570 100644 --- a/common/cpp/include/system_wrappers/io.h +++ b/common/cpp/include/system_wrappers/io.h @@ -26,15 +26,15 @@ IOErrors IOErrorFromErrno(); class IO { public: - virtual FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) = 0; + virtual FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept = 0; - virtual int open(const char* __file, int __oflag) = 0; - virtual int close(int __fd) = 0; - virtual int64_t read(int __fd, void* buf, size_t count) = 0; - virtual int64_t write(int __fd, const void* __buf, size_t __n) = 0; + virtual int open(const char* __file, int __oflag) const noexcept = 0; + virtual int close(int __fd) const noexcept = 0; + virtual int64_t read(int __fd, void* buf, size_t count) const noexcept = 0; + virtual int64_t write(int __fd, const void* __buf, size_t __n) const noexcept = 0; // this is not standard function - to be implemented differently in windows and linux - virtual std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) = 0; + virtual std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const = 0; }; } diff --git a/common/cpp/include/system_wrappers/system_io.h b/common/cpp/include/system_wrappers/system_io.h index 666fa7e53..6c2c62646 100644 --- a/common/cpp/include/system_wrappers/system_io.h +++ b/common/cpp/include/system_wrappers/system_io.h @@ -7,16 +7,16 @@ namespace hidra2 { class SystemIO final : public IO { public: - FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) override; - int open(const char* __file, int __oflag) override; - int close(int __fd) override; - int64_t read(int __fd, void* buf, size_t count) override; - int64_t write(int __fd, const void* __buf, size_t __n) override; - std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override; + FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept override; + int open(const char* __file, int __oflag) const noexcept override; + int close(int __fd) const noexcept override; + int64_t read(int __fd, void* buf, size_t count) const noexcept override; + int64_t write(int __fd, const void* __buf, size_t __n) const noexcept override; + std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override; private: - void ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err); + void ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err) const noexcept; void CollectFileInformationRecursivly(const std::string& path, - std::vector<FileInfo>& files, IOErrors* err); + std::vector<FileInfo>* files, IOErrors* err) const; }; } diff --git a/common/cpp/src/system_io.cpp b/common/cpp/src/system_io.cpp index 66001ea13..6ee383e0c 100644 --- a/common/cpp/src/system_io.cpp +++ b/common/cpp/src/system_io.cpp @@ -29,7 +29,7 @@ IOErrors IOErrorFromErrno() { return err; } -void SystemIO::ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err) { +void SystemIO::ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* err) const noexcept { uint64_t totalbytes = 0; int64_t readbytes = 0; do { @@ -42,7 +42,7 @@ void SystemIO::ReadWholeFile(int fd, uint8_t* array, uint64_t fsize, IOErrors* e } } -FileData SystemIO::GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) { +FileData SystemIO::GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept { int fd = open(fname.c_str(), O_RDONLY); *err = IOErrorFromErrno(); if (*err != IOErrors::kNoError) { @@ -72,28 +72,28 @@ FileData SystemIO::GetDataFromFile(const std::string& fname, uint64_t fsize, IOE return data; } -void SortFileList(std::vector<FileInfo>& file_list) { - std::sort(file_list.begin(), file_list.end(), +void SortFileList(std::vector<FileInfo>* file_list) { + std::sort(file_list->begin(), file_list->end(), [](FileInfo const & a, FileInfo const & b) { return a.modify_date < b.modify_date; }); } -void StripBasePath(const std::string& folder, std::vector<FileInfo>& file_list) { +void StripBasePath(const std::string& folder, std::vector<FileInfo>* file_list) { auto n_erase = folder.size() + 1; - for (auto& file : file_list) { + for (auto& file : *file_list) { file.relative_path.erase(0, n_erase); } } -std::vector<FileInfo> SystemIO::FilesInFolder(const std::string& folder, IOErrors* err) { +std::vector<FileInfo> SystemIO::FilesInFolder(const std::string& folder, IOErrors* err) const { std::vector<FileInfo> files{}; - CollectFileInformationRecursivly(folder, files, err); + CollectFileInformationRecursivly(folder, &files, err); if (*err != IOErrors::kNoError) { return {}; } - StripBasePath(folder, files); - SortFileList(files); + StripBasePath(folder, &files); + SortFileList(&files); return files; } diff --git a/common/cpp/src/system_io_linux.cpp b/common/cpp/src/system_io_linux.cpp index a932a90d3..3c1bc09bb 100644 --- a/common/cpp/src/system_io_linux.cpp +++ b/common/cpp/src/system_io_linux.cpp @@ -73,7 +73,7 @@ FileInfo GetFileInfo(const string& path, const string& name, IOErrors* err) { } void ProcessFileEntity(const struct dirent* entity, const std::string& path, - std::vector<FileInfo>& files, IOErrors* err) { + std::vector<FileInfo>* files, IOErrors* err) { *err = IOErrors::kNoError; if (entity->d_type != DT_REG) { @@ -85,11 +85,11 @@ void ProcessFileEntity(const struct dirent* entity, const std::string& path, return; } - files.push_back(file_info); + files->push_back(file_info); } void SystemIO::CollectFileInformationRecursivly(const std::string& path, - std::vector<FileInfo>& files, IOErrors* err) { + std::vector<FileInfo>* files, IOErrors* err) const { auto dir = opendir((path).c_str()); if (dir == nullptr) { *err = IOErrorFromErrno(); @@ -113,19 +113,19 @@ void SystemIO::CollectFileInformationRecursivly(const std::string& path, } -int64_t SystemIO::read(int __fd, void* buf, size_t count) { +int64_t SystemIO::read(int __fd, void* buf, size_t count) const noexcept { return (int64_t) ::read(__fd, buf, count); } -int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) { +int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) const noexcept { return (int64_t) ::write(__fd, __buf, __n); } -int SystemIO::open(const char* __file, int __oflag) { +int SystemIO::open(const char* __file, int __oflag) const noexcept { return ::open(__file, __oflag); } -int SystemIO::close(int __fd) { +int SystemIO::close(int __fd) const noexcept { return ::close(__fd); } diff --git a/common/cpp/src/system_io_windows.cpp b/common/cpp/src/system_io_windows.cpp index 4b2d113ed..5653ce87c 100644 --- a/common/cpp/src/system_io_windows.cpp +++ b/common/cpp/src/system_io_windows.cpp @@ -59,7 +59,7 @@ bool IsDirectory(const WIN32_FIND_DATA f) { } void ProcessFileEntity(const WIN32_FIND_DATA f, const std::string& path, - std::vector<FileInfo>& files, IOErrors* err) { + std::vector<FileInfo>* files, IOErrors* err) { *err = IOErrors::kNoError; if (f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { @@ -74,12 +74,12 @@ void ProcessFileEntity(const WIN32_FIND_DATA f, const std::string& path, file_info.base_name = f.cFileName; file_info.relative_path = path; - files.push_back(file_info); + files->push_back(file_info); } void SystemIO::CollectFileInformationRecursivly(const std::string& path, - std::vector<FileInfo>& files, IOErrors* err) { + std::vector<FileInfo>* files, IOErrors* err) const { WIN32_FIND_DATA find_data; HANDLE handle = FindFirstFile((path + "\\*.*").c_str(), &find_data); if (handle == INVALID_HANDLE_VALUE) { @@ -107,21 +107,21 @@ void SystemIO::CollectFileInformationRecursivly(const std::string& path, } -int64_t SystemIO::read(int __fd, void* buf, size_t count) { +int64_t SystemIO::read(int __fd, void* buf, size_t count) const noexcept { return (int64_t) _read(__fd, buf, (unsigned int) count); } -int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) { +int64_t SystemIO::write(int __fd, const void* __buf, size_t __n) const noexcept { return (int64_t) _write(__fd, __buf, (unsigned int) __n); } -int SystemIO::open(const char* __file, int __oflag) { +int SystemIO::open(const char* __file, int __oflag) const noexcept { int fd; errno = _sopen_s(&fd, __file, __oflag, _SH_DENYNO, _S_IREAD | _S_IWRITE); return fd; } -int SystemIO::close(int __fd) { +int SystemIO::close(int __fd) const noexcept { return ::_close(__fd); } diff --git a/examples/worker/process_folder/CMakeLists.txt b/examples/worker/process_folder/CMakeLists.txt index 9fe64b422..91328be81 100644 --- a/examples/worker/process_folder/CMakeLists.txt +++ b/examples/worker/process_folder/CMakeLists.txt @@ -11,6 +11,14 @@ set(SOURCE_FILES process_folder.cpp) add_executable(${TARGET_NAME} ${SOURCE_FILES}) target_link_libraries(${TARGET_NAME} common worker-api ${CMAKE_THREAD_LIBS_INIT}) set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) +#use expression generator to get rid of VS adding Debug/Release folders +set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY + ${CMAKE_CURRENT_BINARY_DIR}$<$<CONFIG:Debug>:> + ) + +get_target_property(VAR ${TARGET_NAME} RUNTIME_OUTPUT_DIRECTORY) +message (STATUS ${VAR}) + if (CMAKE_COMPILER_IS_GNUCXX) set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS_DEBUG "--coverage") endif() diff --git a/examples/worker/process_folder/check_windows.bat b/examples/worker/process_folder/check_windows.bat index 0735194dd..f03ab5c70 100644 --- a/examples/worker/process_folder/check_windows.bat +++ b/examples/worker/process_folder/check_windows.bat @@ -1,6 +1,6 @@ mkdir test echo "" > test/1 -worker_processfolder test | findstr "Processed 1 file(s)" +.\worker_processfolder test | findstr "Processed 1 file(s)" rmdir /S /Q test diff --git a/tests/system_io/read_file_content/cleanup_windows.bat b/tests/system_io/read_file_content/cleanup_windows.bat index df76d9336..7766233db 100644 --- a/tests/system_io/read_file_content/cleanup_windows.bat +++ b/tests/system_io/read_file_content/cleanup_windows.bat @@ -1,2 +1,3 @@ rmdir /S /Q test +icacls file_noaccess /grant:r users:D del file_noaccess diff --git a/worker/api/cpp/src/folder_data_broker.cpp b/worker/api/cpp/src/folder_data_broker.cpp index bc7fc88a6..a6c263c44 100644 --- a/worker/api/cpp/src/folder_data_broker.cpp +++ b/worker/api/cpp/src/folder_data_broker.cpp @@ -52,7 +52,7 @@ WorkerErrorCode FolderDataBroker::Connect() { return MapIOError(io_err); } -WorkerErrorCode FolderDataBroker::CanGetData(FileInfo* info, FileData* data, int nfile) const { +WorkerErrorCode FolderDataBroker::CanGetData(FileInfo* info, FileData* data, int nfile) const noexcept { if (!is_connected_) { return WorkerErrorCode::kSourceNotConnected; } diff --git a/worker/api/cpp/src/folder_data_broker.h b/worker/api/cpp/src/folder_data_broker.h index 27d960172..f5b622bda 100644 --- a/worker/api/cpp/src/folder_data_broker.h +++ b/worker/api/cpp/src/folder_data_broker.h @@ -23,7 +23,7 @@ class FolderDataBroker final : public hidra2::DataBroker { int current_file_; std::string base_path_; std::vector<FileInfo> filelist_; - WorkerErrorCode CanGetData(FileInfo* info, FileData* data, int nfile) const; + WorkerErrorCode CanGetData(FileInfo* info, FileData* data, int nfile) const noexcept; std::mutex mutex_; }; diff --git a/worker/api/cpp/unittests/test_folder_broker.cpp b/worker/api/cpp/unittests/test_folder_broker.cpp index 1942f1198..7da3645ce 100644 --- a/worker/api/cpp/unittests/test_folder_broker.cpp +++ b/worker/api/cpp/unittests/test_folder_broker.cpp @@ -1,6 +1,5 @@ #include <gmock/gmock.h> #include "gtest/gtest.h" -using ::testing::AtLeast; #include "worker/data_broker.h" #include "system_wrappers/io.h" @@ -16,7 +15,7 @@ using hidra2::IOErrors; using hidra2::FileInfo; using hidra2::FileData; - +using ::testing::AtLeast; using ::testing::Eq; using ::testing::Ne; using ::testing::Test; @@ -37,29 +36,29 @@ TEST(FolderDataBroker, SetCorrectIO) { class FakeIO: public IO { public: - virtual uint8_t* GetDataFromFileProxy(const std::string& fname, uint64_t fsize, IOErrors* err) { + virtual uint8_t* GetDataFromFileProxy(const std::string& fname, uint64_t fsize, IOErrors* err) const { *err = IOErrors::kNoError; return nullptr; }; - FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err)override { + FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept override { return FileData(GetDataFromFileProxy(fname, fsize, err)); }; - int open(const char* __file, int __oflag)override { + int open(const char* __file, int __oflag) const noexcept override { return 0; }; - int close(int __fd)override { + int close(int __fd)const noexcept override { return 0; }; - int64_t read(int __fd, void* buf, size_t count)override { + int64_t read(int __fd, void* buf, size_t count) const noexcept override { return 0; }; - int64_t write(int __fd, const void* __buf, size_t __n) override { + int64_t write(int __fd, const void* __buf, size_t __n) const noexcept override { return 0; }; - std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override { + std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override { *err = IOErrors::kNoError; std::vector<FileInfo> file_infos; FileInfo fi; @@ -77,7 +76,7 @@ class FakeIO: public IO { class IOFolderNotFound: public FakeIO { public: - std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override { + std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override { *err = IOErrors::kFileNotFound; return {}; } @@ -85,7 +84,7 @@ class IOFolderNotFound: public FakeIO { class IOFodlerUnknownError: public FakeIO { public: - std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override { + std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override { *err = IOErrors::kUnknownError; return {}; } @@ -93,7 +92,7 @@ class IOFodlerUnknownError: public FakeIO { class IOEmptyFodler: public FakeIO { public: - std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) override { + std::vector<FileInfo> FilesInFolder(const std::string& folder, IOErrors* err) const override { *err = IOErrors::kNoError; return {}; } @@ -101,7 +100,7 @@ class IOEmptyFodler: public FakeIO { class IOCannotOpenFile: public FakeIO { public: - FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) override { + FileData GetDataFromFile(const std::string& fname, uint64_t fsize, IOErrors* err) const noexcept override { *err = IOErrors::kPermissionDenied; return {}; }; @@ -212,7 +211,7 @@ TEST_F(FolderDataBrokerTests, GetNextReturnsErrorWhenFilePermissionsDenied) { class OpenFileMock : public FakeIO { public: - MOCK_METHOD3(GetDataFromFileProxy, uint8_t* (const std::string&, uint64_t, IOErrors*)); + MOCK_CONST_METHOD3(GetDataFromFileProxy, uint8_t* (const std::string&, uint64_t, IOErrors*)); }; -- GitLab