From 38e928811e688f0f53caaf377c8b4f813e0dd21b Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 20 Sep 2025 10:27:12 -0500 Subject: [PATCH] [unit test] Complete FUSE unit tests #22 --- .../src/fuse_drive_getattr_fgetattr_test.cpp | 93 +++++++++---------- 1 file changed, 44 insertions(+), 49 deletions(-) diff --git a/repertory/repertory_test/src/fuse_drive_getattr_fgetattr_test.cpp b/repertory/repertory_test/src/fuse_drive_getattr_fgetattr_test.cpp index 647297a4..e7c2c632 100644 --- a/repertory/repertory_test/src/fuse_drive_getattr_fgetattr_test.cpp +++ b/repertory/repertory_test/src/fuse_drive_getattr_fgetattr_test.cpp @@ -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 shouldn’t 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)