Paul Gofman : ntdll/tests: Add more tests for overlapped file read.
Alexandre Julliard
julliard at winehq.org
Tue Feb 19 15:29:34 CST 2019
Module: wine
Branch: master
Commit: 9dc63ca9813b9aec1384160afb19a8be9061d9ec
URL: https://source.winehq.org/git/wine.git/?a=commit;h=9dc63ca9813b9aec1384160afb19a8be9061d9ec
Author: Paul Gofman <gofmanp at gmail.com>
Date: Fri Feb 15 20:41:38 2019 +0300
ntdll/tests: Add more tests for overlapped file read.
Signed-off-by: Paul Gofman <gofmanp at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/tests/file.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 8391570..7b35569 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -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)
More information about the wine-cvs
mailing list