summaryrefslogtreecommitdiff
path: root/test/buildtool/file_system/file_system_manager.test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/buildtool/file_system/file_system_manager.test.cpp')
-rw-r--r--test/buildtool/file_system/file_system_manager.test.cpp89
1 files changed, 79 insertions, 10 deletions
diff --git a/test/buildtool/file_system/file_system_manager.test.cpp b/test/buildtool/file_system/file_system_manager.test.cpp
index 3e4bead9..4ddb65e2 100644
--- a/test/buildtool/file_system/file_system_manager.test.cpp
+++ b/test/buildtool/file_system/file_system_manager.test.cpp
@@ -1,4 +1,5 @@
#include <algorithm>
+#include <chrono>
#include <cstdlib>
#include <filesystem>
#include <iostream>
@@ -71,6 +72,15 @@ auto HasExecutablePermissions(fs::path const& path) noexcept -> bool {
}
}
+auto HasEpochTime(fs::path const& path) noexcept -> bool {
+ try {
+ return fs::last_write_time(path) ==
+ System::GetPosixEpoch<std::chrono::file_clock>();
+ } catch (...) {
+ return false;
+ }
+}
+
} // namespace
TEST_CASE("CreateDirectory", "[file_system]") {
@@ -189,9 +199,9 @@ TEST_CASE_METHOD(CopyFileFixture, "CopyFile", "[file_system]") {
TEST_CASE_METHOD(CopyFileFixture, "CopyFileAs", "[file_system]") {
SECTION("as file") {
- auto run_test = [&](bool fd_less) {
+ auto run_test = [&]<bool kSetEpochTime = false>(bool fd_less) {
// Copy as file was successful
- CHECK(FileSystemManager::CopyFileAs(
+ CHECK(FileSystemManager::CopyFileAs<kSetEpochTime>(
from_, to_, ObjectType::File, fd_less));
// file exists
@@ -208,15 +218,24 @@ TEST_CASE_METHOD(CopyFileFixture, "CopyFileAs", "[file_system]") {
// permissions should be 0444
CHECK(HasFilePermissions(to_));
+ if constexpr (kSetEpochTime) {
+ CHECK(HasEpochTime(to_));
+ }
};
SECTION("direct") { run_test(false); }
SECTION("fd_less") { run_test(true); }
+ SECTION("direct with epoch") {
+ run_test.template operator()<true>(false);
+ }
+ SECTION("fd_less with epoch") {
+ run_test.template operator()<true>(true);
+ }
}
SECTION("as executable") {
- auto run_test = [&](bool fd_less) {
+ auto run_test = [&]<bool kSetEpochTime = false>(bool fd_less) {
// Copy as file was successful
- CHECK(FileSystemManager::CopyFileAs(
+ CHECK(FileSystemManager::CopyFileAs<kSetEpochTime>(
from_, to_, ObjectType::Executable, fd_less));
// file exists
@@ -233,10 +252,19 @@ TEST_CASE_METHOD(CopyFileFixture, "CopyFileAs", "[file_system]") {
// permissions should be 0555
CHECK(HasExecutablePermissions(to_));
+ if constexpr (kSetEpochTime) {
+ CHECK(HasEpochTime(to_));
+ }
};
SECTION("direct") { run_test(false); }
SECTION("fd_less") { run_test(true); }
+ SECTION("direct with epoch") {
+ run_test.template operator()<true>(false);
+ }
+ SECTION("fd_less with epoch") {
+ run_test.template operator()<true>(true);
+ }
}
}
@@ -293,8 +321,8 @@ TEST_CASE_METHOD(WriteFileFixture, "WriteFileAs", "[file_system]") {
SECTION("as a file") {
std::string const content{"This are the contents\nof the file.\n"};
- auto run_test = [&](bool fd_less) {
- CHECK(FileSystemManager::WriteFileAs(
+ auto run_test = [&]<bool kSetEpochTime = false>(bool fd_less) {
+ CHECK(FileSystemManager::WriteFileAs<kSetEpochTime>(
content, file_path_, ObjectType::File, fd_less));
CHECK(std::filesystem::exists(file_path_));
CHECK(std::filesystem::is_directory(file_path_.parent_path()));
@@ -308,16 +336,25 @@ TEST_CASE_METHOD(WriteFileFixture, "WriteFileAs", "[file_system]") {
// permissions should be 0444
CHECK(HasFilePermissions(file_path_));
+ if constexpr (kSetEpochTime) {
+ CHECK(HasEpochTime(file_path_));
+ }
};
SECTION("direct") { run_test(false); }
SECTION("fd-less") { run_test(true); }
+ SECTION("direct with epoch") {
+ run_test.template operator()<true>(false);
+ }
+ SECTION("fd-less with epoch") {
+ run_test.template operator()<true>(true);
+ }
}
SECTION("as an executable") {
std::string const content{"\n"};
- auto run_test = [&](bool fd_less) {
- CHECK(FileSystemManager::WriteFileAs(
+ auto run_test = [&]<bool kSetEpochTime = false>(bool fd_less) {
+ CHECK(FileSystemManager::WriteFileAs<kSetEpochTime>(
content, file_path_, ObjectType::Executable, fd_less));
CHECK(std::filesystem::exists(file_path_));
CHECK(std::filesystem::is_directory(file_path_.parent_path()));
@@ -331,10 +368,19 @@ TEST_CASE_METHOD(WriteFileFixture, "WriteFileAs", "[file_system]") {
// permissions should be 0555
CHECK(HasExecutablePermissions(file_path_));
+ if constexpr (kSetEpochTime) {
+ CHECK(HasEpochTime(file_path_));
+ }
};
SECTION("direct") { run_test(false); }
SECTION("fd-less") { run_test(true); }
+ SECTION("direct with epoch") {
+ run_test.template operator()<true>(false);
+ }
+ SECTION("fd-less with epoch") {
+ run_test.template operator()<true>(true);
+ }
}
}
@@ -448,9 +494,9 @@ TEST_CASE_METHOD(CopyFileFixture, "CreateFileHardlinkAs", "[file_system]") {
from_,
is_executable ? ObjectType::Executable : ObjectType::File));
};
- auto run_test = [&](bool is_executable) {
+ auto run_test = [&]<bool kSetEpochTime = false>(bool is_executable) {
// Hard link creation was successful
- CHECK(FileSystemManager::CreateFileHardlinkAs(
+ CHECK(FileSystemManager::CreateFileHardlinkAs<kSetEpochTime>(
from_,
to_,
is_executable ? ObjectType::Executable : ObjectType::File));
@@ -463,6 +509,9 @@ TEST_CASE_METHOD(CopyFileFixture, "CreateFileHardlinkAs", "[file_system]") {
// permissions should be 0555 or 0444
CHECK((is_executable ? HasExecutablePermissions(to_)
: HasFilePermissions(to_)));
+ if constexpr (kSetEpochTime) {
+ CHECK(HasEpochTime(to_));
+ }
};
SECTION("as file") {
SECTION("from file") {
@@ -484,4 +533,24 @@ TEST_CASE_METHOD(CopyFileFixture, "CreateFileHardlinkAs", "[file_system]") {
run_test(true);
}
}
+ SECTION("as file with epoch") {
+ SECTION("from file") {
+ set_perm(false);
+ run_test.template operator()<true>(false);
+ }
+ SECTION("from executable") {
+ set_perm(true);
+ run_test.template operator()<true>(false);
+ }
+ }
+ SECTION("as executable with epoch") {
+ SECTION("from file") {
+ set_perm(false);
+ run_test.template operator()<true>(true);
+ }
+ SECTION("from executable") {
+ set_perm(true);
+ run_test.template operator()<true>(true);
+ }
+ }
}