tests: use append mode to capture parallel make output
authorStefano Lattarini <stefano.lattarini@gmail.com>
Sat, 5 May 2012 17:22:40 +0000 (19:22 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Sat, 5 May 2012 17:22:57 +0000 (19:22 +0200)
This should fix the spurious failure reported in automake bug#11413.

This is due to the fact that the redirected output of parallel make
can racily loose lines.  For example, if GNU make (3.82) is run on
a Makefile like this:

  all = 0 1 2 3 4 5 6 7 8 9
  default: $(all)
  $(all):
        @sleep 0.$$(($RANDOM % 10)); echo $@

and has its standard output redirected in overwrite-mode to a regular
file, it looses a line of that output every 15 runs or so on a Fedora
17 system with 64 ppc64 cores and Linux 3.3.1.  Redirection in append
mode does not suffer of this problem.

See also similar commit 'Release-1-10-280-g6426999' of 2009-03-10,
"Use append mode to capture parallel test output", which tackled a
similar problem for 't/parallel-tests3.sh' and 't/lisp8.sh'.

* t/tap-more.sh: Use append mode for output from "make -j", to avoid
dropped lines.
* t/parallel-tests3.sh, t/lisp8.sh: Enhance comments.

Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
t/lisp8.sh
t/parallel-tests3.sh
t/tap-more.sh

index 299ecd0..738cbd6 100755 (executable)
@@ -37,6 +37,7 @@ $AUTOCONF
 $AUTOMAKE --add-missing
 ./configure
 
+# Use append mode here to avoid dropping output.  See automake bug#11413.
 : >stdout
 $MAKE -j >>stdout || { cat stdout; Exit 1; }
 
@@ -50,6 +51,7 @@ test -f elc-stamp
 
 rm -f am-*.elc
 
+# Use append mode here to avoid dropping output.  See automake bug#11413.
 : >stdout
 $MAKE -j >>stdout || { cat stdout; Exit 1; }
 
index f06d093..98467e6 100755 (executable)
@@ -90,9 +90,8 @@ cd serial
 $MAKE ${j}1 check &
 cd ../parallel
 $sleep
-# Use append mode here to avoid dropping output.
-# Yes, this actually happens.
-: >stdout
+# Use append mode here to avoid dropping output.  See automake bug#11413.
+: > stdout
 $MAKE ${j}4 check >> stdout
 cd ..
 # Ensure the tests are really being run in parallel mode: if this is
index 6f5d5fe..d275bd9 100755 (executable)
@@ -118,7 +118,12 @@ for try in 0 1; do
 
   # Success.
 
-  $run_make check >stdout || { cat stdout; Exit 1; }
+  # Use append mode here to avoid dropping output.  See automake bug#11413.
+  # Also, use 'echo' here to "nullify" the previous contents of 'stdout',
+  # since Solaris 10 /bin/sh would try to optimize a ':' away after the
+  # first iteration, even if it is redirected.
+  echo " " >stdout
+  $run_make check >>stdout || { cat stdout; Exit 1; }
   cat stdout
   count_test_results total=6 pass=4 fail=0 xpass=0 xfail=1 skip=1 error=0
   grep '^PASS: 1\.test 1 - mu$' stdout
@@ -138,7 +143,12 @@ for try in 0 1; do
   # a ':' away after the first iteration, even if it is redirected.
   echo dummy > not-skip
   echo dummy > bail-out
-  $run_make check >stdout && { cat stdout; Exit 1; }
+  # Use append mode here to avoid dropping output.  See automake bug#11413.
+  # Also, use 'echo' here to "nullify" the previous contents of 'stdout',
+  # since Solaris 10 /bin/sh would try to optimize a ':' away after the
+  # first iteration, even if it is redirected.
+  echo " " >stdout
+  $run_make check >>stdout && { cat stdout; Exit 1; }
   cat stdout
   count_test_results total=7 pass=4 fail=1 xpass=0 xfail=1 skip=0 error=1
   grep '^PASS: 1\.test 1 - mu$' stdout