1 /* Run a testsuite script with a timeout. */
5 #define MAX_TEST_SECONDS (3*60)
7 int main(int argc, char *argv[])
10 int status, slept = 0;
13 fprintf(stderr, "Usage: testrun [SHELL_OPTIONS] TESTSUITE_SCRIPT [ARGS]\n");
17 if ((pid = fork()) < 0) {
18 fprintf(stderr, "TESTRUN ERROR: fork failed: %s\n", strerror(errno));
24 execvp(argv[0], argv);
25 fprintf(stderr, "TESTRUN ERROR: failed to exec %s: %s\n", argv[0], strerror(errno));
30 int ret = waitpid(pid, &status, WNOHANG);
36 fprintf(stderr, "TESTRUN ERROR: waitpid failed: %s\n", strerror(errno));
39 if (slept++ > MAX_TEST_SECONDS) {
40 fprintf(stderr, "TESTRUN TIMEOUT: test took over %d seconds.\n", MAX_TEST_SECONDS);
41 if (kill(pid, SIGTERM) < 0)
42 fprintf(stderr, "TESTRUN ERROR: failed to kill pid %ld: %s\n", (long)pid, strerror(errno));
44 fprintf(stderr, "TESTRUN INFO: killed pid %ld\n", (long)pid);
50 if (!WIFEXITED(status))
53 return WEXITSTATUS(status);