diff --git a/src/fspp/fstest/FsTest.h b/src/fspp/fstest/FsTest.h index e360f169..fb9b5d9b 100644 --- a/src/fspp/fstest/FsTest.h +++ b/src/fspp/fstest/FsTest.h @@ -11,9 +11,11 @@ #include "FsppNodeTest_Stat.h" #include "FsppNodeTest_Timestamps.h" #include "FsppOpenFileTest.h" +#include "FsppDeviceTest_Timestamps.h" #define FSPP_ADD_FILESYTEM_TESTS(FS_NAME, FIXTURE) \ INSTANTIATE_TYPED_TEST_CASE_P(FS_NAME, FsppDeviceTest, FIXTURE); \ + INSTANTIATE_NODE_TEST_CASE( FS_NAME, FsppDeviceTest_Timestamps, FIXTURE); \ INSTANTIATE_TYPED_TEST_CASE_P(FS_NAME, FsppDirTest, FIXTURE); \ INSTANTIATE_TYPED_TEST_CASE_P(FS_NAME, FsppFileTest, FIXTURE); \ INSTANTIATE_TYPED_TEST_CASE_P(FS_NAME, FsppSymlinkTest, FIXTURE); \ @@ -25,5 +27,4 @@ INSTANTIATE_TYPED_TEST_CASE_P(FS_NAME, FsppNodeTest_Stat_SymlinkOnly, FIXTURE); \ INSTANTIATE_TYPED_TEST_CASE_P(FS_NAME, FsppOpenFileTest, FIXTURE); \ - #endif diff --git a/src/fspp/fstest/FsppDeviceTest_Timestamps.h b/src/fspp/fstest/FsppDeviceTest_Timestamps.h new file mode 100644 index 00000000..4d6bf744 --- /dev/null +++ b/src/fspp/fstest/FsppDeviceTest_Timestamps.h @@ -0,0 +1,42 @@ +#pragma once +#ifndef MESSMER_FSPP_FSTEST_FSPPDEVICETEST_TIMESTAMPS_H_ +#define MESSMER_FSPP_FSTEST_FSPPDEVICETEST_TIMESTAMPS_H_ + +#include "testutils/TimestampTestUtils.h" + +template +class FsppDeviceTest_Timestamps: public FsppNodeTest, public TimestampTestUtils { +public: + void Test_Load_While_Loaded() { + auto file = this->CreateFile("/myfile"); + auto operation = [this, &file] () { + this->device->Load("/myfile"); + }; + this->EXPECT_OPERATION_DOESNT_UPDATE_TIMESTAMPS(*file, operation); + } + + void Test_Load_While_Not_Loaded() { + struct stat oldStat; + { + auto file = this->CreateFile("/myfile"); + oldStat = stat(*file); + this->ensureNodeTimestampsAreOld(*file); + } + + this->device->Load("/myfile"); + + auto file = this->device->Load("/myfile"); + + struct stat newStat = stat(*file.value()); + EXPECT_EQ(oldStat.st_atim, newStat.st_atim); + EXPECT_EQ(oldStat.st_mtim, newStat.st_mtim); + EXPECT_EQ(oldStat.st_ctim, newStat.st_ctim); + } +}; + +REGISTER_NODE_TEST_CASE(FsppDeviceTest_Timestamps, + Load_While_Loaded, + Load_While_Not_Loaded +); + +#endif diff --git a/src/fspp/fstest/testutils/TimestampTestUtils.h b/src/fspp/fstest/testutils/TimestampTestUtils.h index cfc15ae3..4bd2377f 100644 --- a/src/fspp/fstest/testutils/TimestampTestUtils.h +++ b/src/fspp/fstest/testutils/TimestampTestUtils.h @@ -81,7 +81,7 @@ public: struct stat newStat = stat(node); EXPECT_EQ(oldStat.st_atim, newStat.st_atim); EXPECT_EQ(oldStat.st_mtim, newStat.st_mtim); - EXPECT_LE(oldStat.st_ctim, newStat.st_ctim); + EXPECT_EQ(oldStat.st_ctim, newStat.st_ctim); } void EXPECT_OPERATION_ONLY_UPDATES_METADATACHANGE_TIMESTAMP(const fspp::Node &node, std::function operation) { @@ -113,8 +113,6 @@ public: return result; } -private: - void ensureNodeTimestampsAreOld(const fspp::Node &node) { waitUntilClockProgresses(); EXPECT_LT(stat(node).st_atim, cpputils::time::now()); @@ -122,6 +120,8 @@ private: EXPECT_LT(stat(node).st_ctim, cpputils::time::now()); } +private: + void waitUntilClockProgresses() { auto start = cpputils::time::now(); while (start == cpputils::time::now()) {