From d9ce876ea97d59d66c8d2892b43b7cc8392470a0 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 9 Jun 2012 15:37:20 +0930 Subject: ccan: import err module.from ccan revision 5add556a1cb64b49a664506aa76216d885b22c97 This allows us to avoid err.h in failtest. Signed-off-by: Rusty Russell --- lib/ccan/err/test/run.c | 153 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 lib/ccan/err/test/run.c (limited to 'lib/ccan/err/test/run.c') diff --git a/lib/ccan/err/test/run.c b/lib/ccan/err/test/run.c new file mode 100644 index 0000000000..242e93f806 --- /dev/null +++ b/lib/ccan/err/test/run.c @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUFFER_MAX 1024 + +int main(int argc, char *argv[]) +{ + int pfd[2]; + const char *base; + + plan_tests(24); + + err_set_progname(argv[0]); + + /* In case it only prints out the basename of argv[0]. */ + base = strrchr(argv[0], '/'); + if (base) + base++; + else + base = argv[0]; + + /* Test err() in child */ + pipe(pfd); + fflush(stdout); + if (fork()) { + char buffer[BUFFER_MAX+1]; + unsigned int i; + int status; + + /* We are parent. */ + close(pfd[1]); + for (i = 0; i < BUFFER_MAX; i++) { + if (read(pfd[0], buffer + i, 1) == 0) { + buffer[i] = '\0'; + ok1(strstr(buffer, "running err:")); + ok1(strstr(buffer, strerror(ENOENT))); + ok1(strstr(buffer, base)); + ok1(buffer[i-1] == '\n'); + break; + } + } + close(pfd[0]); + ok1(wait(&status) != -1); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 17); + } else { + close(pfd[0]); + dup2(pfd[1], STDERR_FILENO); + errno = ENOENT; + err(17, "running %s", "err"); + abort(); + } + + /* Test errx() in child */ + pipe(pfd); + fflush(stdout); + if (fork()) { + char buffer[BUFFER_MAX+1]; + unsigned int i; + int status; + + /* We are parent. */ + close(pfd[1]); + for (i = 0; i < BUFFER_MAX; i++) { + if (read(pfd[0], buffer + i, 1) == 0) { + buffer[i] = '\0'; + ok1(strstr(buffer, "running errx\n")); + ok1(strstr(buffer, base)); + break; + } + } + close(pfd[0]); + ok1(wait(&status) != -1); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 17); + } else { + close(pfd[0]); + dup2(pfd[1], STDERR_FILENO); + errx(17, "running %s", "errx"); + abort(); + } + + + /* Test warn() in child */ + pipe(pfd); + fflush(stdout); + if (fork()) { + char buffer[BUFFER_MAX+1]; + unsigned int i; + int status; + + /* We are parent. */ + close(pfd[1]); + for (i = 0; i < BUFFER_MAX; i++) { + if (read(pfd[0], buffer + i, 1) == 0) { + buffer[i] = '\0'; + ok1(strstr(buffer, "running warn:")); + ok1(strstr(buffer, strerror(ENOENT))); + ok1(strstr(buffer, base)); + ok1(buffer[i-1] == '\n'); + break; + } + } + close(pfd[0]); + ok1(wait(&status) != -1); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 17); + } else { + close(pfd[0]); + dup2(pfd[1], STDERR_FILENO); + errno = ENOENT; + warn("running %s", "warn"); + exit(17); + } + + /* Test warnx() in child */ + pipe(pfd); + fflush(stdout); + if (fork()) { + char buffer[BUFFER_MAX+1]; + unsigned int i; + int status; + + /* We are parent. */ + close(pfd[1]); + for (i = 0; i < BUFFER_MAX; i++) { + if (read(pfd[0], buffer + i, 1) == 0) { + buffer[i] = '\0'; + ok1(strstr(buffer, "running warnx\n")); + ok1(strstr(buffer, base)); + break; + } + } + close(pfd[0]); + ok1(wait(&status) != -1); + ok1(WIFEXITED(status)); + ok1(WEXITSTATUS(status) == 17); + } else { + close(pfd[0]); + dup2(pfd[1], STDERR_FILENO); + warnx("running %s", "warnx"); + exit(17); + } + return exit_status(); +} + -- cgit