[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'.
From: |
Ralf Wildenhues |
Subject: |
Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'. |
Date: |
Thu, 16 Sep 2010 20:59:40 +0200 |
User-agent: |
Mutt/1.5.20 (2010-08-04) |
Hi Stefano,
* Stefano Lattarini wrote on Thu, Sep 16, 2010 at 04:24:46AM CEST:
> Your objections, reasonings and suggestsions have been quite enlighting,
> and brought me to the understandanding that most of our problems were
> deriving by the juggling of "weird strings" ;-> between gen-instspc-tests,
> instspc.sh and the generated Makefile.in. Thus I've attempted a rewrite
> of the patch, where names and contents of the problematic strings are kept
> in a single, centralized place: a new "driver script" `instspc-tests.sh'.
Cool.
With nits below addressed, the patch is OK for master, but please commit
to a new branch off of maint and merge that to master (that way, I hope
we may have an easier time doing merge fixups from other testsuite
changes later). Thanks.
I have an idea for a followup patch by the way: have a prerequisite of
all the instspc-*test logs create instspc.dir/ with all the files in it,
and autotools already run. Then let each individual test create a build
directory in its own test directory, but reuse the source tree
../../instspc.dir/configure [...]
$MAKE ...
that way you can regain almost all of the newly-introduced overhead by
not running aclocal, autoconf, automake, more than once.
On my system, the overhead amounts to going from 1:20 to 3:48 (this
is just the instspc* tests), which amounts to a net increase of the
whole testsuite by, I'm guessing, 15%.
Cheers,
Ralf
> On Wednesday 15 September 2010, Ralf Wildenhues wrote:
> > * Stefano Lattarini wrote on Tue, Sep 14, 2010 at 02:15:59PM CEST:
> > > On Monday 13 September 2010, Ralf Wildenhues wrote:
[...]
> > > > > + echo '. ./defs || Exit 99 || exit 99'; \
> > > >
> > > > ;-)
> > >
> > > A similar tweaking (for all tests) is planned in my ongoing
> > > "Testsuite initialization refactoring". Do you want me to drop
> > > it in this patch and re-insert it when the refactoring branch is
> > > merged?
> >
> > No that's fine, I was just smiling at this. I don't think we need
> > the extra '|| exit 99' though: although it is more correct,
> Even if I must admit that still have to see a shell that doesn't
> abort by itself on a failed ". ./FILE" command... ;-)
Indeed. '.' is a special built-in utility, and Posix explicitly
documents that not finding the FILE causes the script to exit.
Thanks for the reminder.
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,4 +1,41 @@
> -2010-09-14 Stefano Lattarini <address@hidden>
> +2010-09-16 Stefano Lattarini <address@hidden>
This looks fishy, you seem to be modifying the date of a previous commit
entry, rather than adding a new one.
> + Overhauled and modularized tests in `instspc.test'.
> + The test `instspc.test' was way too big and fragile. Its running
> + time was very long. It also produced a log that was nearly
> + unreadable due to its length, making it very difficult to find
> + out the reason for failures.
> + Also, it was too much monolithic, with a single (maybe spurious)
> + failure in a corner case causing the whole test to fail (even if
> + everything worked as expected in the other 99% of cases).
> + The present change should solve these problems, by separating
> + `instspc.test' into many smaller, self-contained, auto-generated
> + tests.
> + * tests/instspc.test: Removed.
> + * tests/instspc-tests.sh: New script, fullfilling a double role:
fulfilling
> + 1. it generates a Makefile.am snippet `tests/instspc-tests.am',
> + containing the definition of a list of new tests which will take
> + over the older `instspc.test', and
> + 2. it is sourced by said generated tests with proper parameters
> + pre-set, to run the "meat" of the checks.
> + This apparent abuse is indeed required because the test generation
> + code and test execution code are inevitably interwined.
intertwined
> + * tests/Makefile.am ($(srcdir)/instspc-tests.am): Include this
> + snippet, which (among the other things) defines ...
> + (instspc_tests): ... this new macro, containing the list of the
> + newly generated `instspc*.test' tests, and ...
> + (instspc_xfail_tests): ... this new macro, containing the list
> + of the `instspc*.test' tests expected to fail.
> + ($(instspc_tests)): New rule, generates the `instspc*.test' tests.
> + ($(instspc_tests:.test=.log)): New rule, registers the dependency
> + of all `instspc*.test' tests on the `instspc-tests.sh' script.
> + (TESTS): Add `$(instspc_tests)', remove `instspc.test'.
> + (XFAIL_TESTS): Add `$(xfail_instspc_tests)'.
> + (EXTRA_DIST): Distribute instspc-tests.sh.
> + (MAINTAINERCLEANFILES): Added $(instspc_tests).
> + Other minor cosmetic changes.
> + * bootstrap: Generate instspc-tests.am.
> + * tests/.gitignore: Updated.
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> +$(instspc_tests): Makefile.am
> + $(AM_V_at)rm -f $@ address@hidden
> + $(AM_V_GEN) :; \
> + base=`expr x'$@' : x'instspc-\(.*\)\.test$$'`; \
I think $@ could contain $(srcdir) here, no? You could just kill off
all directory components to be sure.
> + name=`expr x"$$base" : x'\(.*\)-'`; \
> + action=`expr x"$$base" : x'.*-\(.*\)'`; \
> + { \
> + echo '#!/bin/sh'; \
> + echo '# DO NOT EDIT! GENERATED AUTOMATICALLY!'; \
> + echo; \
> + echo '# Ensure proper definition of $$srcdir.'; \
> + echo 'am_skip_defs=yes'; \
> + echo '. ./defs || exit 99'; \
> + echo 'test -n "$$srcdir" || exit 99 # sanity check'; \
> + echo; \
> + echo "instspc_test_name='$$name'"; \
> + echo "instspc_action='test-$$action'"; \
> + echo ". \$$srcdir/instspc-tests.sh"; \
> + } > address@hidden
> + $(AM_V_at)chmod a+rx address@hidden && mv -f address@hidden $@
[...]
> --- /dev/null
> +++ b/tests/instspc-tests.sh
> +# Driver script to generate and run tests checking that building from,
> +# or installing to, directories with shell metacharacters succeed.
> +#
> +# Original report from James Amundson about file names with spaces.
> +# Other characters added by Paul Eggert.
> +#
> +# This script fullfills a double role:
fulfills
Alternatively, you could have split the thing in three: a generator
script, a test run script, and the common parts in a scriplet sourced
by both. I'm OK with the way it is now, though.
> +# 1. It generates a Makefile.am snippet, containing the definintion
definition
> +# of proper lists of tests.
> +# 2. It is sourced by said generated tests with proper parameters
> +# pre-set, to run the "meat" of the checks.
> +# This setup might seem tricky and over-engineered abuse, but past
> +# (painful) experiences showed that it is indeed required, because
> +# the test generation code and test execution code tend to be
> +# inextricably coupled and interwined.
intertwined
> +set -e
[...]
> +elif test $# -gt 0; then
> + echo "$0: action specified and command line arguments used" >&2
> + exit 99
> +elif test x"$instspc_action" = x"generate-makefile"; then
> + :
indentation
> +else
> + case $instspc_action in
> + test-build|test-install)
> + if test x"$instspc_test_name" = x; then
> + echo "$0: test name undefined for action '$instspc_action'" >&2
> + exit 99
> + fi;;
> + *)
> + echo "$0: invalid action: '$instspc_action'"
> + exit 99;;
> + esac
> +fi
> +
> +# Helper subroutine for test data definition.
> +# Usage: define_problematic_string NAME STRING
again, this is veery nitty, and for the testsuite I don't really mind
all that much, but the GNU style comment for this function would be
something like this:
# define_problematic_string NAME STRING [FAILURE-MODE]...
# -------------------------------------------------------
# Register STRING in associative array instspc__<NAME> and NAME in
# instspc_names_list. Update instspc_xfail_builds_list and
# instspc_xfail_installs_list according to FAILURE-MODEs.
> +define_problematic_string ()
> +{
> + tst=$1
> + shift
> + eval "instspc__$tst=\$1" || exit 99
> + shift
> + instspc_names_list="$instspc_names_list $tst"
> + # Some of the "problematic" characters cannot be used in the name of
> + # a build or install directory on a POSIX host. These lists should
> + # be empty, but are not due to limitations in Autoconf, Automake, Make,
> + # M4, or the shell.
> + case " $* " in *' fail-build '*|*' build-fail '*)
> + instspc_xfail_builds_list="$instspc_xfail_builds_list $tst";;
> + esac
> + case " $* " in *' fail-install '*|*' install-fail '*)
> + instspc_xfail_installs_list="$instspc_xfail_installs_list $tst";;
> + esac
> +}
> +# Skip if this system doesn't support these characters in file names.
> +mkdir "./$instspc_test_string" || Exit 77
> +
> +mkdir sub1
> +
> +cat >> configure.in << 'EOF'
> +AC_PROG_CC
> +AC_PROG_RANLIB
> +AC_OUTPUT
> +EOF
> +
> +mkdir sub
Collapse three mkdir calls into one, to save two (times 2 times 45)
processes?
[...]
- Re: [PATCH] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/07
- Re: [PATCH] Overhauled and modularized tests in `instspc.test'., Ralf Wildenhues, 2010/09/13
- Re: [PATCH] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/14
- Re: [PATCH] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/14
- Re: [PATCH] Overhauled and modularized tests in `instspc.test'., Ralf Wildenhues, 2010/09/15
- [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/15
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'.,
Ralf Wildenhues <=
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/16
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Ralf Wildenhues, 2010/09/16
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/16
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/17
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Ralf Wildenhues, 2010/09/17
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/21
- Tests with Heirloom tools (was: [PATCH v2] Overhauled and modularized tests in `instspc.test'.), Stefano Lattarini, 2010/09/21
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/24
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/24
- Re: [PATCH v2] Overhauled and modularized tests in `instspc.test'., Stefano Lattarini, 2010/09/24