Juan Lang : kernel32: Add more tests for getting/setting a named pipe' s state.

Alexandre Julliard julliard at winehq.org
Thu Feb 12 11:14:44 CST 2009


Module: wine
Branch: master
Commit: c82722b3dc40ab64a9e769e216af0f561e9e50e0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c82722b3dc40ab64a9e769e216af0f561e9e50e0

Author: Juan Lang <juan.lang at gmail.com>
Date:   Wed Feb 11 10:12:31 2009 -0800

kernel32: Add more tests for getting/setting a named pipe's state.

---

 dlls/kernel32/tests/pipe.c |  112 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 112 insertions(+), 0 deletions(-)

diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index 41ec1ab..ee10974 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -1323,6 +1323,117 @@ static void test_overlapped(void)
     CloseHandle(thread);
 }
 
+static void test_NamedPipeHandleState(void)
+{
+    HANDLE server, client;
+    BOOL ret;
+    DWORD state, instances, maxCollectionCount, collectDataTimeout;
+    char userName[MAX_PATH];
+
+    server = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX,
+        /* dwOpenMode */ PIPE_TYPE_BYTE | PIPE_WAIT,
+        /* nMaxInstances */ 1,
+        /* nOutBufSize */ 1024,
+        /* nInBufSize */ 1024,
+        /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT,
+        /* lpSecurityAttrib */ NULL);
+    ok(server != INVALID_HANDLE_VALUE, "cf failed\n");
+    ret = GetNamedPipeHandleState(server, NULL, NULL, NULL, NULL, NULL, 0);
+    todo_wine
+    ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+    ret = GetNamedPipeHandleState(server, &state, &instances, NULL, NULL, NULL,
+        0);
+    todo_wine
+    ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+    if (ret)
+    {
+        ok(state == 0, "unexpected state %08x\n", state);
+        ok(instances == 1, "expected 1 instances, got %d\n", instances);
+    }
+    /* Some parameters have no meaning, and therefore can't be retrieved,
+     * on a local pipe.
+     */
+    SetLastError(0xdeadbeef);
+    ret = GetNamedPipeHandleState(server, &state, &instances,
+        &maxCollectionCount, &collectDataTimeout, userName,
+        sizeof(userName) / sizeof(userName[0]));
+    todo_wine
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+       "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+    /* A byte-mode pipe server can't be changed to message mode. */
+    state = PIPE_READMODE_MESSAGE;
+    SetLastError(0xdeadbeef);
+    ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
+    todo_wine
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+       "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+
+    client = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, NULL,
+        OPEN_EXISTING, 0, NULL);
+    ok(client != INVALID_HANDLE_VALUE, "cf failed\n");
+
+    state = PIPE_READMODE_BYTE;
+    ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
+    todo_wine
+    ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+    /* A byte-mode pipe client can't be changed to message mode, either. */
+    state = PIPE_READMODE_MESSAGE;
+    SetLastError(0xdeadbeef);
+    ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
+    todo_wine
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+       "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+
+    CloseHandle(client);
+    CloseHandle(server);
+
+    server = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX,
+        /* dwOpenMode */ PIPE_TYPE_MESSAGE | PIPE_WAIT,
+        /* nMaxInstances */ 1,
+        /* nOutBufSize */ 1024,
+        /* nInBufSize */ 1024,
+        /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT,
+        /* lpSecurityAttrib */ NULL);
+    ok(server != INVALID_HANDLE_VALUE, "cf failed\n");
+    ret = GetNamedPipeHandleState(server, NULL, NULL, NULL, NULL, NULL, 0);
+    todo_wine
+    ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+    ret = GetNamedPipeHandleState(server, &state, &instances, NULL, NULL, NULL,
+        0);
+    todo_wine
+    ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+    if (ret)
+    {
+        ok(state == 0, "unexpected state %08x\n", state);
+        ok(instances == 1, "expected 1 instances, got %d\n", instances);
+    }
+    /* In contrast to byte-mode pipes, a message-mode pipe server can be
+     * changed to byte mode.
+     */
+    state = PIPE_READMODE_BYTE;
+    ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
+    todo_wine
+    ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+
+    client = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, NULL,
+        OPEN_EXISTING, 0, NULL);
+    ok(client != INVALID_HANDLE_VALUE, "cf failed\n");
+
+    state = PIPE_READMODE_MESSAGE;
+    ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
+    todo_wine
+    ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+    /* A message-mode pipe client can also be changed to byte mode.
+     */
+    state = PIPE_READMODE_BYTE;
+    ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
+    todo_wine
+    ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+
+    CloseHandle(client);
+    CloseHandle(server);
+}
+
 START_TEST(pipe)
 {
     HMODULE hmod;
@@ -1339,4 +1450,5 @@ START_TEST(pipe)
     test_CreatePipe();
     test_impersonation();
     test_overlapped();
+    test_NamedPipeHandleState();
 }




More information about the wine-cvs mailing list