[lvm-devel] master - tests: configurable LVM_TEST_RESULTS

Zdenek Kabelac zkabelac at fedoraproject.org
Tue Jun 4 13:58:36 UTC 2013


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=325ca748bb1abf1ff41cbd83f96b27ee020b4304
Commit:        325ca748bb1abf1ff41cbd83f96b27ee020b4304
Parent:        9b2be901ed55ff309da8e94879cacb560f21dc2b
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Mon Jun 3 12:07:31 2013 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Tue Jun 4 15:57:18 2013 +0200

tests: configurable  LVM_TEST_RESULTS

Make LVM_TEST_RESULTS configurable
Cleanup results dir on 'make clean'
---
 test/Makefile.in   |    7 +++-
 test/lib/harness.c |   85 +++++++++++++++++++++++++++++----------------------
 2 files changed, 53 insertions(+), 39 deletions(-)

diff --git a/test/Makefile.in b/test/Makefile.in
index 1bd1dbd..b799f83 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -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
diff --git a/test/lib/harness.c b/test/lib/harness.c
index e98c7d6..ece36ec 100644
--- a/test/lib/harness.c
+++ b/test/lib/harness.c
@@ -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) {
+		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);
+			}
+			if (w != pid) {
+				perror("waitpid");
+				exit(206);
+			}
 			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 {
+			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);
-			}
-		} 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) {




More information about the lvm-devel mailing list