automake-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[automake-commit] branch master updated: test: force long sleep with exp


From: Karl Berry
Subject: [automake-commit] branch master updated: test: force long sleep with explicit cache variable setting.
Date: Mon, 25 Dec 2023 18:38:27 -0500

This is an automated email from the git hooks/post-receive script.

karl pushed a commit to branch master
in repository automake.

View the commit online:
https://git.savannah.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=0249be1e9b763ea2188a3050822b2c7b24b2a6ec

The following commit(s) were added to refs/heads/master by this push:
     new 0249be1e9 test: force long sleep with explicit cache variable setting.
0249be1e9 is described below

commit 0249be1e9b763ea2188a3050822b2c7b24b2a6ec
Author: Karl Berry <karl@freefriends.org>
AuthorDate: Mon Dec 25 15:38:15 2023 -0800

    test: force long sleep with explicit cache variable setting.
    
    From https://bugs.gnu.org/67670.
    
    * t/ax/test-defs.in: when MTIME_RESOLUTION is set to 1
    because automake/autom4te do not support subsecond-mtime,
    also set am_cv_sleep_fractional_seconds=false. Otherwise
    the random parallel test failures from given bug and others return.
    * m4/sanity.m4 (_AM_SLEEP_FRACTIONAL_SECONDS): reformat.
    (_AM_FILESYSTEM_TIMESTAMP_RESOLUTION): elide "the" in AC_CACHE_CHECK.
    * t/amassign.sh: end with :.
    * HACKING: more on debugging tests.
    * NEWS: update.
---
 HACKING           | 60 ++++++++++++++++++++++++++++++++++++++++++-------------
 NEWS              | 16 ++++++++-------
 m4/sanity.m4      |  8 +++++---
 t/amassign.sh     |  2 ++
 t/ax/test-defs.in | 15 ++++++++++++--
 5 files changed, 75 insertions(+), 26 deletions(-)

diff --git a/HACKING b/HACKING
index e642d2eb0..85dd89a5a 100644
--- a/HACKING
+++ b/HACKING
@@ -42,7 +42,8 @@
   should be updated by hand whenever the GPL gets updated (which
   shouldn't happen that often anyway :-).
 
-* All changes that are not trivial bug fixes must be mentioned in NEWS.
+* All changes from the last release that are not trivial bug fixes should
+  be mentioned in NEWS.
 
 * Changes which are potentially controversial, require a non-trivial
   plan, or must be implemented gradually with a roadmap spanning several
@@ -374,20 +375,18 @@
 
 * You can run a single test, with, e.g.,
     make check TESTS='t/aclocal-acdir.sh'
-
   where t/aclocal-acdir.sh can be any t/*.sh test, including a new one
   you are writing.  You may want to add --no-print-dir to silence GNU
   make about the many cd commands, and/or env VERBOSE=1 to get more
   information about what make is running.
 
-* Sometimes you may want to see when each test starts running, and not
-  just when they complete.  This can be done by setting TESTS_ENVIRONMENT,
-  as in:
+* Sometimes you may want to see when each test starts running, not only
+  when they complete.  This can be done by setting TESTS_ENVIRONMENT:
     make -j12 VERBOSE=1 TESTS_ENVIRONMENT='echo RUNNING: "$$f";' check
 
 * Run "make maintainer-check" before commit.  Watch out for trailing spaces.
-  It may be useful to run it more verbose:
-    make AM_V_GEN= VERBOSE=1 maintainer-check
+  Probably useful to run it more verbosely:
+    make AM_V_GEN= AM_V_at= VERBOSE=1 maintainer-check
 
 * After "make -j12 check" succeeds. run "make -j12 distcheck" before
   pushing a commit, since that exercises yet more of the code.
@@ -409,25 +408,58 @@
     make check TESTS='t/good-name.sh'
 
   - During development of a new test, it can be useful to end it with
-    "exit 33" (or whatever random value) to force it to fail even when it
-    would otherwise succeed, so you can inspect the test directory to be
-    sure things worked as expected.
+  "exit 33" (or any random value) to force it to fail even when it would
+  otherwise succeed, so you can inspect the test.dir/test.log and other
+  test.dir/* files to be sure things worked as expected.
 
   - At some point before releasing, add the test to the appropriate
   variable in t/list-of-tests.mk, most likely the (alphabetical)
   handwritten_TESTS.
 
+* Some hints for debugging test failures or trying to understand the
+  (complex) test infrastructure.
+  
+  - You may want a simple test just to exercise the setup; t/amassign.sh
+  is such a test. For a simple test that runs automake twice (sometimes
+  useful in finding concurrency failures), try t/nodef.sh.
+  
+  - The t/ax/ dir contains most of the test infrastructure files.
+
+  - To trace the (complex) test initialization code, change the set -e
+  to set -ex (or whatever you wish) in t/ax/test-init.sh.
+  Automake itself enables -x for the *.log and test-suite.log files,
+  in am_test_setup in t/ax/test-lib.sh. You may want to change to -vx.
+  
+  - If you want to run the individual commands of a test one by one in a
+  shell, you have to reproduce the test environment. Start a subshell and:
+    PATH=$am/bin:$am/t/ax:$PATH # where $am is your automake source checkout
+    set +u          # if needed; automake cannot handle this "nounset" option
+    . test-init.sh  # beginning of test
+  Then each command you type will be executed in the test environment,
+  including -x being enabled. Each test prints the PATH value at the beginning.
+  
+  - If you need to debug a test which fails under installcheck, you need
+  to invoke make with am_running_installcheck=yes, as is done by the
+  installcheck-testsuite target in t/local.mk.
+  
+  - If you want to see the (complex shell) commands that make is
+  running, despite all of Automake's attempt at silence, run (GNU)
+    make --debug=p ... other make args ...
+
 ============================================================================
 = Bug tracker
 
 * Automake uses the debbugs instance at https://bugs.gnu.org.  Email
   from the tracker is sent to bug-automake@gnu.org, and vice versa.
-  (https://gnu.org/s/automake for all the mailing lists; you should subscribe.)
+  Ditto automake-patches@gnu.org. (See
+  https://gnu.org/s/automake for all the mailing lists; if you're
+  working on Automake, please subscribe.)
 
-* To see all open bugs (and recently closed ones):
+* To see all open bugs resp. patches (and recently closed ones):
     https://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=automake
+    https://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=automake-patches
 
-* For a full search form, initialized to show bugs tagged confirmed:
+* For a full search form, initialized to show only bugs tagged confirmed:
     
https://debbugs.gnu.org/cgi/pkgreport.cgi?package=automake;include=tags%3Aconfirmed
 
 * We use the "confirmed" tag to mean bugs that have been reviewed, are
@@ -437,7 +469,7 @@
 * To download the so-called maintainer mbox for a bug, say 12345:
     https://debbugs.gnu.org/cgi/bugreport.cgi?bug=12345;mbox=yes;mboxmaint=yes
   Only the maintainer mbox consistently has the bug# prefix on Subject:
-  lines, so it is generally the most usable.
+  lines, so it is the most usable, as far as we know.
 
 * To close a bug, you can mail (or bcc) to 12345-done@debbugs.gnu.org.
   It's best to do this with a note saying that the bug is being closed
diff --git a/NEWS b/NEWS
index 5b56a7283..276dcc9da 100644
--- a/NEWS
+++ b/NEWS
@@ -45,13 +45,13 @@ New in 1.17:
 
   - Generated file timestamp checks handle filesystems with sub-second
     timestamp granularity dynamically, greatly speeding up make check,
-    etc. However, this requires an autom4te from Autoconf 2.72 (as yet
-    unreleased) or later (or random test failures and other timing
-    problems may ensue), as well as a Perl, sleep utility, and
-    filesystem that supports sub-second resolution; otherwise, we fall
-    back to one-second granularity as before. When everything is
-    supported, a new line `Features: subsecond-mtime' is printed by
-    automake --version (and autom4mte --version). (bug#64756, bug#67670)
+    etc. However, this requires an autom4te from Autoconf 2.72 or later
+    (or random test failures and other timing problems may ensue), as
+    well as a Perl, sleep utility, and filesystem that supports
+    sub-second resolution; otherwise, we fall back to one-second
+    granularity as before. When everything is supported, a line
+    `Features: subsecond-mtime' is now printed by automake --version
+    and autom4mte --version. (bug#64756, bug#67670)
 
   - The default value of $ARFLAGS is now "cr" instead of "cru", to better
     support deterministic builds. (bug#20082)
@@ -85,6 +85,8 @@ New in 1.17:
   - Pass any options given to AM_PROG_LEX on to AC_PROG_LEX.
     (bug#65600, bug#65730)
 
+  - Typos in code and other doc fixes. (bug#68003, bug#68004, et al.)
+
 * Obsolescence:
 
   - py-compile no longer supports Python 0.x or 1.x versions.  Python 2.0,
diff --git a/m4/sanity.m4 b/m4/sanity.m4
index 93c4854b9..3e3c5828c 100644
--- a/m4/sanity.m4
+++ b/m4/sanity.m4
@@ -9,8 +9,10 @@
 # _AM_SLEEP_FRACTIONAL_SECONDS
 # ----------------------------
 AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl
-AC_CACHE_CHECK([whether sleep supports fractional seconds], 
am_cv_sleep_fractional_seconds, [dnl
-AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=true], 
[am_cv_sleep_fractional_seconds=false])
+AC_CACHE_CHECK([whether sleep supports fractional seconds],
+               am_cv_sleep_fractional_seconds, [dnl
+AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=true],
+                                 [am_cv_sleep_fractional_seconds=false])
 ])])
 
 # _AM_FILESYSTEM_TIMESTAMP_RESOLUTION
@@ -25,7 +27,7 @@ AS_IF([sleep 0.001 2>/dev/null], 
[am_cv_sleep_fractional_seconds=true], [am_cv_s
 # granularity, so we don't check for anything finer than that.
 AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl
 AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS])
-AC_CACHE_CHECK([the filesystem timestamp resolution], 
am_cv_filesystem_timestamp_resolution, [dnl
+AC_CACHE_CHECK([filesystem timestamp resolution], 
am_cv_filesystem_timestamp_resolution, [dnl
 # Default to the worst case.
 am_cv_filesystem_timestamp_resolution=2
 
diff --git a/t/amassign.sh b/t/amassign.sh
index 1ad40b9d8..0fcacb307 100644
--- a/t/amassign.sh
+++ b/t/amassign.sh
@@ -26,3 +26,5 @@ AC_SUBST([AM_ZARDOZ])
 END
 
 $ACLOCAL
+
+:
diff --git a/t/ax/test-defs.in b/t/ax/test-defs.in
index 696403ee0..bca675fcd 100644
--- a/t/ax/test-defs.in
+++ b/t/ax/test-defs.in
@@ -193,9 +193,20 @@ case $MTIME_RESOLUTION in
       :
     else
       MTIME_RESOLUTION=1
+      # we must not sleep for fractional seconds when autom4te does not
+      # support subsecond-mtimes, even when sleep supports it. See bug#67670.
+      am_cv_sleep_fractional_seconds=false
+      export am_cv_sleep_fractional_seconds
     fi
   ;;
 esac
+
+# This sleep variable is used explicitly in some tests to avoid
+# too-quick creation. I (Karl) believe that was an incomplete workaround
+# for this whole subsecond-mtime problem. With this set to "sleep 1",
+# there were still random parallelization failures, without also setting
+# am_cv_sleep_fractional_seconds=false as above.
+# 
 sleep="sleep $MTIME_RESOLUTION"
 
 # An old timestamp that can be given to a file, in "touch -t" format.
@@ -205,8 +216,8 @@ sleep="sleep $MTIME_RESOLUTION"
 old_timestamp=198309271735.59
 
 # Make our wrapper script (or installed scripts, if running under
-# "installcheck") accessible by default.  And avoid to uselessly
-# extend $PATH multiple times if this file is sourced multiple times.
+# "installcheck") accessible by default.  And avoid uselessly
+# extending $PATH multiple times if this file is sourced multiple times.
 case $PATH in
   $am_bindir$PATH_SEPARATOR*) ;;
   *) PATH=$am_bindir$PATH_SEPARATOR$PATH;;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]