PeekNamedPipe tests

Duane Clark dclark at akamail.com
Sat Apr 24 18:23:19 CDT 2004


This test demonstrates a broken behavior of PeekNamedPipe. I have no 
idea how to fix it at the moment. Oddly, while PeekNamedPipe returns the 
wrong number of bytes when multiple writes have been performed, ReadFile 
on the same pipe works ok.

Changelog:
	Add some test of PeekNamedPipe, and of multiple writes.

-------------- next part --------------
Index: dlls/kernel/tests/pipe.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/pipe.c,v
retrieving revision 1.9
diff -u -r1.9 pipe.c
--- dlls/kernel/tests/pipe.c	6 Feb 2004 05:24:34 -0000	1.9
+++ dlls/kernel/tests/pipe.c	24 Apr 2004 23:18:04 -0000
@@ -55,7 +55,8 @@
     HANDLE hnp;
     HANDLE hFile;
     const char obuf[] = "Bit Bucket";
-    char ibuf[32];
+    const char obuf2[] = "Bit Bucket2";
+    char ibuf[32], *pbuf;
     DWORD written;
     DWORD readden;
 
@@ -108,17 +109,38 @@
         /* 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\n");
-        ok(written == sizeof(obuf), "write file len\n");
-        ok(ReadFile(hFile, ibuf, sizeof(obuf), &readden, NULL), "ReadFile\n");
-        ok(readden == sizeof(obuf), "read file len\n");
-        ok(memcmp(obuf, ibuf, written) == 0, "content check\n");
+        ok(written == sizeof(obuf), "write file len 1\n");
+        ok(PeekNamedPipe(hFile, NULL, 0, NULL, &readden, NULL), "Peek\n");
+        ok(readden == sizeof(obuf), "peek 1 got %ld bytes\n", readden);
+        ok(ReadFile(hFile, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n");
+        ok(readden == sizeof(obuf), "read 1 got %ld bytes\n", readden);
+        ok(memcmp(obuf, ibuf, written) == 0, "content 1 check\n");
 
         memset(ibuf, 0, sizeof(ibuf));
-        ok(WriteFile(hFile, obuf, sizeof(obuf), &written, NULL), "WriteFile\n");
-        ok(written == sizeof(obuf), "write file len\n");
-        ok(ReadFile(hnp, ibuf, sizeof(obuf), &readden, NULL), "ReadFile\n");
-        ok(readden == sizeof(obuf), "read file len\n");
-        ok(memcmp(obuf, ibuf, written) == 0, "content check\n");
+        ok(WriteFile(hFile, obuf2, sizeof(obuf2), &written, NULL), "WriteFile\n");
+        ok(written == sizeof(obuf2), "write file len 2\n");
+        ok(PeekNamedPipe(hnp, NULL, 0, NULL, &readden, NULL), "Peek\n");
+        ok(readden == sizeof(obuf2), "peek 2 got %ld bytes\n", readden);
+        ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n");
+        ok(readden == sizeof(obuf2), "read 2 got %ld bytes\n", readden);
+        ok(memcmp(obuf2, ibuf, written) == 0, "content 2 check\n");
+
+        /* Test reading of multiple writes */
+        memset(ibuf, 0, sizeof(ibuf));
+        ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile\n");
+        ok(written == sizeof(obuf), "write file len 3\n");
+        ok(WriteFile(hnp, obuf2, sizeof(obuf2), &written, NULL), " WriteFile2\n");
+        ok(written == sizeof(obuf2), "write file len 4\n");
+        ok(PeekNamedPipe(hFile, NULL, 0, NULL, &readden, NULL), "Peek\n");
+        todo_wine {
+            ok(readden == sizeof(obuf) + sizeof(obuf2), "peek 3 got %ld bytes\n", readden);
+        }
+        ok(ReadFile(hFile, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n");
+        ok(readden == sizeof(obuf) + sizeof(obuf2), "read 3 got %ld bytes\n", readden);
+        pbuf = ibuf;
+        ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 3a check\n");
+        pbuf += sizeof(obuf);
+        ok(memcmp(obuf2, pbuf, sizeof(obuf2)) == 0, "content 3b check\n");
 
         /* Picky conformance tests */
 


More information about the wine-patches mailing list