kernel32/tests: Add test for overlapped file read.
Signed-off-by: Paul Gofman <gofmanp@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
8acdd597d0
commit
3117370acc
|
@ -5140,6 +5140,70 @@ static void test_post_completion(void)
|
|||
CloseHandle( port );
|
||||
}
|
||||
|
||||
#define TEST_OVERLAPPED_READ_SIZE 4096
|
||||
|
||||
static void test_overlapped_read(void)
|
||||
{
|
||||
DECLSPEC_ALIGN(TEST_OVERLAPPED_READ_SIZE) static unsigned char buffer[TEST_OVERLAPPED_READ_SIZE];
|
||||
static const char prefix[] = "pfx";
|
||||
char temp_path[MAX_PATH];
|
||||
char file_name[MAX_PATH];
|
||||
DWORD bytes_count;
|
||||
OVERLAPPED ov;
|
||||
HANDLE hfile;
|
||||
DWORD err;
|
||||
DWORD ret;
|
||||
|
||||
ret = GetTempPathA(MAX_PATH, temp_path);
|
||||
ok(ret, "Unexpect error %u.\n", GetLastError());
|
||||
ret = GetTempFileNameA(temp_path, prefix, 0, file_name);
|
||||
ok(ret, "Unexpected error %u.\n", GetLastError());
|
||||
|
||||
hfile = CreateFileA(file_name, GENERIC_WRITE, 0,
|
||||
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL);
|
||||
ok(hfile != INVALID_HANDLE_VALUE, "Failed to create file, GetLastError() %u.\n", GetLastError());
|
||||
memset(buffer, 0x55, sizeof(buffer));
|
||||
ret = WriteFile(hfile, buffer, TEST_OVERLAPPED_READ_SIZE, &bytes_count, NULL);
|
||||
ok(ret && bytes_count == TEST_OVERLAPPED_READ_SIZE,
|
||||
"Unexpected WriteFile result, ret %#x, bytes_count %u, GetLastError() %u.\n",
|
||||
ret, bytes_count, GetLastError());
|
||||
CloseHandle(hfile);
|
||||
|
||||
hfile = CreateFileA(file_name, GENERIC_READ, FILE_SHARE_READ,
|
||||
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING, NULL);
|
||||
ok(hfile != INVALID_HANDLE_VALUE, "Failed to create file, GetLastError() %u.\n", GetLastError());
|
||||
|
||||
memset(&ov, 0, sizeof(ov));
|
||||
|
||||
bytes_count = 0xffffffff;
|
||||
ret = ReadFile(hfile, buffer, TEST_OVERLAPPED_READ_SIZE, &bytes_count, &ov);
|
||||
todo_wine ok(!ret && GetLastError() == ERROR_IO_PENDING,
|
||||
"Unexpected ReadFile result, ret %#x, GetLastError() %u.\n", ret, GetLastError());
|
||||
todo_wine ok(!bytes_count, "Unexpected read size %u.\n", bytes_count);
|
||||
ret = GetOverlappedResult(hfile, &ov, &bytes_count, TRUE);
|
||||
ok(ret, "Unexpected error %u.\n", GetLastError());
|
||||
ok(bytes_count == TEST_OVERLAPPED_READ_SIZE, "Unexpected read size %u.\n", bytes_count);
|
||||
|
||||
S(U(ov)).Offset = bytes_count;
|
||||
ret = ReadFile(hfile, buffer, TEST_OVERLAPPED_READ_SIZE, &bytes_count, &ov);
|
||||
err = GetLastError();
|
||||
/* Win8+ return ERROR_IO_PENDING like stated in MSDN, while older ones
|
||||
* return ERROR_HANDLE_EOF right away. */
|
||||
ok(!ret && (err == ERROR_HANDLE_EOF || err == ERROR_IO_PENDING),
|
||||
"Unexpected ReadFile result, ret %#x, GetLastError() %u.\n", ret, GetLastError());
|
||||
if (err == ERROR_IO_PENDING)
|
||||
{
|
||||
ret = GetOverlappedResult(hfile, &ov, &bytes_count, TRUE);
|
||||
ok(!ret && GetLastError() == ERROR_HANDLE_EOF, "Unexpected result %#x, GetLasttError() %u.\n",
|
||||
ret, GetLastError());
|
||||
}
|
||||
ok(!bytes_count, "Unexpected read size %u.\n", bytes_count);
|
||||
|
||||
CloseHandle(hfile);
|
||||
ret = DeleteFileA(file_name);
|
||||
ok(ret, "Unexpected error %u.\n", GetLastError());
|
||||
}
|
||||
|
||||
START_TEST(file)
|
||||
{
|
||||
char temp_path[MAX_PATH];
|
||||
|
@ -5209,4 +5273,5 @@ START_TEST(file)
|
|||
test_SetFileInformationByHandle();
|
||||
test_GetFileAttributesExW();
|
||||
test_post_completion();
|
||||
test_overlapped_read();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue