Subject: bug#14601: Check failed, why?

From: Stefano Lattarini <[email-masked]>
Date: Mon, 23 Dec 2013 20:02:53 +0100

tags 14601 + moreinfo
severity 14601 minor
stop

Reference:
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14601

Hi Elio, thanks for the report and sorry for the awful delay.

I've fixed two of the failures you reported:

* t/autohdr-subdir-pr12495.sh
  This failure was due to localization issues in make error messages;
  it has already been fixed as part of bug#15237.

* t/t/tap-realtime.sh
  This I can reproduce when mawk is used as the awk implementation
  invoked by the tap-driver.sh script.  Still this is a spurious
  failure, because when I force mawk to be used by Automake's own
  test suite, the driver correctly starts printing partial results
  from TAP tests way before the tests have completed their execution
  -- a failure to do so is exactly the issue this test is supposed
  to spot.  I'm now convinced this test is too brittle, and not
  worth having, I've removed it with the first attached patch.

For the failure of install-info-dir.sh, however, I'm a bit at a
loss. For the moment, I've tweaked the tests to make it output
more information that can be useful for debugging (see the second
attached patch).  Could you please re-run the test with these
tweaks, and get back to us with the complete output?

Thanks,
  Stefano

>From 9d9aa6d158d85c1c95aed63fd5633977f29d668f Mon Sep 17 00:00:00 2001
Message-Id: <9d9aa6d15[email-masked]>
From: Stefano Lattarini <[email-masked]>
Date: Mon, 23 Dec 2013 19:12:09 +0100
Subject: [PATCH 1/2] tests: remove too-brittle test tap-realtime.sh

* t/tap-realtime.sh: Delete.  It has always been brittle, but now
it's also causing spurious failures when mawk is used as the awk
implementation in tap-driver.sh (see bug#14601).
* t/list-of-tests.mk: Adjust.

Signed-off-by: Stefano Lattarini <[email-masked]>
---
 t/list-of-tests.mk |   1 -
 t/tap-realtime.sh  | 127 -----------------------------------------------------
 2 files changed, 128 deletions(-)
 delete mode 100644 t/tap-realtime.sh

diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index 75f303a..462497e 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -1149,7 +1149,6 @@ t/tap-planskip-whitespace.sh \
 t/tap-planskip-badexit.sh \
 t/tap-planskip-bailout.sh \
 t/tap-planskip-later-errors.sh \
-t/tap-realtime.sh \
 t/tap-test-number-0.sh \
 t/tap-recheck-logs.sh \
 t/tap-result-comment.sh \
diff --git a/t/tap-realtime.sh b/t/tap-realtime.sh
deleted file mode 100644
index e9b2b0c..0000000
--- a/t/tap-realtime.sh
+++ /dev/null
@@ -1,127 +0,0 @@
-#! /bin/sh
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# TAP support:
-#  - testsuite progress on console should happen mostly "in real time";
-#    i.e., it's not acceptable for the driver to wait the end of the
-#    script to start displaying results from it.
-# FIXME: this test uses expect(1) to ensure line buffering from make and
-# children, and is pretty hacky and complex; is there a better way to
-# accomplish the checks done here?
-
-. test-init.sh
-
-cat >expect-check <<'END'
-eval spawn $env(SHELL) -c ":"
-expect eof
-END
-expect -f expect-check || {
-    echo "$me: failed to find a working expect program" >&2
-    exit 77
-}
-rm -f expect-check
-
-# Unfortunately, some make implementations (among them, FreeBSD make,
-# NetBSD make, and Solaris Distributed make), when run in parallel mode,
-# serialize the output from their targets' recipes unconditionally.  In
-# such a situation, there's no way the partial results of a TAP test can
-# be displayed until the test has terminated.  And this is not something
-# our TAP driver script can work around; in fact, the driver *is* sending
-# out its output progressively and "in sync" with test execution -- it is
-# make that is stowing such output away instead of presenting it to the
-# user as soon as it gets it.
-if ! using_gmake; then
-  case $MAKE in
-    *\ -j*) skip_ "doesn't work with non-GNU concurrent make";;
-  esac
-  # Prevent Sun Distributed Make from trying to run in parallel.
-  DMAKE_MODE=serial; export DMAKE_MODE
-fi
-
-cat > Makefile.am << 'END'
-TESTS = all.test
-AM_COLOR_TESTS= no
-END
-
-. tap-setup.sh
-
-cat > all.test <<'END'
-#! /bin/sh
-echo 1..3
-
-# Creative quoting to placate maintainer-check.
-sleep="sleep "3
-
-# The awk+shell implementation of the TAP driver must "read ahead" of one
-# line in order to catch the exit status of the test script it runs.  So
-# be sure to echo one "dummy" line after each result line in order not to
-# cause false positives.
-
-echo ok 1 - foo
-echo DUMMY
-$sleep
-test -f ok-1 || { echo 'Bail out!'; exit 1; }
-
-echo ok 2 - bar
-echo DUMMY
-$sleep
-test -f ok-2 || { echo 'Bail out!'; exit 1; }
-
-echo ok 3 - baz
-echo DUMMY
-$sleep
-test -f ok-3 || { echo 'Bail out!'; exit 1; }
-
-: > all-is-well
-END
-
-chmod a+x all.test
-
-cat > expect-make <<'END'
-eval spawn $env(MAKE) check
-expect {
-  "PASS: all.test 1 - foo" {
-    open "ok-1" "w"
-    exp_continue
-  }
-  "PASS: all.test 2 - bar" {
-    open "ok-2" "w"
-    exp_continue
-  }
-  "PASS: all.test 3 - baz" {
-    open "ok-3" "w"
-    exp_continue
-  }
-  "Testsuite summary" {
-    exit 0
-  }
-  timeout {
-    puts "expect timed out"
-    exit 1
-  }
-  default {
-    puts "expect error"
-    exit 1
-  }
-}
-END
-
-# Expect should simulate a tty as stdout, which should ensure a
-# line-buffered output.
-MAKE=$MAKE expect -f expect-make
-test -f all-is-well
-
-:
-- 
1.8.5.rc0.23.gaa27064

