diff options
Diffstat (limited to 'test/fuse/linux/unlink_test.cc')
-rw-r--r-- | test/fuse/linux/unlink_test.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/fuse/linux/unlink_test.cc b/test/fuse/linux/unlink_test.cc index 5702e9b32..13efbf7c7 100644 --- a/test/fuse/linux/unlink_test.cc +++ b/test/fuse/linux/unlink_test.cc @@ -37,6 +37,7 @@ namespace { class UnlinkTest : public FuseTest { protected: const std::string test_file_ = "test_file"; + const std::string test_subdir_ = "test_subdir"; }; TEST_F(UnlinkTest, RegularFile) { @@ -61,6 +62,29 @@ TEST_F(UnlinkTest, RegularFile) { EXPECT_EQ(std::string(unlinked_file.data()), test_file_); } +TEST_F(UnlinkTest, RegularFileSubDir) { + SetServerInodeLookup(test_subdir_, S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO); + const std::string test_file_path = + JoinPath(mount_point_.path().c_str(), test_subdir_, test_file_); + SetServerInodeLookup(test_file_, S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO); + + struct fuse_out_header out_header = { + .len = sizeof(struct fuse_out_header), + }; + auto iov_out = FuseGenerateIovecs(out_header); + SetServerResponse(FUSE_UNLINK, iov_out); + + ASSERT_THAT(unlink(test_file_path.c_str()), SyscallSucceeds()); + struct fuse_in_header in_header; + std::vector<char> unlinked_file(test_file_.length() + 1); + auto iov_in = FuseGenerateIovecs(in_header, unlinked_file); + GetServerActualRequest(iov_in); + + EXPECT_EQ(in_header.len, sizeof(in_header) + test_file_.length() + 1); + EXPECT_EQ(in_header.opcode, FUSE_UNLINK); + EXPECT_EQ(std::string(unlinked_file.data()), test_file_); +} + TEST_F(UnlinkTest, NoFile) { const std::string test_file_path = JoinPath(mount_point_.path().c_str(), test_file_); |