You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.9 KiB
147 lines
3.9 KiB
/*- |
|
* Copyright (c) 2011 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: run-sua-test.c,v 1.1 2011/03/20 16:48:30 tuexen Exp $ |
|
*/ |
|
|
|
#include <signal.h> |
|
#include <unistd.h> |
|
#include <stdlib.h> |
|
#include <stdio.h> |
|
#include <sys/types.h> |
|
#include <sys/wait.h> |
|
|
|
#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: runm2patest [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]; |
|
char *dir = getenv("HOME"); |
|
|
|
timeout = TIMEOUT; |
|
|
|
while ((c = getopt(argc, argv, "t:d:")) != -1) { |
|
switch(c) { |
|
case 'h': |
|
print_usage(); |
|
return 0; |
|
break; |
|
case 't': |
|
timeout = (unsigned int)atoi(optarg); |
|
break; |
|
case 'd': |
|
dir = optarg; |
|
break; |
|
default: |
|
print_usage(); |
|
return 1; |
|
} |
|
} |
|
|
|
if (optind == argc - 1) { |
|
snprintf(command, COMMAND_LENGTH, command_skel, dir, argv[optind]); |
|
} else { |
|
print_usage(); |
|
return 1; |
|
} |
|
|
|
if ((pid = fork()) == 0) { |
|
#if defined(__APPLE__) || defined(__FreeBSD__) |
|
execlp("/usr/local/bin/guile", "guile", "-L", dir, "-c", command, NULL); |
|
#else |
|
execlp("/usr/bin/guile", "guile", "-L", dir, "-c", command, NULL); |
|
#endif |
|
fprintf(stderr, "%s\n", "Couln't start guile."); |
|
} |
|
printf("Test %-40.40s ", argv[optind]); |
|
fflush(stdout); |
|
if (timeout > 0) { |
|
signal(SIGALRM, handler); |
|
alarm(timeout); |
|
} |
|
|
|
if (wait(&status) == -1) { |
|
fprintf(stderr, "%s\n", "Couln't start guile."); |
|
} |
|
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; |
|
default: |
|
printf("%-29.29s\n", YELLOW("BUG")); |
|
break; |
|
} |
|
} |
|
return 0; |
|
} |
|
|
|
|