From: Jacek Caban Subject: [PATCH 10/10] kernel32/tests: Added tests of real buffer size. Message-Id: Date: Wed, 19 Oct 2016 19:05:47 +0200 Signed-off-by: Jacek Caban --- dlls/kernel32/tests/pipe.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index c9dec31..62d9408 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -2240,9 +2240,30 @@ static void _test_pipe_info(unsigned line, HANDLE pipe, DWORD ex_flags, DWORD ex ok_(__FILE__,line)(max_instances == ex_max_instances, "max_instances = %x, expected %u\n", max_instances, ex_max_instances); } +static void test_real_buf_size(HANDLE pipe, DWORD ex_size) +{ + OVERLAPPED overlapped = {0}; + DWORD size = 0, written; + char *buf; + char byte = 0; + + if(ex_size > 100) { + buf = HeapAlloc(GetProcessHeap(), 0, ex_size-10); + memset(buf, 'a', ex_size-10); + ok(WriteFile(pipe, buf, ex_size-10, NULL, &overlapped), "WriteFile failed: %u\n", GetLastError()); + HeapFree(GetProcessHeap(), 0, buf); + size = ex_size-10; + } + + /* write bytes until WriteFile blocks */ + while(WriteFile(pipe, &byte, 1, &written, &overlapped)) size++; + ok(GetLastError() == ERROR_IO_PENDING, "GetLastError() = %u\n", GetLastError()); + ok(size == ex_size, "got size %u, expected %u\n", size, ex_size); +} + static void test_GetNamedPipeInfo(void) { - HANDLE server; + HANDLE server, client; server = CreateNamedPipeA(PIPENAME, PIPE_ACCESS_DUPLEX, /* dwOpenMode */ PIPE_TYPE_BYTE | PIPE_WAIT, @@ -2281,6 +2302,13 @@ static void test_GetNamedPipeInfo(void) test_pipe_info(server, PIPE_SERVER_END | PIPE_TYPE_MESSAGE, 0, 0, 1); + client = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); + ok(client != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError()); + + test_pipe_info(server, PIPE_SERVER_END | PIPE_TYPE_MESSAGE, 0, 0, 1); + test_real_buf_size(server, 0); + + CloseHandle(client); CloseHandle(server); server = CreateNamedPipeA(PIPENAME, FILE_FLAG_OVERLAPPED | PIPE_ACCESS_DUPLEX, @@ -2293,7 +2321,13 @@ static void test_GetNamedPipeInfo(void) ok(server != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n"); test_pipe_info(server, PIPE_SERVER_END | PIPE_TYPE_MESSAGE, 0xf000, 0xf000, 1); + client = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); + ok(client != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError()); + test_pipe_info(server, PIPE_SERVER_END | PIPE_TYPE_MESSAGE, 0xf000, 0xf000, 1); + test_real_buf_size(server, 0xf000); + + CloseHandle(client); CloseHandle(server); }