[unit test] Complete FUSE unit tests #22
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user