Module Name: src Committed By: christos Date: Sat Nov 12 19:44:59 UTC 2016
Modified Files: src/tests/kernel: t_ptrace_wait.c Log Message: add an assert that prints the values, and remove expected failure. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/tests/kernel/t_ptrace_wait.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/kernel/t_ptrace_wait.c diff -u src/tests/kernel/t_ptrace_wait.c:1.8 src/tests/kernel/t_ptrace_wait.c:1.9 --- src/tests/kernel/t_ptrace_wait.c:1.8 Sat Nov 12 11:33:48 2016 +++ src/tests/kernel/t_ptrace_wait.c Sat Nov 12 14:44:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: t_ptrace_wait.c,v 1.8 2016/11/12 16:33:48 kamil Exp $ */ +/* $NetBSD: t_ptrace_wait.c,v 1.9 2016/11/12 19:44:59 christos Exp $ */ /*- * Copyright (c) 2016 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_ptrace_wait.c,v 1.8 2016/11/12 16:33:48 kamil Exp $"); +__RCSID("$NetBSD: t_ptrace_wait.c,v 1.9 2016/11/12 19:44:59 christos Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -154,21 +154,30 @@ __RCSID("$NetBSD: t_ptrace_wait.c,v 1.8 * overcomplicate the tests - do not log from a child and use err(3)/errx(3) * wrapped with FORKEE_ASSERT()/FORKEE_ASSERTX() as that is guaranteed to work. */ -#define FORKEE_ASSERTX(x) \ -do { \ - int ret = (x); \ - if (!ret) \ - errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s", \ - __FILE__, __LINE__, __func__, #x); \ -} while (0) - -#define FORKEE_ASSERT(x) \ -do { \ - int ret = (x); \ - if (!ret) \ - err(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s", \ - __FILE__, __LINE__, __func__, #x); \ -} while (0) +#define FORKEE_ASSERT_EQ(x, y) \ +do { \ + int ret = (x) == (y); \ + if (!ret) \ + errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: " \ + "%s(%d) == %s(%d)", __FILE__, __LINE__, __func__, \ + #x, (int)x, #y, (int)y); \ +} while (/*CONSTCOND*/0) + +#define FORKEE_ASSERTX(x) \ +do { \ + int ret = (x); \ + if (!ret) \ + errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s",\ + __FILE__, __LINE__, __func__, #x); \ +} while (/*CONSTCOND*/0) + +#define FORKEE_ASSERT(x) \ +do { \ + int ret = (x); \ + if (!ret) \ + err(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s",\ + __FILE__, __LINE__, __func__, #x); \ +} while (/*CONSTCOND*/0) /* * If waitid(2) returns because one or more processes have a state change to @@ -215,7 +224,7 @@ forkee_status_exited(int status, int exp FORKEE_ASSERTX(!WIFSIGNALED(status)); FORKEE_ASSERTX(!WIFSTOPPED(status)); - FORKEE_ASSERTX(WEXITSTATUS(status) == expected); + FORKEE_ASSERT_EQ(WEXITSTATUS(status), expected); } static void __used @@ -259,8 +268,8 @@ forkee_status_signaled(int status, int e FORKEE_ASSERTX(WIFSIGNALED(status)); FORKEE_ASSERTX(!WIFSTOPPED(status)); - FORKEE_ASSERTX(WTERMSIG(status) == expected_termsig); - FORKEE_ASSERTX(WCOREDUMP(status) == expected_core); + FORKEE_ASSERT_EQ(WTERMSIG(status), expected_termsig); + FORKEE_ASSERT_EQ(WCOREDUMP(status), expected_core); } static void __used @@ -287,7 +296,7 @@ forkee_status_stopped(int status, int ex FORKEE_ASSERTX(!WIFSIGNALED(status)); FORKEE_ASSERTX(WIFSTOPPED(status)); - FORKEE_ASSERTX(WSTOPSIG(status) == expected); + FORKEE_ASSERT_EQ(WSTOPSIG(status), expected); } #else #define validate_status_exited(a,b) @@ -391,7 +400,7 @@ static int traceme2_caught = 0; static void traceme2_sighandler(int sig) { - FORKEE_ASSERTX(sig == SIGINT); + FORKEE_ASSERT_EQ(sig, SIGINT); ++traceme2_caught; } @@ -421,7 +430,7 @@ ATF_TC_BODY(traceme2, tc) printf("Before raising %s from child\n", strsignal(sigval)); FORKEE_ASSERT(raise(sigval) == 0); - FORKEE_ASSERTX(traceme2_caught == 1); + FORKEE_ASSERT_EQ(traceme2_caught, 1); printf("Before exiting of the child process\n"); _exit(exitval); @@ -606,7 +615,7 @@ ATF_TC_BODY(attach1, tc) FORKEE_REQUIRE_SUCCESS( wpid = TWAIT_GENERIC(tracee, &status, 0), tracee); - forkee_status_stopped(status, SIGSTOP); + forkee_status_stopped(status, SIGTRAP); /* Resume tracee with PT_CONTINUE */ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1); @@ -734,7 +743,7 @@ ATF_TC_BODY(attach2, tc) FORKEE_REQUIRE_SUCCESS( wpid = TWAIT_GENERIC(tracee, &status, 0), tracee); - forkee_status_stopped(status, SIGSTOP); + forkee_status_stopped(status, SIGTRAP); /* Resume tracee with PT_CONTINUE */ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1); @@ -943,15 +952,18 @@ ATF_TC_BODY(attach4, tc) FORKEE_REQUIRE_SUCCESS( wpid = TWAIT_GENERIC(getppid(), &status, 0), getppid()); - forkee_status_stopped(status, SIGSTOP); + forkee_status_stopped(status, SIGTRAP); printf("Resume parent with PT_DETACH\n"); FORKEE_ASSERT(ptrace(PT_DETACH, getppid(), (void *)1, 0) != -1); - /* Wait for message from the parent */ + /* Tell parent we are ready */ rv = write(fds_fromtracer[1], &msg, sizeof(msg)); FORKEE_ASSERT(rv == sizeof(msg)); + /* Wait for message from the parent */ + rv = read(fds_totracer[0], &msg, sizeof(msg)); + FORKEE_ASSERT(rv == sizeof(msg)); _exit(exitval_tracer); } @@ -962,9 +974,12 @@ ATF_TC_BODY(attach4, tc) rv = write(fds_totracer[1], &msg, sizeof(msg)); ATF_REQUIRE(rv == sizeof(msg)); - printf("Let the tracer exit now\n"); + printf("Wait for the tracer to resume\n"); rv = read(fds_fromtracer[0], &msg, sizeof(msg)); ATF_REQUIRE(rv == sizeof(msg)); + printf("Allow the tracer to exit now\n"); + rv = write(fds_totracer[1], &msg, sizeof(msg)); + ATF_REQUIRE(rv == sizeof(msg)); printf("Wait for tracer to exit with %s()\n", TWAIT_FNAME); TWAIT_REQUIRE_SUCCESS( @@ -1008,8 +1023,6 @@ ATF_TC_BODY(attach5, tc) * Tracee process cannot see its appropriate parent when debugged by a * tracer */ - atf_tc_expect_fail("PR kern/51624"); - printf("Spawn tracee\n"); ATF_REQUIRE(pipe(fds_totracee) == 0); ATF_REQUIRE(pipe(fds_fromtracee) == 0); @@ -1028,7 +1041,7 @@ ATF_TC_BODY(attach5, tc) rv = read(fds_totracee[0], &msg, sizeof(msg)); FORKEE_ASSERT(rv == sizeof(msg)); - FORKEE_ASSERTX(parent == getppid()); + FORKEE_ASSERT_EQ(parent, getppid()); _exit(exitval_tracee); } @@ -1058,7 +1071,7 @@ ATF_TC_BODY(attach5, tc) FORKEE_REQUIRE_SUCCESS( wpid = TWAIT_GENERIC(tracee, &status, 0), tracee); - forkee_status_stopped(status, SIGSTOP); + forkee_status_stopped(status, SIGTRAP); /* Resume tracee with PT_CONTINUE */ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);