summaryrefslogtreecommitdiff
path: root/test/lib/not.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib/not.c')
-rw-r--r--test/lib/not.c35
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;