[PATCH 1/4] kernel32/tests: Add tests for named pipes in PIPE_NOWAIT mode.

Jacek Caban jacek at codeweavers.com
Tue Oct 1 11:41:22 CDT 2019


Hi Brendan,

On 10/1/19 6:16 PM, Brendan Shanks wrote:
> Signed-off-by: Brendan Shanks <bshanks at codeweavers.com>
> ---
>   dlls/kernel32/tests/pipe.c | 108 +++++++++++++++++++++++++++++++++++++
>   1 file changed, 108 insertions(+)
>
> diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
> index f61d441303..227575ece3 100644
> --- a/dlls/kernel32/tests/pipe.c
> +++ b/dlls/kernel32/tests/pipe.c
> @@ -3887,6 +3887,113 @@ static void test_wait_pipe(void)
>       CloseHandle(ov.hEvent);
>   }
>   
> +static DWORD CALLBACK test_nowait_read_thread(LPVOID arg)
> +{
> +    HANDLE *pipewrite = arg;
> +    static const char buf[] = "bits";
> +    DWORD written;
> +
> +    Sleep(2000);
> +    WriteFile(*pipewrite, buf, sizeof(buf), &written, NULL);
> +    return 0;
> +}
> +static DWORD CALLBACK test_nowait_write_thread(LPVOID arg)
> +{
> +    HANDLE *piperead = arg;
> +    char buf[32768];
> +    DWORD read;
> +
> +    Sleep(2000);
> +    ReadFile(*piperead, buf, sizeof(buf), &read, NULL);
> +    return 0;
> +}
> +static DWORD CALLBACK test_nowait_connect_thread(LPVOID arg)
> +{
> +    HANDLE hFile;
> +
> +    Sleep(2000);
> +    hFile = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
> +    ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA failed\n");
> +    ok(CloseHandle(hFile), "CloseHandle failed\n");
> +    return 0;
> +}


I'd expect that those tests would be more reliable and cleaner if you 
used overlapped handles. You could have one pipe end non-blocking and 
the other end overlapped to test everything using one thread in a 
predictable way. If you carefully choose buffer sizes, you could make 
those tests more precise. See test_blocking_rw for an example.


> +    /* WriteFile only documents that 'write < sizeof(readbuf)' for this case, but Windows
> +     * doesn't seem to do partial writes ('write == 0' always)
> +     */


If Windows doesn't do partial writes, it would be actually interesting 
to test and implement.


Thanks,

Jacek




More information about the wine-devel mailing list