git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Fabian Stelzer <fs@gigacodes.de>
Cc: Junio C Hamano <gitster@pobox.com>,
	git@vger.kernel.org, Adam Dinwoodie <adam@dinwoodie.org>,
	Jeff King <peff@peff.net>
Subject: Re: [PATCH v3 3/3] test-lib: make BAIL_OUT() work in tests and prereq
Date: Tue, 30 Nov 2021 15:59:27 +0100	[thread overview]
Message-ID: <211130.86wnkpd6ou.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <20211130143821.7dz5jj2z2x2q2ytn@fs>


On Tue, Nov 30 2021, Fabian Stelzer wrote:

> On 28.11.2021 15:38, Junio C Hamano wrote:
>>Fabian Stelzer <fs@gigacodes.de> writes:
>>
>>>>I was expecting something along the lines of ...
>>>>
>>>># What is written by tests to their FD #1 and #2 are sent to
>>>># different places depending on the test mode (e.g. /dev/null in
>>>># non-verbose mode, piped to tee with --tee option, etc.)  Original
>>>># FD #1 and #2 are saved away to #5 and #7, so that test framework
>>>># can use them to send the output to these low FDs before the
>>>># mode-specific redirection.
>>>>
>>>>... but this only talks about the output side.  The final version
>>>>needs to mention the input side, too.
>>>>
>>>
>>> I like to use the term stdin/err/out since that is what i would grep for
>>> when trying to find out more about the test i/o behaviour.
>>
>>I do not mind phrasing "original FD #1" as "original standard
>>output" at all.  I just wanted to make sure it is clear to readers
>>whose FD #1 and FD #5 we are talking about. In other words, the
>>readers should get a clear understanding of where they are writing
>>to, when the code they write in test_expect_success block outputs to
>>FD #1, and what the code needs to do if it wants to always show
>>something to the original standard output stream.
>
> The current version in my branch is now:
>
> What is written by tests to stdout and stderr is sent so different places
> depending on the test mode (e.g. /dev/null in non-verbose mode, piped to tee
> with --tee option, etc.). We save the original stdin to FD #6 and stdout and
> stderr to #5 and #7, so that the test framework can use them (e.g. for
> printing errors within the test framework) independently of the test mode.
>
> which I think should make this sufficiently clear.
> I'm wondering now though if we should write to #7 instead of #5 in
> BAIL_OUT(). The current use in test-lib/test-lib-functions seems a bit 
> inconsistent.
>
> For example:
> error >&7 "bug in the test script: $*"
> echo >&7 "test_must_fail: only 'git' is allowed: $*"
>
> but:
> echo >&5 "FATAL: Cannot prepare test area"
> echo >&5 "FATAL: Unexpected exit with code $code"
>
> Sometimes these errors result in immediate exit 1, but not always.
>
> I'm not sure if the TAP framework that BAIL_OUT() references expects
> the bail out error on a specific fd.

All TAP must be emitted to stdout. You can test that with e.g.:
    
    $ cat tap.sh
    #!/bin/sh 
    echo "ok 1 one"
    echo "ok 2 two" >&2
    echo "1..1"
    $ prove --exec /bin/sh tap.sh
    tap.sh .. 1/? ok 2 two
    tap.sh .. ok   
    All tests successful.
    Files=1, Tests=1,  0 wallclock secs ( 0.01 usr +  0.00 sys =  0.01 CPU)
    Result: PASS

Note how the "ok 2 two" is emitted to STDERR, and doesn't count towards
the number of tests. If it's changed to:
    
    $ cat tap.sh
    #!/bin/sh
    echo "ok 1 one"
    echo "ok 2 two"
    echo "1..2"
    $ prove --exec /bin/sh tap.sh
    tap.sh .. ok   
    All tests successful.
    Files=1, Tests=2,  0 wallclock secs ( 0.00 usr +  0.01 sys =  0.01 CPU)
    Result: PASS

You can see it runs two tests.

The reason the existing cases are inconsistent are because of various
reasons, probably none good at this point.

Some are just because the error handling pre-dates the TAP support in
the test suite, I think at this point we should just be moving to making
it first-class in terms of TAP support. I.e. it's clearly the most
commonly used test mode (and we use it in CI etc.). So we should emit
all directives on STDOUT.

And some are probably just copy/pasting, or error handling that didn't
consider TAP at the time of writing.

Note that not all of these should be "Bail out!". We should really
reserve that for wanting to stall the entire test run, but e.g. not for
"cannot prep test area", which might only be a permission error with one
trash directory.




  reply	other threads:[~2021-11-30 15:14 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-17  9:04 [PATCH v2 0/2] test-lib: improve missing prereq handling Fabian Stelzer
2021-11-17  9:04 ` [PATCH v2 1/2] test-lib: show missing prereq summary Fabian Stelzer
2021-11-17  9:04 ` [PATCH v2 2/2] test-lib: introduce required prereq for test runs Fabian Stelzer
2021-11-18 23:42   ` Junio C Hamano
2021-11-19  9:07     ` Fabian Stelzer
2021-11-19 11:13   ` Ævar Arnfjörð Bjarmason
2021-11-19 13:48     ` Fabian Stelzer
2021-11-19 14:09     ` Fabian Stelzer
2021-11-19 14:26       ` Ævar Arnfjörð Bjarmason
2021-11-19 15:40         ` Fabian Stelzer
2021-11-19 16:37           ` Ævar Arnfjörð Bjarmason
2021-11-20 15:03   ` [PATCH v3 0/3] test-lib: improve missing prereq handling Fabian Stelzer
2021-11-20 15:03     ` [PATCH v3 1/3] test-lib: show missing prereq summary Fabian Stelzer
2021-11-20 15:04     ` [PATCH v3 2/3] test-lib: introduce required prereq for test runs Fabian Stelzer
2021-11-20 15:04     ` [PATCH v3 3/3] test-lib: make BAIL_OUT() work in tests and prereq Fabian Stelzer
2021-11-22 11:52       ` Ævar Arnfjörð Bjarmason
2021-11-22 17:05         ` Junio C Hamano
2021-11-26  9:55           ` Fabian Stelzer
2021-11-26 21:02             ` Junio C Hamano
2021-11-27 12:47               ` Fabian Stelzer
2021-11-28 23:38                 ` Junio C Hamano
2021-11-30 14:38                   ` Fabian Stelzer
2021-11-30 14:59                     ` Ævar Arnfjörð Bjarmason [this message]
2021-12-01  8:53     ` [PATCH v4 0/3] test-lib: improve missing prereq handling Fabian Stelzer
2021-12-01  8:53       ` [PATCH v4 1/3] test-lib: show missing prereq summary Fabian Stelzer
2021-12-01  8:53       ` [PATCH v4 2/3] test-lib: introduce required prereq for test runs Fabian Stelzer
2021-12-01  8:53       ` [PATCH v4 3/3] test-lib: make BAIL_OUT() work in tests and prereq Fabian Stelzer
2021-12-01 23:13         ` Junio C Hamano
2021-12-01 21:05       ` [PATCH v4 0/3] test-lib: improve missing prereq handling Adam Dinwoodie

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=211130.86wnkpd6ou.gmgdl@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=adam@dinwoodie.org \
    --cc=fs@gigacodes.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    /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 NNTP newsgroup(s).