tests: more checks on portable fd redirection in TESTS_ENVIRONMENT
authorStefano Lattarini <stefano.lattarini@gmail.com>
Sat, 18 Jun 2011 12:53:08 +0000 (14:53 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Sat, 18 Jun 2011 17:15:59 +0000 (19:15 +0200)
* tests/tests-environment-fd-redirect.test: Extend by also using
a perl script among the tests.  Run the test shell script with
the `errexit' flag active.  Export `VERBOSE' to yes when running
"make check", to give more debugging information in case of
failures.  Look for a Korn Shell also in `/usr/bin', not on only
in `/bin'.

ChangeLog
tests/tests-environment-fd-redirect.test

index e482cbd..5e97dfd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2011-06-18  Stefano Lattarini  <stefano.lattarini@gmail.com>
+
+       tests: more checks on portable fd redirection in TESTS_ENVIRONMENT
+       * tests/tests-environment-fd-redirect.test: Extend by also using
+       a perl script among the tests.  Run the test shell script with
+       the `errexit' flag active.  Export `VERBOSE' to yes when running
+       "make check", to give more debugging information in case of
+       failures.  Look for a Korn Shell also in `/usr/bin', not on only
+       in `/bin'.
+
 2011-06-14  Stefano Lattarini  <stefano.lattarini@gmail.com>
 
        tests: check portable fd redirection in TESTS_ENVIRONMENT
index f9e6d2b..b2b5ab4 100755 (executable)
@@ -33,41 +33,60 @@ cat >> configure.in << 'END'
 AC_OUTPUT
 END
 
+# Use both a shell script and a perl script as tests,
+# for better coverage.
+
 cat >foo.test <<'END'
 #! /bin/sh
+set -e
 echo " " $0: foofoofoo >&8
 echo " " $0: barbarbar >&9
 END
-chmod a+x foo.test
+
+echo "#! $PERL -w" > bar.test
+cat >>bar.test <<'END'
+use warnings FATAL => 'all';
+use strict;
+open(FD8, ">&=8") or die "$!";
+open(FD9, ">&=9") or die "$!";
+print FD8 "  $0: 8888\n";
+print FD9 "  $0: 9999\n";
+END
+
+chmod a+x foo.test bar.test
 
 $ACLOCAL
 $AUTOCONF
 
-# /bin/ksh seems more vulnerable to the issue highlighted in coreutils
+# Korn Shells seem more vulnerable to the issue highlighted in coreutils
 # bug#8846 than other shells are.  In particular, the default Korn Shell
 # on Debian GNU/Linux is affected by the issue.  So let's try to run our
-# test with /bin/ksh too, if that's available.
-if test "$SHELL" != /bin/ksh && test -f /bin/ksh; then
-  bin_ksh=/bin/ksh
-else
-  bin_ksh=:
-fi
+# test with a system Korn Shell too, if that's available.
+bin_ksh=:
+case $SHELL in
+  ksh|*/ksh) ;;
+  *) for d in /bin /usr/bin; do
+       test -f $d/ksh && { bin_ksh=$d/ksh; break; }
+     done;;
+esac
 
 for sh in "$SHELL" "$bin_ksh"; do
   test "$sh" = : && continue
   for pfx in AM_ ''; do
     unindent > Makefile.am <<END
-      TESTS = foo.test
+      TESTS = foo.test bar.test
       ## No trailing semicolon here, *deliberately*.
       ${pfx}TESTS_ENVIRONMENT = 8>&1 9>&8
 END
     $AUTOMAKE -a
     CONFIG_SHELL="$sh" $sh ./configure CONFIG_SHELL="$sh"
-    $MAKE check >stdout || { cat stdout; Exit 1; }
+    VERBOSE=y $MAKE check >stdout || { cat stdout; Exit 1; }
     cat stdout
     grep '[ /]foo\.test: foofoofoo$' stdout
     grep '[ /]foo\.test: barbarbar$' stdout
-    $EGREP '(foofoofoo|barbarbar)' foo.log && Exit 1
+    grep '[ /]bar\.test: 8888$' stdout
+    grep '[ /]bar\.test: 9999$' stdout
+    $EGREP '(foofoofoo|barbarbar|8888|9999)' foo.log && Exit 1
     : # For shells with buggy 'set -e'.
   done
 done