make pipe test compile on windows

Dan Kegel dank at kegel.com
Thu Feb 20 12:17:20 CST 2003


dlls/kernel/tests/pipe.c : now compiles on windows.  Added a couple more checks.

-- 
Dan Kegel
http://www.kegel.com
http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=78045
-------------- next part --------------
Index: dlls/kernel/tests/pipe.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/pipe.c,v
retrieving revision 1.1
diff -u -p -d -u -r1.1 pipe.c
--- dlls/kernel/tests/pipe.c	19 Feb 2003 22:06:36 -0000	1.1
+++ dlls/kernel/tests/pipe.c	20 Feb 2003 18:06:57 -0000
@@ -28,12 +28,13 @@
 #include <assert.h>
 #define START_TEST(name) main(int argc, char **argv)
 #define ok(condition, msg) assert(condition)
+#define todo_wine
 #endif
 
+#include <wtypes.h>
 #include <windef.h>
 #include <winbase.h>
 #include <winerror.h>
-#include <wtypes.h>
 
 #define PIPENAME "\\\\.\\PiPe\\tests_" __FILE__
 
@@ -70,6 +71,10 @@ void test_CreateNamedPipeA(void)
     ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_PATH_NOT_FOUND,
         "CreateNamedPipe should fail if name is NULL");
 
+    hFile = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, 
+	NULL, OPEN_EXISTING, 0, 0);
+    ok(hFile == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_NOT_FOUND, "connecting to nonexistent named pipe should fail with ERROR_FILE_NOT_FOUND");
+
     /* Functional checks */
 
     hnp = CreateNamedPipeA(PIPENAME,
@@ -90,6 +95,8 @@ void test_CreateNamedPipeA(void)
 
     /* don't try to do i/o if one side couldn't be opened, as it hangs */
     if (hFile != INVALID_HANDLE_VALUE) {
+	HANDLE hFile2;
+
 	/* Make sure we can read and write a few bytes in both directions*/
 	memset(ibuf, 0, sizeof(ibuf));
 	ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile");
@@ -105,10 +112,42 @@ void test_CreateNamedPipeA(void)
 	ok(gelesen == sizeof(obuf), "read file len");
 	ok(memcmp(obuf, ibuf, written) == 0, "content check");
 
-	CloseHandle(hFile);
+	/* Picky conformance tests */
+
+	/* Verify that you can't connect to pipe again
+	 * until server calls DisconnectNamedPipe+ConnectNamedPipe
+	 * or creates a new pipe
+	 * case 1: other client not yet closed
+	 */
+	hFile2 = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, 
+	    NULL, OPEN_EXISTING, 0, 0);
+	ok(hFile2 == INVALID_HANDLE_VALUE, "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail");
+	ok(GetLastError() == ERROR_PIPE_BUSY, "connecting to named pipe before other client closes should fail with ERROR_PIPE_BUSY");
+
+	ok(CloseHandle(hFile), "CloseHandle");
+
+	/* case 2: other client already closed */
+	hFile = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, 
+	    NULL, OPEN_EXISTING, 0, 0);
+	ok(hFile == INVALID_HANDLE_VALUE, "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail");
+	ok(GetLastError() == ERROR_PIPE_BUSY, "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail with ERROR_PIPE_BUSY");
+
+	ok(DisconnectNamedPipe(hnp), "DisconnectNamedPipe");
+
+	/* case 3: server has called DisconnectNamedPipe but not ConnectNamed Pipe */
+	hFile = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, 
+	    NULL, OPEN_EXISTING, 0, 0);
+	ok(hFile == INVALID_HANDLE_VALUE, "connecting to named pipe after other client closes but before DisconnectNamedPipe should fail");
+	ok(GetLastError() == ERROR_PIPE_BUSY, "connecting to named pipe after other client closes but before ConnectNamedPipe should fail with ERROR_PIPE_BUSY");
+
+	/* to be complete, we'd call ConnectNamedPipe here and loop,
+	 * but by default that's blocking, so we'd either have
+	 * to turn on the uncommon nonblocking mode, or
+	 * use another thread.
+	 */
     }
 
-    CloseHandle(hnp);
+    ok(CloseHandle(hnp), "CloseHandle");
 }
 
 START_TEST(pipe)


More information about the wine-patches mailing list