Re: [PATCH v4 1/4] add function test_must_fail_or_sigpipe and use it to fix flaky tests
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 6, 2015, 18:49 UTC
- Message-ID
- <xmqqmvur2cb8.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <xmqqr3k32dc9.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 5 quoted lines
> Adding the third variant in the way this patch does is making things > worse by inviting more mistakes. > > How about doing something like the attached to consolidate the > existing two into one, and then build this third one on top?
Actually, I think this other variant I came up with is cleaner and is more easily extensible. It already has the support for sigpipe, e.g. you can do
test_must_fail ok=sigpipe git fetch ...
Of course, you can do
test_must_fail_or_sigpipe () {
test_must_fail ok=sigpipe "$@"
}if it is easier to read. I do not have a very strong opinion either way.
t/test-lib-functions.sh | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh index e8d3c0f..b732f87 100644 --- a/t/test-lib-functions.sh +++ b/t/test-lib-functions.sh @@ -560,11 +560,26 @@ test_line_count () { # the failure could be due to a segv. We want a controlled failure. test_must_fail () { + case "$1" in + ok=*) + _test_ok=${1#ok=} + shift + ;; + *) + _test_ok= + ;; + esac "$@" exit_code=$? - if test $exit_code = 0; then + if ! case ",$_test_ok," in *,success,*) false;; esac && + test $exit_code = 0 + then echo >&2 "test_must_fail: command succeeded: $*" return 1 + elif ! case ",$_test_ok," in *,sigpipe,*) false;; esac && + test $exit_code = 141 + then + return 0 elif test $exit_code -gt 129 && test $exit_code -le 192; then echo >&2 "test_must_fail: died by signal: $*" return 1 @@ -590,16 +605,7 @@ test_must_fail () { # because we want to notice if it fails due to segv. test_might_fail () { - "$@" - exit_code=$? - if test $exit_code -gt 129 && test $exit_code -le 192; then - echo >&2 "test_might_fail: died by signal: $*" - return 1 - elif test $exit_code = 127; then - echo >&2 "test_might_fail: command not found: $*" - return 1 - fi - return 0 + test_must_fail ok=success "$@" } # Similar to test_must_fail and test_might_fail, but check that a