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