From: Jacek Caban Subject: [PATCH 14/16] kernel32/tests: Added tests of real buffer size. Message-Id: <1d0c727b-6f04-b695-4982-160dc6360163@codeweavers.com> Date: Thu, 26 Jan 2017 00:53:31 +0100 Signed-off-by: Jacek Caban --- dlls/kernel32/tests/pipe.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index f832d9a..c70bfb2 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -2264,9 +2264,31 @@ 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); + ok(CancelIo(pipe), "CancelIo failed\n"); +} + static void test_GetNamedPipeInfo(void) { - HANDLE server; + HANDLE server, client; server = CreateNamedPipeA(PIPENAME, PIPE_ACCESS_DUPLEX, /* dwOpenMode */ PIPE_TYPE_BYTE | PIPE_WAIT, @@ -2305,6 +2327,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, @@ -2317,7 +2346,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); }