ntdll/tests: Add more tests for overlapped file read.

Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9dc63ca981)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
oldstable
Paul Gofman 2019-02-15 20:41:38 +03:00 committed by Michael Stefaniuc
parent 984f2a75b2
commit a2b99898e9
1 changed files with 42 additions and 1 deletions

View File

@ -598,8 +598,11 @@ static void delete_file_test(void)
pRtlFreeUnicodeString( &nameW );
}
#define TEST_OVERLAPPED_READ_SIZE 4096
static void read_file_test(void)
{
DECLSPEC_ALIGN(TEST_OVERLAPPED_READ_SIZE) static unsigned char aligned_buffer[TEST_OVERLAPPED_READ_SIZE];
const char text[] = "foobar";
HANDLE handle;
IO_STATUS_BLOCK iosb;
@ -711,7 +714,45 @@ static void read_file_test(void)
CloseHandle( handle );
CloseHandle( event );
if (!(handle = create_temp_file(FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING)))
return;
apc_count = 0;
offset.QuadPart = 0;
U(iosb).Status = 0xdeadbabe;
iosb.Information = 0xdeadbeef;
offset.QuadPart = 0;
ResetEvent(event);
status = pNtWriteFile(handle, event, apc, &apc_count, &iosb,
aligned_buffer, sizeof(aligned_buffer), &offset, NULL);
ok(status == STATUS_END_OF_FILE || status == STATUS_PENDING || status == STATUS_SUCCESS,
"Wrong status %x.\n", status);
ok(U(iosb).Status == STATUS_SUCCESS, "Wrong status %x.\n", U(iosb).Status);
ok(iosb.Information == sizeof(aligned_buffer), "Wrong info %lu.\n", iosb.Information);
ok(is_signaled(event), "event is not signaled.\n");
ok(!apc_count, "apc was called.\n");
SleepEx(1, TRUE); /* alertable sleep */
ok(apc_count == 1, "apc was not called.\n");
apc_count = 0;
offset.QuadPart = 0;
U(iosb).Status = 0xdeadbabe;
iosb.Information = 0xdeadbeef;
offset.QuadPart = 0;
ResetEvent(event);
status = pNtReadFile(handle, event, apc, &apc_count, &iosb,
aligned_buffer, sizeof(aligned_buffer), &offset, NULL);
todo_wine ok(status == STATUS_PENDING, "Wrong status %x.\n", status);
WaitForSingleObject(event, 1000);
ok(U(iosb).Status == STATUS_SUCCESS, "Wrong status %x.\n", U(iosb).Status);
ok(iosb.Information == sizeof(aligned_buffer), "Wrong info %lu.\n", iosb.Information);
ok(is_signaled(event), "event is not signaled.\n");
ok(!apc_count, "apc was called.\n");
SleepEx(1, TRUE); /* alertable sleep */
ok(apc_count == 1, "apc was not called.\n");
CloseHandle(handle);
CloseHandle(event);
}
static void append_file_test(void)