X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fpipecmd%2Ftest%2Frun.c;fp=ccan%2Fpipecmd%2Ftest%2Frun.c;h=b08d194d4663c515443bb99459fe10a2361fff9d;hb=66de67ea48009a086f940288eacf9928515f3aec;hp=0000000000000000000000000000000000000000;hpb=4a439212da1b6d88cc370e2a2ee3dbeb8e2081c5;p=ccan diff --git a/ccan/pipecmd/test/run.c b/ccan/pipecmd/test/run.c new file mode 100644 index 00000000..b08d194d --- /dev/null +++ b/ccan/pipecmd/test/run.c @@ -0,0 +1,84 @@ +#include +/* Include the C files directly. */ +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + pid_t child; + int infd, outfd, status; + char buf[5] = "test"; + + /* We call ourselves, to test pipe. */ + if (argc == 2) { + if (strcmp(argv[1], "out") == 0) { + if (write(STDOUT_FILENO, buf, sizeof(buf)) != sizeof(buf)) + exit(1); + } else if (strcmp(argv[1], "in") == 0) { + if (read(STDIN_FILENO, buf, sizeof(buf)) != sizeof(buf)) + exit(1); + if (memcmp(buf, "test", sizeof(buf)) != 0) + exit(1); + } else if (strcmp(argv[1], "inout") == 0) { + if (read(STDIN_FILENO, buf, sizeof(buf)) != sizeof(buf)) + exit(1); + buf[0]++; + if (write(STDOUT_FILENO, buf, sizeof(buf)) != sizeof(buf)) + exit(1); + } else + abort(); + exit(0); + } + + /* This is how many tests you plan to run */ + plan_tests(26); + child = pipecmd(&outfd, &infd, argv[0], "inout", NULL); + if (!ok1(child > 0)) + exit(1); + ok1(write(infd, buf, sizeof(buf)) == sizeof(buf)); + ok1(read(outfd, buf, sizeof(buf)) == sizeof(buf)); + buf[0]--; + ok1(memcmp(buf, "test", sizeof(buf)) == 0); + ok1(waitpid(child, &status, 0) == child); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 0); + + child = pipecmd(NULL, &infd, argv[0], "in", NULL); + if (!ok1(child > 0)) + exit(1); + ok1(write(infd, buf, sizeof(buf)) == sizeof(buf)); + ok1(waitpid(child, &status, 0) == child); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 0); + + child = pipecmd(&outfd, NULL, argv[0], "out", NULL); + if (!ok1(child > 0)) + exit(1); + ok1(read(outfd, buf, sizeof(buf)) == sizeof(buf)); + ok1(memcmp(buf, "test", sizeof(buf)) == 0); + ok1(waitpid(child, &status, 0) == child); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 0); + + // Writing to /dev/null should be fine. + child = pipecmd(NULL, NULL, argv[0], "out", NULL); + if (!ok1(child > 0)) + exit(1); + ok1(waitpid(child, &status, 0) == child); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 0); + + // Reading should fail. + child = pipecmd(NULL, NULL, argv[0], "in", NULL); + if (!ok1(child > 0)) + exit(1); + ok1(waitpid(child, &status, 0) == child); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 1); + + /* This exits depending on whether all tests passed */ + return exit_status(); +}