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