winfsp unit tests and fixes
This commit is contained in:
		| @@ -36,8 +36,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_normal_attribute) { | ||||
|   }; | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                               FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
| @@ -53,8 +53,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_read_only_attribute) { | ||||
|   }; | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                               FILE_ATTRIBUTE_READONLY, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_READONLY, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
| @@ -73,8 +73,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_read_only_attribute) { | ||||
| // | ||||
| //   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | | ||||
| //   GENERIC_WRITE, | ||||
| //                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
| //                               CREATE_NEW, FILE_ATTRIBUTE_SYSTEM, 0); | ||||
| //                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
| //                               CREATE_NEW, FILE_ATTRIBUTE_SYSTEM, nullptr); | ||||
| //   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
| //   ::CloseHandle(handle); | ||||
| // | ||||
| @@ -93,8 +93,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_hidden_attribute) { | ||||
|   }; | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                               FILE_ATTRIBUTE_HIDDEN, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_HIDDEN, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
| @@ -112,8 +112,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_always_file_with_normal_attribute) { | ||||
|   }; | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
| @@ -129,8 +129,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_file_with_read_only_attribute) { | ||||
|   }; | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
| @@ -150,8 +150,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_file_with_read_only_attribute) { | ||||
| // | ||||
| //   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | | ||||
| //   GENERIC_WRITE, | ||||
| //                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
| //                               CREATE_ALWAYS, FILE_ATTRIBUTE_SYSTEM, 0); | ||||
| //                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
| //                               CREATE_ALWAYS, FILE_ATTRIBUTE_SYSTEM, nullptr); | ||||
| //   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
| //   ::CloseHandle(handle); | ||||
| // | ||||
| @@ -170,8 +170,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_always_file_with_hidden_attribute) { | ||||
|   }; | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
| @@ -199,8 +199,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_handle_read_only_directory) { | ||||
|   EXPECT_EQ((FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY), attr); | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                               FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
|   | ||||
| @@ -35,7 +35,7 @@ TYPED_TEST(winfsp_test, cr8_nl_can_create_file_of_max_component_length) { | ||||
|     DWORD max_length{}; | ||||
|     EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr, | ||||
|                                         0, nullptr, &max_length, nullptr, | ||||
|                                         nullptr, 0)); | ||||
|                                         nullptr, nullptr)); | ||||
|     EXPECT_EQ(255U, max_length); | ||||
|  | ||||
|     auto file_path = utils::path::combine(this->mount_location, | ||||
| @@ -43,10 +43,10 @@ TYPED_TEST(winfsp_test, cr8_nl_can_create_file_of_max_component_length) { | ||||
|                                               std::string(max_length, 'a'), | ||||
|                                           }); | ||||
|  | ||||
|     auto handle = | ||||
|         ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                       FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|     auto handle = ::CreateFileA( | ||||
|         file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|         FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|     ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|     EXPECT_TRUE(::CloseHandle(handle)); | ||||
|   } | ||||
| @@ -58,7 +58,7 @@ TYPED_TEST(winfsp_test, | ||||
|     DWORD max_length{}; | ||||
|     EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr, | ||||
|                                         0, nullptr, &max_length, nullptr, | ||||
|                                         nullptr, 0)); | ||||
|                                         nullptr, nullptr)); | ||||
|     EXPECT_EQ(255U, max_length); | ||||
|  | ||||
|     auto file_path = utils::path::combine(this->mount_location, | ||||
| @@ -66,10 +66,10 @@ TYPED_TEST(winfsp_test, | ||||
|                                               std::string(max_length + 1U, 'a'), | ||||
|                                           }); | ||||
|  | ||||
|     auto handle = | ||||
|         ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                       FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|     auto handle = ::CreateFileA( | ||||
|         file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|         FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|     ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|     EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError()); | ||||
|   } | ||||
|   | ||||
| @@ -35,8 +35,8 @@ TYPED_TEST(winfsp_test, cr8_file_can_create_file) { | ||||
|       utils::path::combine(this->mount_location, {"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); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
| } | ||||
| @@ -46,8 +46,8 @@ TYPED_TEST(winfsp_test, cr8_file_create_new_fails_when_file_exists) { | ||||
|       utils::path::combine(this->mount_location, {"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); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|   EXPECT_EQ(ERROR_FILE_EXISTS, ::GetLastError()); | ||||
| } | ||||
| @@ -57,8 +57,8 @@ TYPED_TEST(winfsp_test, cr8_file_can_open_existing_file) { | ||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||
|   }; | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
|                               OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
| } | ||||
| @@ -68,8 +68,8 @@ TYPED_TEST(winfsp_test, cr8_file_create_always_succeeds_when_file_exists) { | ||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||
|   }; | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   // EXPECT file_size is 0 | ||||
|   ::CloseHandle(handle); | ||||
| @@ -79,15 +79,16 @@ TYPED_TEST(winfsp_test, cr8_file_can_delete_file_after_close) { | ||||
|   auto file_path{ | ||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||
|   }; | ||||
|   auto 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); | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||
|                     FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_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); | ||||
|                          FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                          OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||
|  | ||||
| @@ -101,8 +102,8 @@ TYPED_TEST(winfsp_test, | ||||
|        }) { | ||||
|     auto handle = ::CreateFileA( | ||||
|         (this->mount_location + "\\" + invalid_char + "\\test_file_0").c_str(), | ||||
|         GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | ||||
|         CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); | ||||
|         GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, | ||||
|         nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|     ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|     if (handle != INVALID_HANDLE_VALUE) { | ||||
|       std::cout << "char: " << invalid_char << std::endl; | ||||
| @@ -121,8 +122,8 @@ TYPED_TEST(winfsp_test, | ||||
|                            }), | ||||
|   }; | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                               FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|   EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError()); | ||||
| } | ||||
| @@ -153,35 +154,35 @@ TYPED_TEST(winfsp_test, cr8_file_directory_delete_fails_if_not_empty) { | ||||
|   }; | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                               FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_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); | ||||
|   handle = ::CreateFileA( | ||||
|       dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|       FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||
|       FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_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); | ||||
|                          FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                          OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_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); | ||||
|   handle = ::CreateFileA( | ||||
|       dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|       FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||
|       FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_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); | ||||
|   handle = ::CreateFileA( | ||||
|       dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|       FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||
|       FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||
| } | ||||
|   | ||||
| @@ -43,7 +43,7 @@ TYPED_TEST(winfsp_test, delete_directory_fails_if_directory_not_empty) { | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
| @@ -67,12 +67,12 @@ TYPED_TEST(winfsp_test, | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); | ||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|   ::CloseHandle(handle); | ||||
|  | ||||
|   handle = ::CreateFileA(file_path.c_str(), DELETE, FILE_SHARE_DELETE, nullptr, | ||||
|                          OPEN_EXISTING, 0, 0); | ||||
|                          OPEN_EXISTING, 0, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   typedef struct { | ||||
| @@ -83,7 +83,7 @@ TYPED_TEST(winfsp_test, | ||||
|   EXPECT_TRUE(::SetFileInformationByHandle(handle, FileDispositionInfo, | ||||
|                                            &disp_info, sizeof disp_info)); | ||||
|   auto handle2 = ::CreateFileA(file_path.c_str(), FILE_READ_ATTRIBUTES, 0, | ||||
|                                nullptr, OPEN_EXISTING, 0, 0); | ||||
|                                nullptr, OPEN_EXISTING, 0, nullptr); | ||||
|   EXPECT_EQ(INVALID_HANDLE_VALUE, handle2); | ||||
|   EXPECT_EQ(ERROR_ACCESS_DENIED, ::GetLastError()); | ||||
|  | ||||
| @@ -92,6 +92,32 @@ TYPED_TEST(winfsp_test, | ||||
|   EXPECT_FALSE(::DeleteFileA(file_path.c_str())); | ||||
|   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||
| } | ||||
|  | ||||
| TYPED_TEST(winfsp_test, delete_can_handle_mmap_after_file_deletion) { | ||||
|   auto file_path{ | ||||
|       utils::path::combine(this->mount_location, {"test_file_3"}), | ||||
|   }; | ||||
|  | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   auto *mapping = | ||||
|       ::CreateFileMappingA(handle, nullptr, PAGE_READWRITE, 0, | ||||
|                            SystemInfo.dwAllocationGranularity, nullptr); | ||||
|   EXPECT_TRUE(mapping != nullptr); | ||||
|   EXPECT_TRUE(::CloseHandle(handle)); | ||||
|  | ||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||
|                               OPEN_EXISTING, 0, nullptr); | ||||
|   EXPECT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||
|  | ||||
|   EXPECT_TRUE(::CloseHandle(mapping)); | ||||
| } | ||||
| } // namespace repertory | ||||
|  | ||||
| #endif // defined(_WIN32) | ||||
|   | ||||
| @@ -36,8 +36,8 @@ TYPED_TEST(winfsp_test, info_can_get_tag_info) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   FILE_ATTRIBUTE_TAG_INFO tag_info{}; | ||||
| @@ -61,8 +61,8 @@ TYPED_TEST(winfsp_test, info_can_get_basic_info) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   FILE_BASIC_INFO basic_info{}; | ||||
| @@ -91,8 +91,8 @@ TYPED_TEST(winfsp_test, info_can_get_standard_info) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   FILE_STANDARD_INFO std_info{}; | ||||
| @@ -113,8 +113,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_name_info) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   std::array<std::uint8_t, sizeof(FILE_NAME_INFO) + MAX_PATH> name_info{}; | ||||
| @@ -143,8 +143,8 @@ TYPED_TEST(winfsp_test, info_get_file_name_info_buffer_too_small) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   std::array<std::uint8_t, sizeof(FILE_NAME_INFO)> name_info{}; | ||||
| @@ -171,8 +171,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_info) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   BY_HANDLE_FILE_INFORMATION file_info{}; | ||||
| @@ -217,8 +217,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_path) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   std::string final_path; | ||||
| @@ -245,8 +245,8 @@ TYPED_TEST(winfsp_test, info_can_set_file_info_attributes_to_hidden) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   EXPECT_TRUE(::SetFileAttributesA(file_path.c_str(), FILE_ATTRIBUTE_HIDDEN)); | ||||
| @@ -266,8 +266,8 @@ TYPED_TEST( | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   EXPECT_TRUE(::SetFileAttributesA( | ||||
| @@ -286,8 +286,8 @@ TYPED_TEST(winfsp_test, info_can_set_creation_file_time) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   BY_HANDLE_FILE_INFORMATION orig_file_info{}; | ||||
| @@ -320,8 +320,8 @@ TYPED_TEST(winfsp_test, info_can_set_accessed_file_time) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   BY_HANDLE_FILE_INFORMATION orig_file_info{}; | ||||
| @@ -353,8 +353,8 @@ TYPED_TEST(winfsp_test, info_can_set_written_file_time) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   BY_HANDLE_FILE_INFORMATION orig_file_info{}; | ||||
| @@ -386,8 +386,8 @@ TYPED_TEST(winfsp_test, info_can_set_file_size) { | ||||
|   }; | ||||
|   auto handle = | ||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||
|  | ||||
|   auto offset = ::SetFilePointer(handle, 42, nullptr, FILE_BEGIN); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user