diff options
Diffstat (limited to 'test/lib/not.c')
-rw-r--r-- | test/lib/not.c | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/test/lib/not.c b/test/lib/not.c index 1cb12f915..93c115a27 100644 --- a/test/lib/not.c +++ b/test/lib/not.c @@ -14,17 +14,35 @@ #include <unistd.h> #include <stdio.h> +#include <stdlib.h> #include <stdarg.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> -static int finished(const char *cmd, int status) { +static int _finished(const char *cmd, int status, int pid) { + int ret; if (!strcmp(cmd, "not")) return !status; if (!strcmp(cmd, "should")) { - if (status) + if (status) { fprintf(stderr, "TEST WARNING: Ignoring command failure.\n"); + /* TODO: avoid using shell here */ + /* Show log for failing command which should be passing */ + ret = system("ls debug.log*${LVM_LOG_FILE_EPOCH}* 2>/dev/null"); + if (WIFEXITED(ret) && WEXITSTATUS(ret) == 0) { + printf("## timing off\n<======== Debug log ========>\n"); /* timing off */ + fflush(stdout); + if (system("sed -e 's,^,## DEBUG: ,' debug.log*${LVM_LOG_FILE_EPOCH}* 2>/dev/null")) { + /* Ignore result code */; + } + printf("## timing on\n"); /* timing on */ + if (system("rm -f debug.log*${LVM_LOG_FILE_EPOCH}*")) { + /* Ignore result code */; + } + fflush(stdout); + } + } return 0; } else if (!strcmp(cmd, "invalid")) { if (status == 3) @@ -39,6 +57,7 @@ static int finished(const char *cmd, int status) { } int main(int args, char **argv) { + const char *val = NULL; pid_t pid; int status; int FAILURE = 6; @@ -53,6 +72,16 @@ int main(int args, char **argv) { fprintf(stderr, "Could not fork\n"); return FAILURE; } else if (pid == 0) { /* child */ + if (!strcmp(argv[0], "not")) + val = ">1"; + else if (!strcmp(argv[0], "invalid")) + val = "3"; + else if (!strcmp(argv[0], "fail")) + val = "5"; + + if (val) + setenv("LVM_EXPECTED_EXIT_STATUS", val, 1); + execvp(argv[1], &argv[1]); /* should not be accessible */ return FAILURE; @@ -67,7 +96,7 @@ int main(int args, char **argv) { return FAILURE; } - return finished(argv[0], WEXITSTATUS(status)); + return _finished(argv[0], WEXITSTATUS(status), pid); } /* not accessible */ return FAILURE; |