continue refactor drive tests

This commit is contained in:
Scott E. Graves 2024-10-22 09:14:33 -05:00
parent 0ad0ff508b
commit 982e5357a5
2 changed files with 77 additions and 83 deletions

View File

@ -137,22 +137,21 @@ protected:
std::filesystem::current_path(current_directory);
[[maybe_unused]] auto ret =
utils::file::directory(test_directory).remove_recursively();
/* if (PROVIDER_INDEX != 0) {
drive.reset();
provider.reset();
comm.reset();
config.reset();
event_system::instance().stop();
EXPECT_TRUE(utils::file::directory(
utils::path::combine(
test::get_test_output_dir(),
{"winfsp_test" + std::to_string(PROVIDER_INDEX)}))
.remove_recursively());
} */
}
public:
[[nodiscard]] static auto create_directory_and_test(std::string &dir_name)
-> std::string {
dir_name += std::to_string(++idx);
auto api_path = utils::path::create_api_path(dir_name);
auto dir_path = utils::path::combine(mount_location, {dir_name});
EXPECT_FALSE(::PathIsDirectoryA(dir_path.c_str()));
EXPECT_TRUE(::CreateDirectoryA(dir_path.c_str(), nullptr));
EXPECT_TRUE(::PathIsDirectoryA(dir_path.c_str()));
return dir_path;
}
[[nodiscard]] static auto create_file_and_test(std::string &file_name)
-> std::string {
file_name += std::to_string(++idx);
@ -179,6 +178,12 @@ public:
return file_path;
}
static void delete_directory_and_test(const std::string &dir_path) {
EXPECT_TRUE(::PathIsDirectoryA(dir_path.c_str()));
EXPECT_TRUE(::RemoveDirectoryA(dir_path.c_str()));
EXPECT_FALSE(::PathIsDirectoryA(dir_path.c_str()));
}
static void delete_file_and_test(std::string_view file_path) {
EXPECT_TRUE(utils::file::file(file_path).remove());
EXPECT_FALSE(utils::file::file(file_path).exists());
@ -225,6 +230,9 @@ std::filesystem::path winfsp_test<provider_t>::current_directory;
template <typename provider_t>
std::unique_ptr<curl_comm> winfsp_test<provider_t>::comm;
template <typename provider_t>
std::string winfsp_test<provider_t>::mount_location;
template <typename provider_t>
std::unique_ptr<i_provider> winfsp_test<provider_t>::provider;

View File

@ -24,72 +24,6 @@
#include "fixtures/winfsp_fixture.hpp"
namespace repertory {
// static void create_directory_test(const std::string &directory) {
// TEST_HEADER(__FUNCTION__);
//
// EXPECT_FALSE(::PathIsDirectory(&directory[0]));
// EXPECT_TRUE(::CreateDirectoryA(&directory[0], nullptr));
// EXPECT_TRUE(::PathIsDirectory(&directory[0]));
// }
//
// static void remove_directory_test(const std::string &directory) {
// TEST_HEADER(__FUNCTION__);
//
// event_capture ec({"directory_removed"});
// EXPECT_TRUE(::PathIsDirectory(&directory[0]));
// EXPECT_TRUE(::RemoveDirectoryA(&directory[0]));
// EXPECT_FALSE(::PathIsDirectory(&directory[0]));
// }
//
// static void write_file_test(const std::string &mount_point) {
// TEST_HEADER(__FUNCTION__);
//
// const auto file = utils::path::combine(mount_point, {"test_write.txt"});
// auto handle =
// ::CreateFileA(&file[0], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
// nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
// EXPECT_NE(INVALID_HANDLE_VALUE, handle);
// const std::string data = "0123456789";
// DWORD bytes_written = 0;
// EXPECT_TRUE(::WriteFile(handle, &data[0], static_cast<DWORD>(data.size()),
// &bytes_written, nullptr));
// EXPECT_EQ(10, bytes_written);
// EXPECT_TRUE(::CloseHandle(handle));
//
// EXPECT_TRUE(utils::file::file(file).exists());
//
// auto opt_size = utils::file::file(file).size();
// EXPECT_TRUE(opt_size.has_value());
// EXPECT_EQ(10U, opt_size.value());
// }
//
// static void read_file_test(const std::string &mount_point) {
// TEST_HEADER(__FUNCTION__);
//
// const auto file = utils::path::combine(mount_point, {"test_read.txt"});
// auto handle =
// ::CreateFileA(&file[0], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
// nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
// EXPECT_NE(INVALID_HANDLE_VALUE, handle);
// const std::string data = "0123456789";
// DWORD bytes_written = 0;
// EXPECT_TRUE(::WriteFile(handle, &data[0], static_cast<DWORD>(data.size()),
// &bytes_written, nullptr));
// EXPECT_EQ(10, bytes_written);
//
// data_buffer data2;
// data2.resize(10);
// DWORD bytes_read = 0;
// EXPECT_EQ(0, ::SetFilePointer(handle, 0, nullptr, FILE_BEGIN));
// EXPECT_TRUE(::ReadFile(handle, &data2[0], static_cast<DWORD>(data2.size()),
// &bytes_read, nullptr));
// EXPECT_EQ(10, bytes_read);
// for (auto i = 0; i < data.size(); i++) {
// EXPECT_EQ(data[i], data2[i]);
// }
// EXPECT_TRUE(::CloseHandle(handle));
// }
//
// static void rename_file_test(winfsp_test *test,
// const std::string &mount_point) {
// TEST_HEADER(__FUNCTION__);
@ -295,17 +229,69 @@ TYPED_TEST_CASE(winfsp_test, winfsp_provider_types);
TYPED_TEST(winfsp_test, root_is_created) {
WIN32_FILE_ATTRIBUTE_DATA ad{};
ASSERT_TRUE(::GetFileAttributesEx(mount_location.c_str(),
ASSERT_TRUE(::GetFileAttributesEx(this->mount_location.c_str(),
GetFileExInfoStandard, &ad));
EXPECT_EQ(FILE_ATTRIBUTE_DIRECTORY, ad.dwFileAttributes);
EXPECT_EQ(0, ad.nFileSizeHigh);
EXPECT_EQ(0, ad.nFileSizeLow);
}
TYPED_TEST(winfsp_test, can_create_and_delete_directory) {
std::string dir_name{"test_create_and_delete_dir"};
auto dir_path = this->create_directory_and_test(dir_name);
this->delete_directory_and_test(dir_path);
}
TYPED_TEST(winfsp_test, can_create_and_delete_file) {
std::string file_name{"test_create_and_delete"};
auto file_path = create_file_and_test(file_name);
delete_file_and_test(file_path);
std::string file_name{"test_create_and_delete_file"};
auto file_path = this->create_file_and_test(file_name);
this->delete_file_and_test(file_path);
}
TYPED_TEST(winfsp_test, can_write_to_and_read_from_file) {
std::string file_name{"test_write_file"};
auto file_path = this->create_file_and_test(file_name);
auto handle =
::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,
nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
EXPECT_NE(INVALID_HANDLE_VALUE, handle);
if (handle == INVALID_HANDLE_VALUE) {
return;
}
std::string write_buffer{"0123456789"};
{
DWORD bytes_written{0};
EXPECT_TRUE(::WriteFile(handle, write_buffer.c_str(),
static_cast<DWORD>(write_buffer.size()),
&bytes_written, nullptr));
EXPECT_EQ(static_cast<DWORD>(write_buffer.size()), bytes_written);
auto opt_size = utils::file::file(file_path).size();
EXPECT_TRUE(opt_size.has_value());
EXPECT_EQ(write_buffer.size(), opt_size.value());
}
{
data_buffer read_buffer;
read_buffer.resize(write_buffer.size());
DWORD bytes_read{0};
EXPECT_EQ(0, ::SetFilePointer(handle, 0, nullptr, FILE_BEGIN));
EXPECT_TRUE(::ReadFile(handle, read_buffer.data(),
static_cast<DWORD>(read_buffer.size()), &bytes_read,
nullptr));
EXPECT_EQ(static_cast<DWORD>(write_buffer.size()), bytes_read);
for (std::size_t idx = 0U; idx < read_buffer.size(); ++idx) {
EXPECT_EQ(write_buffer.at(idx), read_buffer.at(idx));
}
}
EXPECT_TRUE(::CloseHandle(handle));
this->delete_file_and_test(file_path);
}
} // namespace repertory