From: Bruno Larsen <blarsen@redhat.com>
To: Andrew Burgess <aburgess@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH] gdb/testsuite: handle invalid .exp names passed in TESTS
Date: Mon, 12 Sep 2022 09:51:57 +0200 [thread overview]
Message-ID: <dfc87311-493a-dd55-8fc2-430661c4e777@redhat.com> (raw)
In-Reply-To: <20220910164349.1945521-1-aburgess@redhat.com>
Hi Andrew,
Once again, very well timed patch as I had just noticed this problem!
Other than a typo (response inlined), my only comment is that, since you
are already renaming check-single, what do you think about renaming to
check-single-thread or check-sequential?
My reasoning is that when first reading the message and diff, I thought
this rule would test a single test, which left me confused for a minute.
Either way, I like the patch, and encourage you to approve it!
--
Cheers,
Bruno
On 10/09/2022 18:43, Andrew Burgess via Gdb-patches wrote:
> I ran some tests like:
>
> $ make check-gdb TESTS="gdb.base/break.exp"
>
> then, then I went to rerun the tests later, I managed to corrupt the
> command line, like this:
>
> $ make check-gdb TESTS="gdb.base/breakff.exp"
>
> the make command did exit with an error, but DejaGnu appeared to
> report that every test passed! The tail end of the output looks like
> this:
>
> Illegal Argument "no-matching-tests-found"
> try "runtest --help" for option list
> === gdb Summary ===
>
> # of expected passes 115
> /tmp/build/gdb/gdb version 13.0.50.20220831-git -nw -nx -iex "set height 0" -iex "set width 0" -data-directory /tmp/build/gdb/testsuite/../data-directory
>
> make[3]: *** [Makefile:212: check-single] Error 1
> make[3]: Leaving directory '/tmp/build/gdb/testsuite'
> make[2]: *** [Makefile:161: check] Error 2
> make[2]: Leaving directory '/tmp/build/gdb/testsuite'
> make[1]: *** [Makefile:1916: check] Error 2
> make[1]: Leaving directory '/tmp/build/gdb'
> make: *** [Makefile:13565: check-gdb] Error 2
>
> For a while, I didn't spot that DejaGnu had failed at all, I saw the
> 115 passes, and thought everything had run correctly - though I was
> puzzled that make was reporting an error.
>
> What happens is that in gdb/testsuite/Makefile, in the check-single
> rule, we first run DejaGnu, then run the dg-add-core-file-count.sh
> script, and finally, we use sed to extract the results from the
> gdb.sum file.
>
> In my case, with the invalid test name, DejaGnu fails, but the
> following steps are still run, the final result, the 115 passes, is
> then extracted from the pre-existing gdb.sum file.
>
> If I use 'make -jN' then the 'check-parallel' rule, rather than the
> 'check-single' rule is used. In this case the behaviour is slightly
> different, the tail end of the output now looks like this:
>
> No matching tests found.
>
> make[4]: Leaving directory '/tmp/build/gdb/testsuite'
> find: ‘outputs’: No such file or directory
> Usage: ../../../src/gdb/testsuite/../../contrib/dg-extract-results.py [-t tool] [-l variant-list] [-L] log-or-sum-file ...
>
> tool The tool (e.g. g++, libffi) for which to create a
> new test summary file. If not specified then output
> is created for all tools.
> variant-list One or more test variant names. If the list is
> not specified then one is constructed from all
> variants in the files for <tool>.
> sum-file A test summary file with the format of those
> created by runtest from DejaGnu.
> If -L is used, merge *.log files instead of *.sum. In this
> mode the exact order of lines may not be preserved, just different
> Running *.exp chunks should be in correct order.
> find: ‘outputs’: No such file or directory
> Usage: ../../../src/gdb/testsuite/../../contrib/dg-extract-results.py [-t tool] [-l variant-list] [-L] log-or-sum-file ...
>
> tool The tool (e.g. g++, libffi) for which to create a
> new test summary file. If not specified then output
> is created for all tools.
> variant-list One or more test variant names. If the list is
> not specified then one is constructed from all
> variants in the files for <tool>.
> sum-file A test summary file with the format of those
> created by runtest from DejaGnu.
> If -L is used, merge *.log files instead of *.sum. In this
> mode the exact order of lines may not be preserved, just different
> Running *.exp chunks should be in correct order.
> make[3]: Leaving directory '/tmp/build/gdb/testsuite'
> make[2]: Leaving directory '/tmp/build/gdb/testsuite'
> make[1]: Leaving directory '/tmp/build/gdb'
>
> Rather than DejaGnu failing, we now get a nice 'No matching tests
> found' message, followed by some other noise. This other noise is
> first `find` failing, followed by the dg-extract-results.py script
> failing.
>
> What happens here is that, in the check-parallel rule, the outputs
> directory is deleted before DejaGnu is invoked. Then we try to run
> all the tests, and finally we use find and dg-extract-results.py to
> combine all the separate .sun
.sum*
> and .log files together. However, if
> there are no tests run then the outputs/ directory is never created,
> so the find command and consequently the dg-extract-results.py script,
> fail.
>
> This commit aims to fix the following issues:
>
> (1) For check-single and check-parallel rules, don't run any of the
> post-processing steps if DejaGnu failed to run. This will avoid all
> the noise after the initial failure of DejaGnu,
>
> (2) For check-single ensure that we don't accidentally report
> previous results, this is related to the above, but is worth calling
> out as a separate point, and
>
> (3) For check-single, print the 'No matching tests found' message
> just like we do for a parallel test run. This makes the parallel and
> non-parallel testing behaviour more similar, and I think is clearer
> than the current 'Illegal Argument' error message.
>
> Points (1) and (2) will be handled by moving the post processing steps
> inside an if block within the recipe. For check-single I propose
> deleting the gdb.sum and gdb.log files before running DejaGnu, this is
> similar (I think) to how we delete the outputs/ directory in the
> check-parallel rule.
>
> For point (3) I plan to split the check-single rule in two, the
> existing check-single will be renamed do-check-single, then a new
> check-single rule will be added. The new check-single rule can either
> depend on the new do-check-single, or will ensure the 'No matching
> tests found' message is printed when appropriate.
> ---
> gdb/testsuite/Makefile.in | 40 +++++++++++++++++++++++++++++----------
> 1 file changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in
> index 87ba522c9e0..49b8a60a35c 100644
> --- a/gdb/testsuite/Makefile.in
> +++ b/gdb/testsuite/Makefile.in
> @@ -203,18 +203,36 @@ expanded_tests := $(patsubst $(srcdir)/%,%,$(wildcard $(addprefix $(srcdir)/,$(T
> expanded_tests_or_none := $(or $(expanded_tests),no-matching-tests-found)
> endif
>
> +# With check-single, if TESTS was expanded to "no-matching-tests-found" then
> +# this will be passed to DejaGnu, resuling in an error. With check-parallel
> +# in the same situation, we avoid invoking DejaGnu, and instead just call
> +# the check/no-matching-tests-found rule (which prints a helpful message).
> +#
> +# To get the same behaviour for check-single we decide here, based on how
> +# TESTS expanded, whether check-single should redirect to do-check-single or
> +# to check/no-matching-tests-found.
> +ifeq ($(expanded_tests_or_none),no-matching-tests-found)
> +CHECK_SINGLE_DEP=check/no-matching-tests-found
> +else
> +CHECK_SINGLE_DEP=do-check-single
> +endif
> +
> # Shorthand for running all the tests in a single directory.
> check-gdb.%:
> $(MAKE) check TESTS="gdb.$*/*.exp"
>
> -check-single:
> - -rm -f *core*
> +do-check-single:
> + -rm -f *core* gdb.sum gdb.log
> $(DO_RUNTEST) $(RUNTESTFLAGS) $(expanded_tests_or_none) $(TIMESTAMP); \
> result=$$?; \
> - $(SHELL) $(srcdir)/lib/dg-add-core-file-count.sh; \
> - sed -n '/=== gdb Summary ===/,$$ p' gdb.sum; \
> + if test -e gdb.sum; then \
> + $(SHELL) $(srcdir)/lib/dg-add-core-file-count.sh; \
> + sed -n '/=== gdb Summary ===/,$$ p' gdb.sum; \
> + fi; \
> exit $$result
>
> +check-single: $(CHECK_SINGLE_DEP)
> +
> check-single-racy:
> -rm -rf cache racy_outputs temp
> mkdir -p racy_outputs; \
> @@ -240,12 +258,14 @@ check-parallel:
> -rm -rf cache outputs temp
> $(MAKE) -k do-check-parallel; \
> result=$$?; \
> - $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
> - `find outputs -name gdb.sum -print` > gdb.sum; \
> - $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
> - `find outputs -name gdb.log -print` > gdb.log; \
> - $(SHELL) $(srcdir)/lib/dg-add-core-file-count.sh; \
> - sed -n '/=== gdb Summary ===/,$$ p' gdb.sum; \
> + if test -d outputs; then \
> + $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
> + `find outputs -name gdb.sum -print` > gdb.sum; \
> + $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
> + `find outputs -name gdb.log -print` > gdb.log; \
> + $(SHELL) $(srcdir)/lib/dg-add-core-file-count.sh; \
> + sed -n '/=== gdb Summary ===/,$$ p' gdb.sum; \
> + fi; \
> exit $$result
>
> check-parallel-racy:
next prev parent reply other threads:[~2022-09-12 7:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-10 16:43 Andrew Burgess
2022-09-12 7:51 ` Bruno Larsen [this message]
2022-09-22 9:21 ` Andrew Burgess
2022-10-02 17:06 ` Andrew Burgess
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=dfc87311-493a-dd55-8fc2-430661c4e777@redhat.com \
--to=blarsen@redhat.com \
--cc=aburgess@redhat.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).