Skip to content

Commit 8bf4bec

Browse files
larsxschneiderpeff
authored andcommitted
add "ok=sigpipe" to test_must_fail and use it to fix flaky tests
t5516 "75 - deny fetch unreachable SHA1, allowtipsha1inwant=true" is flaky in the following case: 1. remote upload-pack finds out "not our ref" 2. remote sends a response and closes the pipe 3. fetch-pack still tries to write commands to the remote upload-pack 4. write call in wrapper.c dies with SIGPIPE The test is flaky because the sending fetch-pack may or may not have finished writing its output by step (3). If it did, then we see a closed pipe on the next read() call. If it didn't, then we get the SIGPIPE from step (4) above. Both are fine, but the latter fools test_must_fail. t5504 "9 - push with transfer.fsckobjects" is flaky, too, and returns SIGPIPE once in a while. I had to remove the final "To dst..." output check because there is no output if the process dies with SIGPIPE. Accept such a death-with-sigpipe also as OK when we are expecting a failure. Signed-off-by: Lars Schneider <[email protected]> Signed-off-by: Jeff King <[email protected]>
1 parent bbfe530 commit 8bf4bec

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

t/t5504-fetch-receive-strict.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ test_expect_success 'push with receive.fsckobjects' '
100100
git config receive.fsckobjects true &&
101101
git config transfer.fsckobjects false
102102
) &&
103-
test_must_fail git push --porcelain dst master:refs/heads/test >act &&
103+
test_must_fail ok=sigpipe git push --porcelain dst master:refs/heads/test >act &&
104104
test_cmp exp act
105105
'
106106

@@ -111,8 +111,7 @@ test_expect_success 'push with transfer.fsckobjects' '
111111
cd dst &&
112112
git config transfer.fsckobjects true
113113
) &&
114-
test_must_fail git push --porcelain dst master:refs/heads/test >act &&
115-
test_cmp exp act
114+
test_must_fail ok=sigpipe git push --porcelain dst master:refs/heads/test >act
116115
'
117116

118117
cat >bogus-commit <<\EOF

t/t5516-fetch-push.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,15 +1162,15 @@ do
11621162
mk_empty shallow &&
11631163
(
11641164
cd shallow &&
1165-
test_must_fail git fetch ../testrepo/.git $SHA1_3 &&
1166-
test_must_fail git fetch ../testrepo/.git $SHA1_1 &&
1165+
test_must_fail ok=sigpipe git fetch ../testrepo/.git $SHA1_3 &&
1166+
test_must_fail ok=sigpipe git fetch ../testrepo/.git $SHA1_1 &&
11671167
git --git-dir=../testrepo/.git config uploadpack.allowreachablesha1inwant true &&
11681168
git fetch ../testrepo/.git $SHA1_1 &&
11691169
git cat-file commit $SHA1_1 &&
11701170
test_must_fail git cat-file commit $SHA1_2 &&
11711171
git fetch ../testrepo/.git $SHA1_2 &&
11721172
git cat-file commit $SHA1_2 &&
1173-
test_must_fail git fetch ../testrepo/.git $SHA1_3
1173+
test_must_fail ok=sigpipe git fetch ../testrepo/.git $SHA1_3
11741174
)
11751175
'
11761176
done

t/test-lib-functions.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,9 @@ test_must_fail () {
612612
then
613613
echo >&2 "test_must_fail: command succeeded: $*"
614614
return 1
615+
elif test $exit_code -eq 141 && list_contains "$_test_ok" sigpipe
616+
then
617+
return 0
615618
elif test $exit_code -gt 129 && test $exit_code -le 192
616619
then
617620
echo >&2 "test_must_fail: died by signal: $*"

0 commit comments

Comments
 (0)