diff --git a/repertory/repertory_test/src/winfsp_drive_rdrw_test.cpp b/repertory/repertory_test/src/winfsp_drive_rdrw_test.cpp index 5a7e8932..00844996 100644 --- a/repertory/repertory_test/src/winfsp_drive_rdrw_test.cpp +++ b/repertory/repertory_test/src/winfsp_drive_rdrw_test.cpp @@ -350,67 +350,64 @@ static void test_overlapped_file(auto mount_location, auto &&file_path, EXPECT_EQ(0, std::memcmp(write_buffer.data(), read_buffer.data(), bytes_read)); - // overlapped.Offset = 0; - // ret = WriteFile(handle, Buffer[0], 2 * SystemInfo.dwPageSize, - // &BytesTransferred, &overlapped); - // ASSERT(ret || ERROR_IO_PENDING == ::GetLastError()); - // ret = GetOverlappedResult(handle, &overlapped, &BytesTransferred, - // TRUE); ASSERT(ret); ASSERT(2 * SystemInfo.dwPageSize == - // BytesTransferred); - // - // overlapped.Offset = 0; - // memset(AllocBuffer[1], 0, AllocBufferSize); - // ret = ReadFile(handle, Buffer[1], 2 * SystemInfo.dwPageSize, - // &BytesTransferred, &overlapped); - // ASSERT(ret || ERROR_IO_PENDING == ::GetLastError()); - // ret = GetOverlappedResult(handle, &overlapped, &BytesTransferred, - // TRUE); ASSERT(ret); ASSERT(2 * SystemInfo.dwPageSize == - // BytesTransferred); ASSERT(0 == memcmp(Buffer[0], Buffer[1], - // BytesTransferred)); - // - // Buffer[0] = AllocBuffer[0]; - // Buffer[1] = AllocBuffer[0]; - // - // overlapped.Offset = 0; - // ret = WriteFile(handle, Buffer[0], 2 * SystemInfo.dwPageSize, - // &BytesTransferred, &overlapped); - // ASSERT(ret || ERROR_IO_PENDING == ::GetLastError()); - // ret = GetOverlappedResult(handle, &overlapped, &BytesTransferred, - // TRUE); ASSERT(ret); ASSERT(2 * SystemInfo.dwPageSize == - // BytesTransferred); - // - // overlapped.Offset = 0; - // memset(AllocBuffer[1], 0, AllocBufferSize); - // ret = ReadFile(handle, Buffer[1], 2 * SystemInfo.dwPageSize, - // &BytesTransferred, &overlapped); - // ASSERT(ret || ERROR_IO_PENDING == ::GetLastError()); - // ret = GetOverlappedResult(handle, &overlapped, &BytesTransferred, - // TRUE); ASSERT(ret); ASSERT(2 * SystemInfo.dwPageSize == - // BytesTransferred); ASSERT(0 == memcmp(Buffer[0], Buffer[1], - // BytesTransferred)); - // - // overlapped.Offset = 0; - // ret = - // WriteFile(handle, Buffer[0], 2 * SystemInfo.dwPageSize + - // bytes_per_sector, - // &BytesTransferred, &overlapped); - // ASSERT(ret || ERROR_IO_PENDING == ::GetLastError()); - // ret = GetOverlappedResult(handle, &overlapped, &BytesTransferred, - // TRUE); ASSERT(ret); ASSERT(2 * SystemInfo.dwPageSize + bytes_per_sector - // == BytesTransferred); - // - // overlapped.Offset = 0; - // memset(AllocBuffer[1], 0, AllocBufferSize); - // ret = - // ReadFile(handle, Buffer[1], 2 * SystemInfo.dwPageSize + - // bytes_per_sector, - // &BytesTransferred, &overlapped); - // ASSERT(ret || ERROR_IO_PENDING == ::GetLastError()); - // ret = GetOverlappedResult(handle, &overlapped, &BytesTransferred, - // TRUE); ASSERT(ret); ASSERT(2 * SystemInfo.dwPageSize + bytes_per_sector - // == BytesTransferred); ASSERT(0 == memcmp(Buffer[0], Buffer[1], - // BytesTransferred)); - // + overlapped.Offset = 0U; + ret = ::WriteFile(handle, write_buffer.data(), 2U * sys_info.dwPageSize, + &bytes_written, &overlapped); + EXPECT_TRUE(ret || ERROR_IO_PENDING == ::GetLastError()); + EXPECT_TRUE(::GetOverlappedResult(handle, &overlapped, &bytes_written, TRUE)); + EXPECT_EQ(2U * sys_info.dwPageSize, bytes_written); + + read_buffer.clear(); + read_buffer.resize(buffer_size); + overlapped.Offset = 0U; + ret = ::ReadFile(handle, read_buffer.data(), 2U * sys_info.dwPageSize, + &bytes_read, &overlapped); + EXPECT_TRUE(ret || ERROR_IO_PENDING == ::GetLastError()); + EXPECT_TRUE(::GetOverlappedResult(handle, &overlapped, &bytes_read, TRUE)); + EXPECT_EQ(2U * sys_info.dwPageSize, bytes_read); + EXPECT_EQ(0, + std::memcmp(write_buffer.data(), read_buffer.data(), bytes_read)); + + write_buffer = utils::generate_secure_random(buffer_size); + + overlapped.Offset = 0U; + ret = ::WriteFile(handle, write_buffer.data(), 2U * sys_info.dwPageSize, + &bytes_written, &overlapped); + EXPECT_TRUE(ret || ERROR_IO_PENDING == ::GetLastError()); + EXPECT_TRUE(::GetOverlappedResult(handle, &overlapped, &bytes_written, TRUE)); + EXPECT_EQ(2U * sys_info.dwPageSize, bytes_written); + + read_buffer.clear(); + read_buffer.resize(buffer_size); + overlapped.Offset = 0U; + ret = ::ReadFile(handle, read_buffer.data(), 2U * sys_info.dwPageSize, + &bytes_read, &overlapped); + EXPECT_TRUE(ret || ERROR_IO_PENDING == ::GetLastError()); + EXPECT_TRUE(::GetOverlappedResult(handle, &overlapped, &bytes_read, TRUE)); + EXPECT_EQ(2U * sys_info.dwPageSize, bytes_read); + EXPECT_EQ(0, + std::memcmp(write_buffer.data(), read_buffer.data(), bytes_read)); + + overlapped.Offset = 0U; + ret = ::WriteFile(handle, write_buffer.data(), + 2U * sys_info.dwPageSize + bytes_per_sector, &bytes_written, + &overlapped); + EXPECT_EQ(ret || ERROR_IO_PENDING == ::GetLastError()); + EXPECT_TRUE(::GetOverlappedResult(handle, &overlapped, &bytes_written, TRUE)); + EXPECT_EQ(2U * sys_info.dwPageSize + bytes_per_sector, bytes_written); + + read_buffer.clear(); + read_buffer.resize(buffer_size); + overlapped.Offset = 0U; + ret = ::ReadFile(handle, read_buffer.data(), + 2U * sys_info.dwPageSize + bytes_per_sector, &bytes_read, + &overlapped); + EXPECT_TRUE(ret || ERROR_IO_PENDING == ::GetLastError()); + EXPECT_TRUE(::GetOverlappedResult(handle, &overlapped, &bytes_read, TRUE)); + EXPECT_EQ(2U * sys_info.dwPageSize + bytes_per_sector, bytes_read); + EXPECT_EQ(0, + std::memcmp(write_buffer.data(), read_buffer.data(), bytes_read)); + EXPECT_TRUE(::CloseHandle(handle)); handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, @@ -420,33 +417,22 @@ static void test_overlapped_file(auto mount_location, auto &&file_path, nullptr); ASSERT_NE(INVALID_HANDLE_VALUE, handle); - // overlapped.Offset = 0; - // memset(AllocBuffer[1], 0, AllocBufferSize); - // ret = - // ReadFile(handle, Buffer[1], 2 * SystemInfo.dwPageSize + - // bytes_per_sector, - // &BytesTransferred, &overlapped); - // ASSERT(ret || ERROR_IO_PENDING == ::GetLastError()); - // ret = GetOverlappedResult(handle, &overlapped, &BytesTransferred, - // TRUE); ASSERT(ret); ASSERT(2 * SystemInfo.dwPageSize + bytes_per_sector - // == BytesTransferred); ASSERT(0 == memcmp(Buffer[0], Buffer[1], - // BytesTransferred)); - // - // ret = CloseHandle(Handle); - // ASSERT(ret); - // - // handle = - // CreateFileW(FilePath, GENERIC_READ | GENERIC_WRITE, - // FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, - // 0); - // ASSERT(INVALID_HANDLE_VALUE == handle); - // ASSERT(ERROR_FILE_NOT_FOUND == ::GetLastError()); - // - // ret = CloseHandle(overlapped.hEvent); - // ASSERT(ret); + read_buffer.clear(); + read_buffer.resize(buffer_size); + overlapped.Offset = 0U; + ret = ::ReadFile(handle, read_buffer.data(), + 2U * sys_info.dwPageSize + bytes_per_sector, &bytes_read, + &overlapped); + EXPECT_TRUE(ret || ERROR_IO_PENDING == ::GetLastError()); + EXPECT_TRUE(::GetOverlappedResult(handle, &overlapped, &bytes_read, TRUE)); + EXPECT_EQ(2U * sys_info.dwPageSize + bytes_per_sector, bytes_read); + EXPECT_EQ(0, + std::memcmp(write_buffer.data(), read_buffer.data(), bytes_read)); EXPECT_TRUE(::CloseHandle(handle)); + EXPECT_TRUE(::CloseHandle(overlapped.hEvent)); + handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);