diff --git a/ChangeLog b/ChangeLog index 30dc4dabdc..03fbb7e311 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-04-09 Roland McGrath + + * test-skeleton.c (TIMEOUT): Move #define to top level. + (main): Grok environment variable TEST_DIRECT. If set, print + test expectation details into that file and then behave as if + given --direct. + 2015-04-09 Florian Weimer * malloc/tst-scratch_buffer.c (do_test): Suppress truncation diff --git a/test-skeleton.c b/test-skeleton.c index 6a7fc429d4..7a8ddfa55b 100644 --- a/test-skeleton.c +++ b/test-skeleton.c @@ -45,6 +45,11 @@ # define TEST_DATA_LIMIT (64 << 20) /* Data limit (bytes) to run with. */ #endif +#ifndef TIMEOUT + /* Default timeout is two seconds. */ +# define TIMEOUT 2 +#endif + #define OPT_DIRECT 1000 #define OPT_TESTDIR 1001 @@ -293,7 +298,7 @@ main (int argc, char *argv[]) /* Make sure we see all message, even those on stdout. */ setvbuf (stdout, NULL, _IONBF, 0); - /* make sure temporary files are deleted. */ + /* Make sure temporary files are deleted. */ atexit (delete_temp_files); /* Correct for the possible parameters. */ @@ -306,6 +311,46 @@ main (int argc, char *argv[]) PREPARE (argc, argv); #endif + const char *envstr_direct = getenv ("TEST_DIRECT"); + if (envstr_direct != NULL) + { + FILE *f = fopen (envstr_direct, "w"); + if (f == NULL) + { + printf ("cannot open TEST_DIRECT output file '%s': %m\n", + envstr_direct); + exit (1); + } + + fprintf (f, "timeout=%u\ntimeoutfactor=%u\n", TIMEOUT, timeoutfactor); +#ifdef EXPECTED_STATUS + fprintf (f, "exit=%u\n", EXPECTED_STATUS); +#endif +#ifdef EXPECTED_SIGNAL + switch (EXPECTED_SIGNAL) + { + default: abort (); +# define init_sig(signo, name, text) \ + case signo: fprintf (f, "signal=%s\n", name); break; +# include +# undef init_sig + } +#endif + + if (temp_name_list != NULL) + { + fprintf (f, "temp_files=(\n"); + for (struct temp_name_list *n = temp_name_list; + n != NULL; + n = (struct temp_name_list *) n->q.q_forw) + fprintf (f, " '%s'\n", n->name); + fprintf (f, ")\n"); + } + + fclose (f); + direct = 1; + } + /* If we are not expected to fork run the function immediately. */ if (direct) return TEST_FUNCTION; @@ -359,10 +404,6 @@ main (int argc, char *argv[]) } /* Set timeout. */ -#ifndef TIMEOUT - /* Default timeout is two seconds. */ -# define TIMEOUT 2 -#endif signal (SIGALRM, signal_handler); alarm (TIMEOUT * timeoutfactor);