1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

tests: configurable LVM_TEST_RESULTS

Make LVM_TEST_RESULTS configurable
Cleanup results dir on 'make clean'
This commit is contained in:
Zdenek Kabelac 2013-06-03 12:07:31 +02:00
parent 9b2be901ed
commit 325ca748bb
2 changed files with 54 additions and 40 deletions

View File

@ -1,4 +1,4 @@
# Copyright (C) 2007-2012 Red Hat, Inc. All rights reserved.
# Copyright (C) 2007-2013 Red Hat, Inc. All rights reserved.
#
# This file is part of LVM2.
#
@ -24,6 +24,7 @@ abs_builddir = "@abs_builddir@"
abs_top_builddir = "@abs_top_builddir@"
abs_top_srcdir = "@abs_top_srcdir@"
LVM_TEST_RESULTS ?= results
SUBDIRS = api unit
SOURCES = lib/not.c lib/harness.c
@ -61,6 +62,7 @@ help:
@echo " LVM_TEST_LVMETAD Start lvmetad (1)."
@echo " LVM_TEST_NODEBUG Do not debug lvm commands."
@echo " LVM_TEST_PARALLEL May skip agresive wipe of LVMTEST resources."
@echo " LVM_TEST_RESULTS Where to create result files [results]."
@echo " LVM_VERIFY_UDEV Default verify state for lvm.conf."
@echo " S Skip given test (regex)."
@echo " T Run given test (regex)."
@ -122,7 +124,7 @@ CMDS = lvm $(shell cat $(top_builddir)/tools/.commands)
ln -sf $(abs_top_srcdir)/test/$$f $$f; \
done; \
fi
mkdir -p results
$(MKDIR_P) -m a=rwx $(LVM_TEST_RESULTS)
touch $@
.lib-dir-stamp:
@ -138,6 +140,7 @@ CMDS = lvm $(shell cat $(top_builddir)/tools/.commands)
clean:
test "$(srcdir)" = . || $(RM) $(RUN_BASE)
$(RM) -r $(LVM_TEST_RESULTS)
CLEAN_TARGETS += .lib-dir-stamp .tests-stamp $(LIB) $(addprefix lib/,$(CMDS)) \
lib/clvmd lib/dmeventd lib/dmsetup lib/lvmetad lib/fsadm lib/vgimportclone

View File

@ -22,6 +22,7 @@
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
#include <limits.h>
static pid_t pid;
static int fds[2];
@ -45,6 +46,7 @@ static int readbuf_sz = 0, readbuf_used = 0;
static int die = 0;
static int verbose = 0; /* >1 with timestamps */
static int interactive = 0; /* disable all redirections */
static const char *results;
static FILE *outfile = NULL;
@ -308,45 +310,48 @@ static void run(int i, char *f) {
int st, w;
time_t start = time(NULL);
char buf[128];
snprintf(buf, 128, "%s ...", f);
buf[127] = 0;
char outpath[PATH_MAX];
char *c = outpath + strlen(results) + 1;
snprintf(buf, sizeof(buf), "%s ...", f);
printf("Running %-60s ", buf);
fflush(stdout);
char outpath[512];
sprintf(outpath, "results/%s.txt", f);
while (strchr(outpath + 8, '/'))
*strchr(outpath + 8, '/') = '_';
outfile = fopen(outpath, "w");
while ((w = waitpid(pid, &st, WNOHANG)) == 0) {
drain();
usleep(20000);
}
if (w != pid) {
perror("waitpid");
exit(206);
}
drain();
if (WIFEXITED(st)) {
if (WEXITSTATUS(st) == 0) {
passed(i, f, start);
} else if (WEXITSTATUS(st) == 200) {
skipped(i, f);
} else {
failed(i, f, st);
snprintf(outpath, sizeof(outpath), "%s/%s.txt", results, f);
while ((c = strchr(c, '/')))
*c = '_';
if ((outfile = fopen(outpath, "w"))) {
while ((w = waitpid(pid, &st, WNOHANG)) == 0) {
drain();
usleep(20000);
}
} else {
failed(i, f, st);
if (w != pid) {
perror("waitpid");
exit(206);
}
drain();
if (WIFEXITED(st)) {
if (WEXITSTATUS(st) == 0)
passed(i, f, start);
else if (WEXITSTATUS(st) == 200)
skipped(i, f);
else
failed(i, f, st);
} else
failed(i, f, st);
clear();
fclose(outfile);
}
clear();
fclose(outfile);
}
}
int main(int argc, char **argv) {
char results_list[PATH_MAX];
const char *result;
const char *be_verbose = getenv("VERBOSE"),
*be_interactive = getenv("INTERACTIVE");
time_t start = time(NULL);
int i;
FILE *list;
if (argc >= MAX) {
fprintf(stderr, "Sorry, my head exploded. Please increase MAX.\n");
@ -359,6 +364,10 @@ int main(int argc, char **argv) {
if (be_interactive)
interactive = atoi(be_interactive);
if (!(results = getenv("LVM_TEST_RESULTS")))
results = "results";
snprintf(results_list, sizeof(results_list), "%s/list", results);
if (socketpair(PF_UNIX, SOCK_STREAM, 0, fds)) {
perror("socketpair");
return 201;
@ -389,18 +398,20 @@ int main(int argc, char **argv) {
s.npassed, s.nwarned, s.nfailed, s.nknownfail, s.nskipped);
/* dump a list to results */
FILE *list = fopen("results/list", "w");
for (i = 1; i < argc; ++ i) {
const char *result = "unknown";
switch (s.status[i]) {
case PASSED: result = "passed"; break;
case FAILED: result = "failed"; break;
case SKIPPED: result = "skipped"; break;
case WARNED: result = "warnings"; break;
if ((list = fopen(results_list, "w"))) {
for (i = 1; i < argc; ++ i) {
switch (s.status[i]) {
case PASSED: result = "passed"; break;
case FAILED: result = "failed"; break;
case SKIPPED: result = "skipped"; break;
case WARNED: result = "warnings"; break;
default: result = "unknown"; break;
}
fprintf(list, "%s %s\n", argv[i], result);
}
fprintf(list, "%s %s\n", argv[i], result);
}
fclose(list);
fclose(list);
} else
perror("fopen result");
/* print out a summary */
if (s.nfailed || s.nskipped || s.nknownfail) {