From 74496016f008fc4689ac616dd645dc0e7e5a868d Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 14 Nov 2024 09:42:42 -0600 Subject: [PATCH] fuse unit tests and fixes --- .../src/fuse_drive_rdrw_test.cpp | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/repertory/repertory_test/src/fuse_drive_rdrw_test.cpp b/repertory/repertory_test/src/fuse_drive_rdrw_test.cpp index ca3fa8d4..364a4ae4 100644 --- a/repertory/repertory_test/src/fuse_drive_rdrw_test.cpp +++ b/repertory/repertory_test/src/fuse_drive_rdrw_test.cpp @@ -104,6 +104,51 @@ TYPED_TEST(fuse_test, rdrw_can_read_from_offset_after_eof) { this->unlink_file_and_test(file_path); } + +TYPED_TEST(fuse_test, rdrw_can_not_write_to_ro_file) { + std::string file_name{"create_test"}; + auto file_path = this->create_file_and_test(file_name); + + auto handle = open(file_path.c_str(), O_RDONLY); + ASSERT_GT(handle, -1); + + auto write_buffer = utils::generate_secure_random(8096U); + auto bytes_written = + pwrite64(handle, write_buffer.data(), write_buffer.size(), 0U); + EXPECT_EQ(-1, bytes_written); + EXPECT_EQ(EBADF, errno); + + auto file_size = utils::file::file{file_path}.size(); + EXPECT_TRUE(file_size.has_value()); + EXPECT_EQ(0U, *file_size); + + close(handle); + + this->unlink_file_and_test(file_path); +} + +TYPED_TEST(fuse_test, rdrw_can_not_read_from_wo_file) { + std::string file_name{"create_test"}; + auto file_path = this->create_file_and_test(file_name); + + auto handle = open(file_path.c_str(), O_WRONLY); + ASSERT_GT(handle, -1); + + auto write_buffer = utils::generate_secure_random(8096U); + auto bytes_written = + pwrite64(handle, write_buffer.data(), write_buffer.size(), 0U); + EXPECT_EQ(write_buffer.size(), bytes_written); + + data_buffer read_buffer(1U); + auto bytes_read = + pread64(handle, read_buffer.data(), read_buffer.size(), idx); + EXPECT_EQ(-1, bytes_read); + EXPECT_EQ(EBADF, errno); + + close(handle); + + this->unlink_file_and_test(file_path); +} } // namespace repertory #endif // !defined(_WIN32)