winfsp unit tests and fixes
This commit is contained in:
parent
876a1e9cd8
commit
2df84f53ed
@ -121,6 +121,77 @@ TYPED_TEST(winfsp_test, delete_can_handle_mmap_after_file_deletion) {
|
||||
|
||||
EXPECT_TRUE(::CloseHandle(mapping));
|
||||
}
|
||||
|
||||
TYPED_TEST(winfsp_test, delete_can_delete_after_mapping) {
|
||||
auto dir_path{
|
||||
utils::path::combine(this->mount_location, {"test_dir_3"}),
|
||||
};
|
||||
auto file_path{
|
||||
utils::path::combine(dir_path, {"test_file_3"}),
|
||||
};
|
||||
auto file_path2{
|
||||
utils::path::combine(dir_path, {"test_file2_3"}),
|
||||
};
|
||||
|
||||
ASSERT_TRUE(::CreateDirectoryA(dir_path.c_str(), nullptr));
|
||||
|
||||
auto seed = static_cast<unsigned>(std::time(nullptr));
|
||||
srand(seed);
|
||||
|
||||
auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||
|
||||
SYSTEM_INFO sys_info{};
|
||||
::GetSystemInfo(&sys_info);
|
||||
|
||||
auto *mapping =
|
||||
::CreateFileMappingA(handle, nullptr, PAGE_READWRITE, 0,
|
||||
16U * sys_info.dwAllocationGranularity, nullptr);
|
||||
EXPECT_TRUE(::CloseHandle(handle));
|
||||
ASSERT_TRUE(mapping != nullptr);
|
||||
|
||||
auto *view = ::MapViewOfFile(mapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
|
||||
ASSERT_TRUE(view != nullptr);
|
||||
|
||||
for (PUINT8 ptr = view, end = ptr + 16U * sys_info.dwAllocationGranularity;
|
||||
end > ptr; ++ptr) {
|
||||
*ptr = rand() & 0xFF;
|
||||
}
|
||||
|
||||
EXPECT_TRUE(::UnmapViewOfFile(view));
|
||||
EXPECT_TRUE(::CloseHandle(mapping));
|
||||
|
||||
auto handle = ::CreateFileA(file_path2.c_str(), GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
|
||||
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||
ASSERT_NE(INVALID_HANDLE_VALUE, handle);
|
||||
|
||||
mapping =
|
||||
::CreateFileMappingA(handle, nullptr, PAGE_READWRITE, 0,
|
||||
16U * sys_info.dwAllocationGranularity, nullptr);
|
||||
EXPECT_TRUE(::CloseHandle(handle));
|
||||
ASSERT_TRUE(mapping != nullptr);
|
||||
|
||||
view = ::MapViewOfFile(mapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
|
||||
EXPECT_TRUE(view != nullptr);
|
||||
|
||||
for (PUINT8 ptr = view, end = ptr + 16U * sys_info.dwAllocationGranularity;
|
||||
end > ptr; ++ptr) {
|
||||
*ptr = rand() & 0xff;
|
||||
}
|
||||
|
||||
EXPECT_TRUE(::UnmapViewOfFile(view));
|
||||
EXPECT_TRUE(::CloseHandle(mapping));
|
||||
|
||||
EXPECT_TRUE(::DeleteFileA(file_path.c_str()));
|
||||
EXPECT_TRUE(::DeleteFileA(file_path2.c_str()));
|
||||
|
||||
EXPECT_TRUE(::RemoveDirectoryA(dir_path.c_str()));
|
||||
EXPECT_FALSE(::RemoveDirectoryA(dir_path.c_str()));
|
||||
EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError());
|
||||
}
|
||||
} // namespace repertory
|
||||
|
||||
#endif // defined(_WIN32)
|
||||
|
Loading…
x
Reference in New Issue
Block a user