diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index 7ce6ae3a257c232ae05181bf62f0c0815bfbcf1b..4f1b2385ce0901927b148167d839c54b24f05c81 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -1432,6 +1432,35 @@ static void test_CloseHandle(void) CloseHandle(hfile); + hpipe = CreateNamedPipeA(PIPENAME, PIPE_ACCESS_DUPLEX, + PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, + 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL); + ok(hpipe != INVALID_HANDLE_VALUE, "CreateNamedPipe failed with %u\n", GetLastError()); + + hfile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + ok(hfile != INVALID_HANDLE_VALUE, "CreateFile failed with %u\n", GetLastError()); + + numbytes = 0xdeadbeef; + ret = WriteFile(hpipe, testdata, 0, &numbytes, NULL); + ok(ret, "WriteFile failed with %u\n", GetLastError()); + ok(numbytes == 0, "expected 0, got %u\n", numbytes); + + ret = CloseHandle(hpipe); + ok(ret, "CloseHandle failed with %u\n", GetLastError()); + + numbytes = 0xdeadbeef; + memset(buffer, 0, sizeof(buffer)); + ret = ReadFile(hfile, buffer, sizeof(buffer), &numbytes, NULL); + todo_wine ok(ret, "ReadFile failed with %u\n", GetLastError()); + ok(numbytes == 0, "expected 0, got %u\n", numbytes); + + SetLastError(0xdeadbeef); + ret = ReadFile(hfile, buffer, 0, &numbytes, NULL); + ok(!ret, "ReadFile unexpectedly succeeded\n"); + todo_wine ok(GetLastError() == ERROR_BROKEN_PIPE, "expected ERROR_BROKEN_PIPE, got %u\n", GetLastError()); + + CloseHandle(hfile); + /* repeat test with hpipe <-> hfile swapped */ hpipe = CreateNamedPipeA(PIPENAME, PIPE_ACCESS_DUPLEX, @@ -1474,6 +1503,35 @@ static void test_CloseHandle(void) ok(GetLastError() == ERROR_BROKEN_PIPE, "expected ERROR_BROKEN_PIPE, got %u\n", GetLastError()); CloseHandle(hpipe); + + hpipe = CreateNamedPipeA(PIPENAME, PIPE_ACCESS_DUPLEX, + PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, + 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL); + ok(hpipe != INVALID_HANDLE_VALUE, "CreateNamedPipe failed with %u\n", GetLastError()); + + hfile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); + ok(hfile != INVALID_HANDLE_VALUE, "CreateFile failed with %u\n", GetLastError()); + + numbytes = 0xdeadbeef; + ret = WriteFile(hfile, testdata, 0, &numbytes, NULL); + ok(ret, "WriteFile failed with %u\n", GetLastError()); + ok(numbytes == 0, "expected 0, got %u\n", numbytes); + + ret = CloseHandle(hfile); + ok(ret, "CloseHandle failed with %u\n", GetLastError()); + + numbytes = 0xdeadbeef; + memset(buffer, 0, sizeof(buffer)); + ret = ReadFile(hpipe, buffer, sizeof(buffer), &numbytes, NULL); + todo_wine ok(ret, "ReadFile failed with %u\n", GetLastError()); + ok(numbytes == 0, "expected 0, got %u\n", numbytes); + + SetLastError(0xdeadbeef); + ret = ReadFile(hpipe, buffer, 0, &numbytes, NULL); + ok(!ret, "ReadFile unexpectedly succeeded\n"); + ok(GetLastError() == ERROR_BROKEN_PIPE, "expected ERROR_BROKEN_PIPE, got %u\n", GetLastError()); + + CloseHandle(hpipe); } struct named_pipe_client_params