ReactOS 0.4.16-dev-2522-g97cc325
Pipes.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Test for pipe (CORE-17376)
5 * COPYRIGHT: Copyright 2024 Simone Mario Lombardo <me@simonelombardo.com>
6 * Copyright 2024 Julen Urizar Compains <julenuri@hotmail.com>
7 */
8
9#include "precomp.h"
10
11static PCWSTR g_PipeName = L"\\\\.\\pipe\\rostest_pipe";
12
13#define MINBUFFERSIZE 1
14#define MAXBUFFERSIZE 255
15#define TEST_MESSAGE "Test"
16#define TEST_MESSAGE_SIZE (sizeof(TEST_MESSAGE) - sizeof(ANSI_NULL))
17
19
21{
22 HANDLE hPipe = (HANDLE)Param;
23 DWORD cbWritten = 0;
25
26 ok(Success, "WriteFile() failed, last error = 0x%lx\n", GetLastError());
27 ok_int(cbWritten, TEST_MESSAGE_SIZE);
28
29 return 0;
30}
31
33{
34 HANDLE hPipe = (HANDLE)Param;
35 CHAR outMsg[MAXBUFFERSIZE];
36
37 DWORD cbRead = 0;
38 BOOL Success = ReadFile(hPipe, outMsg, g_dwReadBufferSize, &cbRead, NULL);
39
41 ok(!Success, "ReadFile() succeeded unexpectedly\n");
42 else
43 ok(Success, "ReadFile() failed, last error = 0x%lx\n", GetLastError());
44
45 ok(cbRead != 0, "cbRead == 0\n");
46
49
50 return 0;
51}
52
54{
55 HANDLE hPipeReader, hPipeWriter, hThreadReader, hThreadWriter;
56 trace("adReadBufferSize = %lu - START\n", adReadBufferSize);
57
58 g_dwReadBufferSize = adReadBufferSize;
59
60 hPipeReader = CreateNamedPipeW(
64 1,
67 0,
68 NULL);
69 ok(hPipeReader != INVALID_HANDLE_VALUE, "CreateNamedPipeW failed\n");
70
71 if (hPipeReader == INVALID_HANDLE_VALUE)
72 return;
73
74 hThreadReader = CreateThread(NULL, 0, PipeReader, hPipeReader, 0, NULL);
75 ok(hThreadReader != INVALID_HANDLE_VALUE, "CreateThread failed\n");
76
77 hPipeWriter = CreateFileW(
81 NULL,
84 NULL);
85 ok(hPipeWriter != INVALID_HANDLE_VALUE, "CreateFileW failed\n");
86
87 if (hPipeWriter != INVALID_HANDLE_VALUE)
88 {
89 hThreadWriter = CreateThread(NULL, 0, PipeWriter, hPipeWriter, 0, NULL);
90 ok(hThreadWriter != INVALID_HANDLE_VALUE, "CreateThread failed\n");
91
92 if (hThreadWriter != INVALID_HANDLE_VALUE)
93 {
94 WaitForSingleObject(hThreadWriter, INFINITE);
95 CloseHandle(hThreadWriter);
96 }
97 CloseHandle(hPipeWriter);
98 }
99
100 if (hThreadReader != INVALID_HANDLE_VALUE)
101 {
102 WaitForSingleObject(hThreadReader, INFINITE);
103 CloseHandle(hThreadReader);
104 }
105 CloseHandle(hPipeReader);
106
107 trace("adReadBufferSize = %lu - COMPLETED\n", adReadBufferSize);
108}
109
111{
114}
DWORD WINAPI PipeWriter(_In_ PVOID Param)
Definition: Pipes.c:20
#define MINBUFFERSIZE
Definition: Pipes.c:13
static DWORD g_dwReadBufferSize
Definition: Pipes.c:18
#define MAXBUFFERSIZE
Definition: Pipes.c:14
#define TEST_MESSAGE_SIZE
Definition: Pipes.c:16
static PCWSTR g_PipeName
Definition: Pipes.c:11
DWORD WINAPI PipeReader(_In_ PVOID Param)
Definition: Pipes.c:32
VOID StartTestCORE17376(_In_ DWORD adReadBufferSize)
Definition: Pipes.c:53
#define ok_hex(expression, result)
Definition: atltest.h:94
#define trace
Definition: atltest.h:70
#define ok(value,...)
Definition: atltest.h:57
#define START_TEST(x)
Definition: atltest.h:75
#define ok_int(expression, result)
Definition: atltest.h:134
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define NULL
Definition: types.h:112
#define CloseHandle
Definition: compat.h:739
#define OPEN_EXISTING
Definition: compat.h:775
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define CreateFileW
Definition: compat.h:741
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
#define L(x)
Definition: resources.c:13
#define INFINITE
Definition: serial.h:102
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define _In_
Definition: no_sal2.h:158
HANDLE WINAPI CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: npipe.c:246
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define GENERIC_WRITE
Definition: nt_native.h:90
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
const uint16_t * PCWSTR
Definition: typedefs.h:57
PVOID HANDLE
Definition: typedefs.h:73
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define PIPE_ACCESS_DUPLEX
Definition: winbase.h:166
#define PIPE_READMODE_MESSAGE
Definition: winbase.h:172
#define PIPE_TYPE_MESSAGE
Definition: winbase.h:170
#define WINAPI
Definition: msvc.h:6
char CHAR
Definition: xmlstorage.h:175