winfsp unit tests and fixes
This commit is contained in:
		| @@ -90,6 +90,99 @@ TYPED_TEST(winfsp_test, can_delete_file_after_close) { | ||||
|                          FILE_FLAG_DELETE_ON_CLOSE, 0); | ||||
|   EXPECT_EQ(INVALID_HANDLE_VALUE, handle); | ||||
|   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
 | ||||
| 
 | ||||
		Reference in New Issue
	
	Block a user