diff options
author | Roland McGrath <roland@hack.frob.com> | 2015-04-09 11:15:17 -0700 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2015-04-09 11:15:17 -0700 |
commit | b0b88abc1c138923bd1638560c73a3ced227f1d1 (patch) | |
tree | 1443b5011542df92ca3b8cf6596ab33a50a5a0be | |
parent | 2902af1631c0c74c2f0c0edd7a85a523370e5027 (diff) | |
download | glibc-b0b88abc1c138923bd1638560c73a3ced227f1d1.tar.gz glibc-b0b88abc1c138923bd1638560c73a3ced227f1d1.tar.xz glibc-b0b88abc1c138923bd1638560c73a3ced227f1d1.zip |
Make test-skeleton.c grok TEST_DIRECT magic environment variable.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | test-skeleton.c | 51 |
2 files changed, 53 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog index 30dc4dabdc..03fbb7e311 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-04-09 Roland McGrath <roland@hack.frob.com> + + * 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 <fweimer@redhat.com> * 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 <siglist.h> +# 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); |