kernel32: Add write watch test on OVERLAPPED structure.
Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
fd60406e91
commit
37d2b5843f
|
@ -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 );
|
||||
|
|
Loading…
Reference in New Issue