winfsp unit tests and fixes

This commit is contained in:
Scott E. Graves 2024-10-30 09:26:45 -05:00
parent 2a1a48bc68
commit 55762f9c92

View File

@ -90,6 +90,99 @@ TYPED_TEST(winfsp_test, can_delete_file_after_close) {
FILE_FLAG_DELETE_ON_CLOSE, 0); FILE_FLAG_DELETE_ON_CLOSE, 0);
EXPECT_EQ(INVALID_HANDLE_VALUE, handle); EXPECT_EQ(INVALID_HANDLE_VALUE, handle);
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
// EXPECT file not found
}
TYPED_TEST(winfsp_test, cannot_create_files_with_invalid_characters_in_path) {
for (auto &&invalid_char : std::array<std::string, 7U>{
{"*", ":", "<", ">", "?", "|", "\""},
}) {
auto handle = ::CreateFileA(
(this->mount_location + "\\" + invalid_char + "\\test_file_1").c_str(),
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
EXPECT_EQ(INVALID_HANDLE_VALUE, handle);
if (handle != INVALID_HANDLE_VALUE) {
std::cout << "char: " << invalid_char << std::endl;
}
EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError());
}
}
TYPED_TEST(winfsp_test,
cannot_create_stream_files_with_extra_component_in_path) {
auto file_path{
utils::path::combine(this->mount_location,
{
"test_file_1:test",
"moose",
}),
};
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
FILE_ATTRIBUTE_NORMAL, 0);
EXPECT_EQ(INVALID_HANDLE_VALUE, handle);
EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError());
}
TYPED_TEST(winfsp_test, can_create_directory) {
auto dir_path{
utils::path::combine(this->mount_location,
{
"test_dir_0",
}),
};
EXPECT_TRUE(::CreateDirectoryA(dir_path.c_str(), nullptr));
EXPECT_FALSE(::CreateDirectoryA(dir_path.c_str(), nullptr));
}
TYPED_TEST(winfsp_test, directory_delete_fails_if_not_empty) {
auto dir_path{
utils::path::combine(this->mount_location,
{
"test_dir_0",
}),
};
auto file_path{
utils::path::combine(dir_path,
{
"test_file_0",
}),
};
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW,
FILE_ATTRIBUTE_NORMAL, 0);
EXPECT_NE(INVALID_HANDLE_VALUE, handle);
::CloseHandle(handle);
handle =
::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0);
EXPECT_NE(INVALID_HANDLE_VALUE, handle);
::CloseHandle(handle);
handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
FILE_FLAG_DELETE_ON_CLOSE, 0);
EXPECT_NE(INVALID_HANDLE_VALUE, handle);
::CloseHandle(handle);
handle =
::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0);
EXPECT_NE(INVALID_HANDLE_VALUE, handle);
::CloseHandle(handle);
handle =
::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0);
EXPECT_EQ(INVALID_HANDLE_VALUE, handle);
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
} }
} // namespace repertory } // namespace repertory