Piotr Caban : kernel32: Add write watch test on OVERLAPPED structure.

Alexandre Julliard julliard at winehq.org
Thu Oct 3 16:44:01 CDT 2019


Module: wine
Branch: master
Commit: 37d2b5843f6f3d5bb18b7bf9445c7019cf25a56d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=37d2b5843f6f3d5bb18b7bf9445c7019cf25a56d

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Oct  3 20:54:32 2019 +0200

kernel32: Add write watch test on OVERLAPPED structure.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/virtual.c | 63 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)

diff --git a/dlls/kernel32/tests/virtual.c b/dlls/kernel32/tests/virtual.c
index bde71b9c64..9a35bfe290 100644
--- a/dlls/kernel32/tests/virtual.c
+++ b/dlls/kernel32/tests/virtual.c
@@ -1602,7 +1602,7 @@ static void test_write_watch(void)
     DWORD ret, size, old_prot, num_bytes;
     MEMORY_BASIC_INFORMATION info;
     HANDLE readpipe, writepipe, file;
-    OVERLAPPED overlapped;
+    OVERLAPPED overlapped, *overlapped2;
     void *results[64];
     ULONG_PTR count;
     ULONG i, pagesize;
@@ -1906,6 +1906,67 @@ static void test_write_watch(void)
     ok( !ret, "GetWriteWatch failed %u\n", GetLastError() );
     ok( count == 0, "wrong count %lu\n", count );
 
+    /* OVERLAPPED structure write watch */
+    memset( &overlapped, 0, sizeof(overlapped) );
+    overlapped.hEvent = CreateEventA( NULL, TRUE, FALSE, NULL );
+
+    readpipe = CreateNamedPipeA( pipename, FILE_FLAG_OVERLAPPED | PIPE_ACCESS_INBOUND,
+                                 PIPE_TYPE_MESSAGE | PIPE_WAIT, 1, 1024, 1024,
+                                 NMPWAIT_USE_DEFAULT_WAIT, NULL );
+    ok( readpipe != INVALID_HANDLE_VALUE, "CreateNamedPipeA failed %u\n", GetLastError() );
+
+    success = ConnectNamedPipe( readpipe, &overlapped );
+    ok( !success, "ConnectNamedPipe unexpectedly succeeded\n" );
+    ok( GetLastError() == ERROR_IO_PENDING, "expected ERROR_IO_PENDING, got %u\n", GetLastError() );
+
+    writepipe = CreateFileA( pipename, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
+    ok( writepipe != INVALID_HANDLE_VALUE, "CreateFileA failed %u\n", GetLastError() );
+
+    ret = WaitForSingleObject( overlapped.hEvent, 1000 );
+    ok( ret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", ret );
+
+    memset( base, 0, size );
+    overlapped2 = (OVERLAPPED*)(base + size - sizeof(*overlapped2));
+    overlapped2->hEvent = CreateEventA( NULL, TRUE, FALSE, NULL );
+
+    count = 64;
+    ret = pGetWriteWatch( WRITE_WATCH_FLAG_RESET, base, size, results, &count, &pagesize );
+    ok( !ret, "GetWriteWatch failed %u\n", GetLastError() );
+    ok( count == 16, "wrong count %lu\n", count );
+
+    success = ReadFile( readpipe, base, sizeof(testdata), NULL, overlapped2 );
+    ok( !success, "ReadFile unexpectedly succeeded\n" );
+    ok( GetLastError() == ERROR_IO_PENDING, "expected ERROR_IO_PENDING, got %u\n", GetLastError() );
+    overlapped2->Internal = 0xdeadbeef;
+
+    count = 64;
+    ret = pGetWriteWatch( WRITE_WATCH_FLAG_RESET, base, size, results, &count, &pagesize );
+    ok( !ret, "GetWriteWatch failed %u\n", GetLastError() );
+    ok( count == 2, "wrong count %lu\n", count );
+
+    num_bytes = 0;
+    success = WriteFile( writepipe, testdata, sizeof(testdata), &num_bytes, NULL );
+    ok( success, "WriteFile failed %u\n", GetLastError() );
+    ok( num_bytes == sizeof(testdata), "wrong number of bytes written %u\n", num_bytes );
+
+    num_bytes = 0;
+    success = GetOverlappedResult( readpipe, overlapped2, &num_bytes, TRUE );
+    ok( success, "GetOverlappedResult failed %u\n", GetLastError() );
+    ok( num_bytes == sizeof(testdata), "wrong number of bytes read %u\n", num_bytes );
+    ok( !memcmp( base, testdata, sizeof(testdata)), "didn't receive expected data\n" );
+
+    count = 64;
+    memset( results, 0, sizeof(results) );
+    ret = pGetWriteWatch( WRITE_WATCH_FLAG_RESET, base, size, results, &count, &pagesize );
+    ok( !ret, "GetWriteWatch failed %u\n", GetLastError() );
+    ok( count == 2, "wrong count %lu\n", count );
+    ok( results[0] == base, "wrong result %p\n", results[0] );
+
+    CloseHandle( readpipe );
+    CloseHandle( writepipe );
+    CloseHandle( overlapped.hEvent );
+    CloseHandle( overlapped2->hEvent );
+
     /* some invalid parameter tests */
 
     SetLastError( 0xdeadbeef );




More information about the wine-cvs mailing list