aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2015-04-09 11:15:17 -0700
committerRoland McGrath <roland@hack.frob.com>2015-04-09 11:15:17 -0700
commitb0b88abc1c138923bd1638560c73a3ced227f1d1 (patch)
tree1443b5011542df92ca3b8cf6596ab33a50a5a0be
parent2902af1631c0c74c2f0c0edd7a85a523370e5027 (diff)
downloadglibc-b0b88abc1c138923bd1638560c73a3ced227f1d1.tar
glibc-b0b88abc1c138923bd1638560c73a3ced227f1d1.tar.gz
glibc-b0b88abc1c138923bd1638560c73a3ced227f1d1.tar.bz2
glibc-b0b88abc1c138923bd1638560c73a3ced227f1d1.zip
Make test-skeleton.c grok TEST_DIRECT magic environment variable.
-rw-r--r--ChangeLog7
-rw-r--r--test-skeleton.c51
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);