diff --git a/repertory/repertory_test/src/winfsp_drive_test.cpp b/repertory/repertory_test/src/winfsp_drive_test.cpp index 58cc2388..cd111bb7 100644 --- a/repertory/repertory_test/src/winfsp_drive_test.cpp +++ b/repertory/repertory_test/src/winfsp_drive_test.cpp @@ -24,65 +24,6 @@ #include "fixtures/winfsp_fixture.hpp" namespace repertory { -// static void get_set_basic_info_test(const std::string &mount_point) { -// TEST_HEADER(__FUNCTION__); -// -// const auto file = -// utils::path::combine(mount_point, {"setbasicinfo_file.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); -// -// SYSTEMTIME st{}; -// ::GetSystemTime(&st); -// st.wMinute = 0; -// -// FILETIME test_ch_time{}; -// st.wMinute++; -// ::SystemTimeToFileTime(&st, &test_ch_time); -// -// FILETIME test_cr_time{}; -// st.wMinute++; -// ::SystemTimeToFileTime(&st, &test_cr_time); -// -// FILETIME test_la_time{}; -// st.wMinute++; -// ::SystemTimeToFileTime(&st, &test_la_time); -// -// FILETIME test_lw_time{}; -// st.wMinute++; -// ::SystemTimeToFileTime(&st, &test_lw_time); -// -// FILE_BASIC_INFO fbi{}; -// fbi.FileAttributes = FILE_ATTRIBUTE_HIDDEN; -// fbi.ChangeTime.HighPart = test_ch_time.dwHighDateTime; -// fbi.ChangeTime.LowPart = test_ch_time.dwLowDateTime; -// fbi.CreationTime = *(LARGE_INTEGER *)&test_cr_time; -// fbi.LastAccessTime = *(LARGE_INTEGER *)&test_la_time; -// fbi.LastWriteTime = *(LARGE_INTEGER *)&test_lw_time; -// -// EXPECT_TRUE(::SetFileInformationByHandle(handle, FileBasicInfo, &fbi, -// sizeof(FILE_BASIC_INFO))); -// -// FILE_BASIC_INFO fbi2{}; -// EXPECT_TRUE(::GetFileInformationByHandleEx(handle, FileBasicInfo, &fbi2, -// sizeof(FILE_BASIC_INFO))); -// -// EXPECT_EQ(0, memcmp(&fbi, &fbi2, sizeof(FILE_BASIC_INFO))); -// -// std::cout << fbi.FileAttributes << " " << fbi.ChangeTime.QuadPart << " " -// << fbi.CreationTime.QuadPart << " " << -// fbi.LastAccessTime.QuadPart -// << " " << fbi.LastWriteTime.QuadPart << std::endl; -// std::cout << fbi2.FileAttributes << " " << fbi2.ChangeTime.QuadPart << " " -// << fbi2.CreationTime.QuadPart << " " << -// fbi2.LastAccessTime.QuadPart -// << " " << fbi2.LastWriteTime.QuadPart << std::endl; -// -// EXPECT_TRUE(::CloseHandle(handle)); -// } -// TYPED_TEST_CASE(winfsp_test, winfsp_provider_types); @@ -216,6 +157,68 @@ TYPED_TEST(winfsp_test, can_overwrite_file) { this->delete_file_and_test(file_path); this->delete_file_and_test(file_path2); } + +TYPED_TEST(winfsp_test, can_get_and_set_basic_info_test) { + std::string file_name{"overwrite_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_WRITE | FILE_SHARE_DELETE, + nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); + EXPECT_NE(INVALID_HANDLE_VALUE, handle); + if (handle == INVALID_HANDLE_VALUE) { + return; + } + + SYSTEMTIME st{}; + ::GetSystemTime(&st); + st.wMinute = 0; + + FILETIME test_ch_time{}; + st.wMinute++; + ::SystemTimeToFileTime(&st, &test_ch_time); + + FILETIME test_cr_time{}; + st.wMinute++; + ::SystemTimeToFileTime(&st, &test_cr_time); + + FILETIME test_la_time{}; + st.wMinute++; + ::SystemTimeToFileTime(&st, &test_la_time); + + FILETIME test_lw_time{}; + st.wMinute++; + ::SystemTimeToFileTime(&st, &test_lw_time); + + FILE_BASIC_INFO fbi{}; + fbi.FileAttributes = FILE_ATTRIBUTE_HIDDEN; + fbi.ChangeTime.HighPart = static_cast(test_ch_time.dwHighDateTime); + fbi.ChangeTime.LowPart = test_ch_time.dwLowDateTime; + fbi.CreationTime = *reinterpret_cast(&test_cr_time); + fbi.LastAccessTime = *reinterpret_cast(&test_la_time); + fbi.LastWriteTime = *reinterpret_cast(&test_lw_time); + + EXPECT_TRUE(::SetFileInformationByHandle(handle, FileBasicInfo, &fbi, + sizeof(FILE_BASIC_INFO))); + + FILE_BASIC_INFO fbi2{}; + EXPECT_TRUE(::GetFileInformationByHandleEx(handle, FileBasicInfo, &fbi2, + sizeof(FILE_BASIC_INFO))); + + EXPECT_EQ(0, memcmp(&fbi, &fbi2, sizeof(FILE_BASIC_INFO))); + + std::cout << fbi.FileAttributes << " " << fbi.ChangeTime.QuadPart << " " + << fbi.CreationTime.QuadPart << " " << fbi.LastAccessTime.QuadPart + << " " << fbi.LastWriteTime.QuadPart << std::endl; + std::cout << fbi2.FileAttributes << " " << fbi2.ChangeTime.QuadPart << " " + << fbi2.CreationTime.QuadPart << " " << fbi2.LastAccessTime.QuadPart + << " " << fbi2.LastWriteTime.QuadPart << std::endl; + + EXPECT_TRUE(::CloseHandle(handle)); + + this->delete_file_and_test(file_path); +} } // namespace repertory #endif // defined(_WIN32)