Sebastian Lackner : kernel32/tests: Add basic tests for partially received pipe messages (ERROR_MORE_DATA).
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Sep 4 14:48:40 CDT 2014
Module: wine
Branch: master
Commit: e4551eee469480908592f73e24df449b34047ff5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e4551eee469480908592f73e24df449b34047ff5
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Thu Sep 4 17:14:19 2014 +0200
kernel32/tests: Add basic tests for partially received pipe messages (ERROR_MORE_DATA).
---
dlls/kernel32/tests/pipe.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index 832b980..5e96930 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -160,6 +160,65 @@ static void test_CreateNamedPipe(int pipemode)
ok(readden == sizeof(obuf2), "read 2 got %d bytes\n", readden);
ok(memcmp(obuf2, ibuf, written) == 0, "content 2 check\n");
+ /* Test how ReadFile behaves when the buffer is not big enough for the whole message */
+ memset(ibuf, 0, sizeof(ibuf));
+ ok(WriteFile(hnp, obuf2, sizeof(obuf2), &written, NULL), "WriteFile\n");
+ ok(written == sizeof(obuf2), "write file len\n");
+ ok(ReadFile(hFile, ibuf, 4, &readden, NULL), "ReadFile\n");
+ ok(readden == 4, "read got %d bytes\n", readden);
+ ok(ReadFile(hFile, ibuf + 4, sizeof(ibuf) - 4, &readden, NULL), "ReadFile\n");
+ ok(readden == sizeof(obuf2) - 4, "read got %d bytes\n", readden);
+ ok(memcmp(obuf2, ibuf, written) == 0, "content 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");
+ if (pipemode == PIPE_TYPE_BYTE)
+ {
+ ok(ReadFile(hnp, ibuf, 4, &readden, NULL), "ReadFile\n");
+ }
+ else
+ {
+ SetLastError(0xdeadbeef);
+ todo_wine
+ ok(!ReadFile(hnp, ibuf, 4, &readden, NULL), "ReadFile\n");
+ todo_wine
+ ok(GetLastError() == ERROR_MORE_DATA, "wrong error\n");
+ }
+ ok(readden == 4, "read got %d bytes\n", readden);
+ ok(ReadFile(hnp, ibuf + 4, sizeof(ibuf) - 4, &readden, NULL), "ReadFile\n");
+ ok(readden == sizeof(obuf) - 4, "read got %d bytes\n", readden);
+ ok(memcmp(obuf, ibuf, written) == 0, "content check\n");
+
+ /* Similar to above, but use a read buffer size small enough to read in three parts */
+ memset(ibuf, 0, sizeof(ibuf));
+ ok(WriteFile(hFile, obuf2, sizeof(obuf2), &written, NULL), "WriteFile\n");
+ ok(written == sizeof(obuf2), "write file len\n");
+ if (pipemode == PIPE_TYPE_BYTE)
+ {
+ ok(ReadFile(hnp, ibuf, 4, &readden, NULL), "ReadFile\n");
+ ok(readden == 4, "read got %d bytes\n", readden);
+ ok(ReadFile(hnp, ibuf + 4, 4, &readden, NULL), "ReadFile\n");
+ }
+ else
+ {
+ SetLastError(0xdeadbeef);
+ todo_wine
+ ok(!ReadFile(hnp, ibuf, 4, &readden, NULL), "ReadFile\n");
+ todo_wine
+ ok(GetLastError() == ERROR_MORE_DATA, "wrong error\n");
+ ok(readden == 4, "read got %d bytes\n", readden);
+ SetLastError(0xdeadbeef);
+ todo_wine
+ ok(!ReadFile(hnp, ibuf + 4, 4, &readden, NULL), "ReadFile\n");
+ todo_wine
+ ok(GetLastError() == ERROR_MORE_DATA, "wrong error\n");
+ }
+ ok(readden == 4, "read got %d bytes\n", readden);
+ ok(ReadFile(hnp, ibuf + 8, sizeof(ibuf) - 8, &readden, NULL), "ReadFile\n");
+ ok(readden == sizeof(obuf2) - 8, "read got %d bytes\n", readden);
+ ok(memcmp(obuf2, ibuf, written) == 0, "content check\n");
+
/* Test reading of multiple writes */
memset(ibuf, 0, sizeof(ibuf));
ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile3a\n");
More information about the wine-cvs
mailing list