libcryfs/test/fspp/fuse/TimestampTest.cpp

317 lines
13 KiB
C++

#include "../testutils/FuseTest.h"
#include <gmock/gmock.h>
using namespace fspp::fuse;
typedef FuseTest FuseTimestampTest;
// Single flag
TEST_F(FuseTimestampTest, whenCalledWithoutAnyAtimeFlag_thenHasRelatimeBehavior) {
auto fs = TestFS({});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeFlag_thenHasNoatimeBehavior) {
auto fs = TestFS({"-o", "noatime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeFlag_thenHasStrictatimeBehavior) {
auto fs = TestFS({"-o", "strictatime"});
EXPECT_EQ(fspp::strictatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeFlag_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "relatime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeFlag_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "atime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeFlag_thenHasNoatimeBehavior) {
// note: this behavior is correct because "noatime" is default and adding "nodiratime" doesn't change anything.
auto fs = TestFS({"-o", "nodiratime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
// Flag combinations
TEST_F(FuseTimestampTest, whenCalledWithAtimeAtimeFlag_withCsv_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "atime,atime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeAtimeFlag_withSeparateFlags_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "atime", "-o", "atime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeNoatimeFlag_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "atime,noatime"}),
"Cannot have both, noatime and atime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeNoatimeFlag_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "atime", "-o", "noatime"}),
"Cannot have both, noatime and atime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeRelatimeFlag_withCsv_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "atime,relatime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeRelatimeFlag_withSeparateFlags_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "atime", "-o", "relatime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeStrictatimeFlag_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "atime,strictatime"}),
"Cannot have both, atime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeStrictatimeFlag_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "atime", "-o", "strictatime"}),
"Cannot have both, atime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeNodiratimeFlag_withCsv_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "atime,nodiratime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithAtimeNodiratimeFlag_withSeparateFlags_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "atime", "-o", "nodiratime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeAtime_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "noatime,atime"}),
"Cannot have both, noatime and atime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeAtime_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "noatime", "-o", "atime"}),
"Cannot have both, noatime and atime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeNoatimeFlag_withCsv_thenHasNoatimeBehavior) {
auto fs = TestFS({"-o", "noatime,noatime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeNoatimeFlag_withSeparateFlags_thenHasNoatimeBehavior) {
auto fs = TestFS({"-o", "noatime", "-o", "noatime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeRelatime_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "noatime,relatime"}),
"Cannot have both, noatime and relatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeRelatime_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "noatime", "-o", "relatime"}),
"Cannot have both, noatime and relatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeStrictatime_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "noatime,strictatime"}),
"Cannot have both, noatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeStrictatime_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "noatime", "-o", "strictatime"}),
"Cannot have both, noatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeNodiratimeFlag_withCsv_thenHasNoatimeBehavior) {
auto fs = TestFS({"-o", "noatime,nodiratime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNoatimeNodiratimeFlag_withSeparateFlags_thenHasNoatimeBehavior) {
auto fs = TestFS({"-o", "noatime", "-o", "nodiratime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeAtimeFlag_withCsv_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "relatime,atime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeAtimeFlag_withSeparateFlags_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "relatime", "-o", "atime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeNoatime_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "relatime,noatime"}),
"Cannot have both, noatime and relatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeNoatime_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "relatime", "-o", "noatime"}),
"Cannot have both, noatime and relatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeRelatimeFlag_withCsv_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "relatime,relatime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeRelatimeFlag_withSeparateFlags_thenHasRelatimeBehavior) {
auto fs = TestFS({"-o", "relatime", "-o", "relatime"});
EXPECT_EQ(fspp::relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeStrictatime_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "relatime,strictatime"}),
"Cannot have both, relatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeStrictatime_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "relatime", "-o", "strictatime"}),
"Cannot have both, relatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeNodiratimeFlag_withCsv_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "relatime,nodiratime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithRelatimeNodiratimeFlag_withSeparateFlags_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "relatime", "-o", "nodiratime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeAtimeFlag_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "strictatime,atime"}),
"Cannot have both, atime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeAtimeFlag_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "strictatime", "-o", "atime"}),
"Cannot have both, atime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeNoatimeFlag_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "strictatime,noatime"}),
"Cannot have both, noatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeNoatimeFlag_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "strictatime", "-o", "noatime"}),
"Cannot have both, noatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeRelatimeFlag_withCsv_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "strictatime,relatime"}),
"Cannot have both, relatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeRelatimeFlag_withSeparateFlags_thenFails) {
EXPECT_DEATH(
TestFS({"-o", "strictatime", "-o", "relatime"}),
"Cannot have both, relatime and strictatime flags set.");
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeStrictatimeFlag_withCsv_thenHasStrictatimeBehavior) {
auto fs = TestFS({"-o", "strictatime,strictatime"});
EXPECT_EQ(fspp::strictatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeStrictatimeFlag_withSeparateFlags_thenHasStrictatimeBehavior) {
auto fs = TestFS({"-o", "strictatime", "-o", "strictatime"});
EXPECT_EQ(fspp::strictatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeNodiratimeFlag_withCsv_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "strictatime,nodiratime"});
EXPECT_EQ(fspp::nodiratime_strictatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithStrictatimeNodiratimeFlag_withSeparateFlags_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "strictatime", "-o", "nodiratime"});
EXPECT_EQ(fspp::nodiratime_strictatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeAtimeFlag_withCsv_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime,atime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeAtimeFlag_withSeparateFlags_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime", "-o", "atime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeNoatimeFlag_withCsv_thenHasNoatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime,noatime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeNoatimeFlag_withSeparateFlags_thenHasNoatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime", "-o", "noatime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeRelatimeFlag_withCsv_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime,relatime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeRelatimeFlag_withSeparateFlags_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime", "-o", "relatime"});
EXPECT_EQ(fspp::nodiratime_relatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeStrictatimeFlag_withCsv_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime,strictatime"});
EXPECT_EQ(fspp::nodiratime_strictatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeStrictatimeFlag_withSeparateFlags_thenHasNodiratimeRelatimeBehavior) {
auto fs = TestFS({"-o", "nodiratime", "-o", "strictatime"});
EXPECT_EQ(fspp::nodiratime_strictatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeNodiratimeFlag_withCsv_thenHasNoatimeBehavior) {
// note: this behavior is correct because "noatime" is default and adding "nodiratime" doesn't change anything.
auto fs = TestFS({"-o", "nodiratime,nodiratime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}
TEST_F(FuseTimestampTest, whenCalledWithNodiratimeNodiratimeFlag_withSeparateFlags_thenHasNoatimeBehavior) {
// note: this behavior is correct because "noatime" is default and adding "nodiratime" doesn't change anything.
auto fs = TestFS({"-o", "nodiratime", "-o", "nodiratime"});
EXPECT_EQ(fspp::noatime().get(), context().timestampUpdateBehavior().get());
}