>From 20bcc91242f89bc7c14385209be19a9336bf7471 Mon Sep 17 00:00:00 2001
Message-Id: <20bcc9124[email-masked]>
In-Reply-To: <9d9aa6d15[email-masked]>
References: <9d9aa6d15[email-masked]>
From: Stefano Lattarini <[email-masked]>
Date: Mon, 23 Dec 2013 19:56:55 +0100
Subject: [PATCH 2/2] tests: make install-info-dir.sh print more debugging info

With the hope that this will shed more light on bug#14601

Signed-off-by: Stefano Lattarini <[email-masked]>
---
 t/install-info-dir.sh | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/t/install-info-dir.sh b/t/install-info-dir.sh
index b16824f..46a70b9 100644
--- a/t/install-info-dir.sh
+++ b/t/install-info-dir.sh
@@ -87,18 +87,19 @@ if test $have_installinfo = yes; then
 
   $MAKE install-info
   test -f $instdir/info/foo.info
-  test -f $instdir/info/dir
+  cat $instdir/info/dir
   $FGREP 'Does nothing at all, but has a nice name' $instdir/info/dir
 
   $MAKE uninstall
   test ! -e $instdir/info/foo.info
+  cat $instdir/info/dir
   $FGREP 'but has a nice name' $instdir/info/dir && exit 1
 
   dir="$destdir/$cwd/$instdir/info"
 
   $MAKE DESTDIR="$cwd/$destdir" install-info
   test -f "$dir"/foo.info
-  test -f "$dir"/dir
+  cat "$dir"/dir
   $FGREP 'Does nothing at all, but has a nice name' "$dir"/dir
   $MAKE DESTDIR="$cwd/$destdir" uninstall
   test ! -e "$dir"/foo.info
@@ -141,10 +142,10 @@ if test $have_installinfo = yes; then
 END
   $MAKE install-info
   test -f $instdir/info/foo.info
-  test -f $instdir/info/dir
+  cat $instdir/info/dir
   $MAKE uninstall
   test ! -e $instdir/info/foo.info
-  test -f $instdir/info/dir
+  cat $instdir/info/dir
   $FGREP 'but has a nice name' $instdir/info/dir && exit 1
   : For shells with busted 'set -e'.
 fi
@@ -169,6 +170,7 @@ fi
 chmod a-w $instdir/info/dir
 for val in no NO n; do
   env AM_UPDATE_INFO_DIR="$val" $MAKE uninstall
+  cat $instdir/info/dir
   $FGREP 'Does nothing at all, but has a nice name' $instdir/info/dir
 done
 
@@ -177,7 +179,7 @@ if test $have_installinfo = yes; then
     rm -rf $instdir
     env AM_UPDATE_INFO_DIR="$val" $MAKE install-info
     test -f $instdir/info/foo.info
-    test -f $instdir/info/dir
+    cat $instdir/info/dir
     env AM_UPDATE_INFO_DIR="$val" $MAKE uninstall
     test ! -e $instdir/info/foo.info
     $FGREP 'but has a nice name' $instdir/info/dir && exit 1
-- 
1.8.5.rc0.23.gaa27064