[unit test] Complete FUSE unit tests #22

This commit is contained in:
2025-09-20 10:27:12 -05:00
parent e9df198cbd
commit 38e928811e

View File

@@ -53,99 +53,94 @@ TYPED_TEST(fuse_test, getattr_directory_reports_type) {
this->rmdir_and_test(dir);
}
/*
TYPED_TEST(fuse_test, getattr_missing_path_sets_enoent) {
std::string missing = this->mount_location + "/ga_missing.txt";
auto src = this->create_file_path("getattr");
struct stat st_unix{};
errno = 0;
EXPECT_EQ(-1, ::stat(missing.c_str(), &st_unix));
EXPECT_EQ(-1, ::stat(src.c_str(), &st_unix));
EXPECT_EQ(ENOENT, errno);
}
TYPED_TEST(fuse_test, fgetattr_on_open_file_reflects_size_growth) {
std::string name{"fga_grow"};
std::string p = this->create_file_and_test(name);
this->overwrite_text(p, "ABC"); // 3 bytes
std::string name{"fgetattr"};
auto src = this->create_file_and_test(name);
this->overwrite_text(src, "ABC");
int fd = ::open(p.c_str(), O_RDWR);
ASSERT_NE(fd, -1) << "open failed: " << std::strerror(errno);
auto desc = ::open(src.c_str(), O_RDWR);
ASSERT_NE(desc, -1);
// append via fd; size should grow
const char *more = "DEF";
ASSERT_EQ(3, ::write(fd, more, 3)) << std::strerror(errno);
std::string_view more{"DEF"};
ASSERT_EQ(3, ::write(desc, more.data(), more.size()));
struct stat st_unix{};
errno = 0;
ASSERT_EQ(0, ::fstat(fd, &st_unix)) << std::strerror(errno);
ASSERT_EQ(0, ::fstat(desc, &st_unix));
EXPECT_TRUE(S_ISREG(st_unix.st_mode));
EXPECT_EQ(6, st_unix.st_size);
::close(fd);
this->unlink_file_and_test(p);
::close(desc);
this->unlink_file_and_test(src);
}
TYPED_TEST(fuse_test, fgetattr_on_directory_fd_reports_type) {
std::string dname{"fga_dir"};
std::string d = this->create_directory_and_test(dname);
TYPED_TEST(fuse_test, fgetattr_directory_reports_type) {
std::string dir_name{"dir"};
auto dir = this->create_directory_and_test(dir_name);
#if defined(O_DIRECTORY)
int fd = ::open(d.c_str(), O_RDONLY | O_DIRECTORY);
#else
int fd = ::open(d.c_str(), O_RDONLY);
#endif
ASSERT_NE(fd, -1) << "open dir failed: " << std::strerror(errno);
auto desc = ::open(dir.c_str(), O_RDONLY | O_DIRECTORY);
#else // !defined(O_DIRECTORY)
auto desc = ::open(d.c_str(), O_RDONLY);
#endif // defined(O_DIRECTORY)
ASSERT_NE(desc, -1);
struct stat st_unix{};
errno = 0;
ASSERT_EQ(0, ::fstat(fd, &st_unix)) << std::strerror(errno);
ASSERT_EQ(0, ::fstat(desc, &st_unix));
EXPECT_TRUE(S_ISDIR(st_unix.st_mode));
::close(fd);
this->rmdir_and_test(d);
::close(desc);
this->rmdir_and_test(dir);
}
TYPED_TEST(fuse_test, fgetattr_on_closed_fd_sets_ebadf) {
std::string name{"fga_ebadf"};
std::string p = this->create_file_and_test(name);
this->overwrite_text(p, "X");
std::string name{"fgetattr"};
auto src = this->create_file_and_test(name);
this->overwrite_text(src, "X");
int fd = ::open(p.c_str(), O_RDONLY);
ASSERT_NE(fd, -1);
ASSERT_EQ(0, ::close(fd));
auto desc = ::open(src.c_str(), O_RDONLY);
ASSERT_NE(desc, -1);
ASSERT_EQ(0, ::close(desc));
struct stat st_unix{};
errno = 0;
EXPECT_EQ(-1, ::fstat(fd, &st_unix));
EXPECT_EQ(-1, ::fstat(desc, &st_unix));
EXPECT_EQ(EBADF, errno);
this->unlink_file_and_test(p);
this->unlink_file_and_test(src);
}
TYPED_TEST(fuse_test, getattr_reflects_changes_after_write_and_chmod) {
std::string name{"ga_mutate"};
std::string p = this->create_file_and_test(name);
this->overwrite_text(p, "HI"); // 2 bytes
std::string name{"getattr"};
auto src = this->create_file_and_test(name);
this->overwrite_text(src, "HI"); // 2 bytes
// Write more and sync; then stat should reflect new size.
int fd = ::open(p.c_str(), O_RDWR);
ASSERT_NE(fd, -1);
const char *more = "JKLMN";
ASSERT_EQ(5, ::write(fd, more, 5));
ASSERT_EQ(0, ::fsync(fd));
ASSERT_EQ(0, ::close(fd));
auto desc = ::open(src.c_str(), O_RDWR);
ASSERT_NE(desc, -1);
std::string_view more{"CMDC"};
ASSERT_EQ(4, ::write(desc, more.data(), more.size()));
ASSERT_EQ(0, ::fsync(desc));
ASSERT_EQ(0, ::close(desc));
// chmod shouldnt change type; size should now be 7.
ASSERT_EQ(0, ::chmod(p.c_str(), 0644)) << std::strerror(errno);
ASSERT_EQ(0, ::chmod(src.c_str(), 0644));
struct stat st_unix{};
errno = 0;
ASSERT_EQ(0, ::stat(p.c_str(), &st_unix)) << std::strerror(errno);
ASSERT_EQ(0, ::stat(src.c_str(), &st_unix));
EXPECT_TRUE(S_ISREG(st_unix.st_mode));
EXPECT_EQ(7, st_unix.st_size); // "HIJKLMN"
EXPECT_EQ(7, st_unix.st_size);
this->unlink_file_and_test(p);
this->unlink_file_and_test(src);
}
*/
} // namespace repertory
#endif // !defined(_WIN32)