From bae38aad778c574f400102f2cbb7302f9167a561 Mon Sep 17 00:00:00 2001 From: Michael Tuexen Date: Sat, 27 Aug 2016 11:04:43 +0200 Subject: Import to git. --- runm3uatest.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 runm3uatest.c (limited to 'runm3uatest.c') diff --git a/runm3uatest.c b/runm3uatest.c new file mode 100644 index 0000000..8b7773e --- /dev/null +++ b/runm3uatest.c @@ -0,0 +1,146 @@ +/*- + * Copyright (c) 2009 Michael Tuexen tuexen@fh-muenster.de + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: runm3uatest.c,v 1.8 2012/08/25 23:41:55 tuexen Exp $ + */ + +#include +#include +#include +#include +#include +#include + +#define TIMEOUT 0 +#define COMMAND_LENGTH 2048 + +#define RED(string) "\033[31m"string"\033[0m" +#define GREEN(string) "\033[32m"string"\033[0m" +#define YELLOW(string) "\033[33m"string"\033[0m" +#define BLUE(string) "\033[34m"string"\033[0m" + +char command_skel[] = +"(load-from-path \"%s/.guile\")" +"(let ((test-name \"%s\"))" +" (if (defined? (string->symbol test-name))" +" (exit ((eval-string test-name)" +" tester-addr tester-port sut-addr sut-port))" +" (exit 254)))"; + +char usage[] = +"Usage: runm3uatest [options] testname\n" +"Options:\n" +" -h display this help\n" +" -t time maximum runtime in seconds (default: no limit)\n"; + +pid_t pid; + +void +handler(int n) { + kill(pid, SIGKILL); +} + +void +print_usage() { + fprintf(stderr, "%s", usage); +} +int +main(int argc, char *argv[]) { + unsigned int timeout; + int status, c; + char command[COMMAND_LENGTH]; + + timeout = TIMEOUT; + + while ((c = getopt(argc, argv, "t:")) != -1) { + switch(c) { + case 'h': + print_usage(); + return (0); + break; + case 't': + timeout = (unsigned int)atoi(optarg); + break; + default: + print_usage(); + return (1); + } + } + + if (optind == argc - 1) { + snprintf(command, COMMAND_LENGTH, command_skel, getenv("HOME"), argv[optind]); + } else { + print_usage(); + return (1); + } + + if ((pid = fork()) == 0) { +#if defined(__APPLE__) || defined(__FreeBSD__) + execlp("/usr/local/bin/guile", "guile", "-c", command, NULL); +#else + execlp("/usr/bin/guile", "guile", "-c", command, NULL); +#endif + return (255); + } + printf("Test %-40.40s ", argv[optind]); + fflush(stdout); + if (timeout > 0) { + signal(SIGALRM, handler); + alarm(timeout); + } + + if (wait(&status) == -1) { + fprintf(stderr, "%s\n", "Couldn't start guile."); + return (1); + } + if (WIFSIGNALED(status)) { + printf("%-29.29s\n", YELLOW("TIMEOUT")); + } else { + switch (WEXITSTATUS(status)) { + case 0: + printf("%-29.29s\n", GREEN("PASSED")); + break; + case 1: + printf("%-29.29s\n", RED("FAILED")); + break; + case 2: + printf("%-29.29s\n", YELLOW("UNKNOWN")); + break; + case 253: + printf("%-29.29s\n", BLUE("NON-APPLICABLE")); + break; + case 254: + printf("%-29.29s\n", YELLOW("NON-EXISTENT")); + break; + case 255: + printf("%-29.29s\n", YELLOW("COULDN'T START GUILE")); + break; + default: + printf("%-29.29s\n", YELLOW("BUG")); + break; + } + } + return (0); +} -- cgit v1.2.3