Skip to content

Commit 7f005b0

Browse files
szedergitster
authored andcommitted
t5703: run all non-httpd-specific tests before sourcing 'lib-httpd.sh'
't5703-upload-pack-ref-in-want.sh' sources 'lib-httpd.sh' near the end to run a couple of httpd-specific tests, but 'lib-httpd.sh' skips all the rest of the test script if the dependencies for running httpd tests are not fulfilled. However, the last six tests in 't5703' are not httpd-specific, but they are skipped as well when httpd tests can't be run. Move these six tests earlier in the test script, before 'lib-httpd.sh' is sourced, so they will be run even when httpd tests aren't. Note that this is not merely a pure code movement, because the setup test case for the httpd tests needed an additional 'rm -rf "$LOCAL_PRISTINE"' to clean up a directory left behind by the moved non-httpd-specific tests. Also add a comment at the end of this test script to warn against adding non-httpd-specific tests at the end, in the hope that it will help prevent similar issues in the future. Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 12b1826 commit 7f005b0

File tree

1 file changed

+104
-100
lines changed

1 file changed

+104
-100
lines changed

t/t5703-upload-pack-ref-in-want.sh

Lines changed: 104 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -157,106 +157,6 @@ test_expect_success 'want-ref with ref we already have commit for' '
157157
check_output
158158
'
159159

160-
. "$TEST_DIRECTORY"/lib-httpd.sh
161-
start_httpd
162-
163-
REPO="$HTTPD_DOCUMENT_ROOT_PATH/repo"
164-
LOCAL_PRISTINE="$(pwd)/local_pristine"
165-
166-
test_expect_success 'setup repos for change-while-negotiating test' '
167-
(
168-
git init "$REPO" &&
169-
cd "$REPO" &&
170-
>.git/git-daemon-export-ok &&
171-
test_commit m1 &&
172-
git tag -d m1 &&
173-
174-
# Local repo with many commits (so that negotiation will take
175-
# more than 1 request/response pair)
176-
git clone "http://127.0.0.1:$LIB_HTTPD_PORT/smart/repo" "$LOCAL_PRISTINE" &&
177-
cd "$LOCAL_PRISTINE" &&
178-
git checkout -b side &&
179-
test_commit_bulk --id=s 33 &&
180-
181-
# Add novel commits to upstream
182-
git checkout master &&
183-
cd "$REPO" &&
184-
test_commit m2 &&
185-
test_commit m3 &&
186-
git tag -d m2 m3
187-
) &&
188-
git -C "$LOCAL_PRISTINE" remote set-url origin "http://127.0.0.1:$LIB_HTTPD_PORT/one_time_sed/repo" &&
189-
git -C "$LOCAL_PRISTINE" config protocol.version 2
190-
'
191-
192-
inconsistency () {
193-
# Simulate that the server initially reports $2 as the ref
194-
# corresponding to $1, and after that, $1 as the ref corresponding to
195-
# $1. This corresponds to the real-life situation where the server's
196-
# repository appears to change during negotiation, for example, when
197-
# different servers in a load-balancing arrangement serve (stateless)
198-
# RPCs during a single negotiation.
199-
printf "s/%s/%s/" \
200-
$(git -C "$REPO" rev-parse $1 | tr -d "\n") \
201-
$(git -C "$REPO" rev-parse $2 | tr -d "\n") \
202-
>"$HTTPD_ROOT_PATH/one-time-sed"
203-
}
204-
205-
test_expect_success 'server is initially ahead - no ref in want' '
206-
git -C "$REPO" config uploadpack.allowRefInWant false &&
207-
rm -rf local &&
208-
cp -r "$LOCAL_PRISTINE" local &&
209-
inconsistency master 1234567890123456789012345678901234567890 &&
210-
test_must_fail git -C local fetch 2>err &&
211-
test_i18ngrep "fatal: remote error: upload-pack: not our ref" err
212-
'
213-
214-
test_expect_success 'server is initially ahead - ref in want' '
215-
git -C "$REPO" config uploadpack.allowRefInWant true &&
216-
rm -rf local &&
217-
cp -r "$LOCAL_PRISTINE" local &&
218-
inconsistency master 1234567890123456789012345678901234567890 &&
219-
git -C local fetch &&
220-
221-
git -C "$REPO" rev-parse --verify master >expected &&
222-
git -C local rev-parse --verify refs/remotes/origin/master >actual &&
223-
test_cmp expected actual
224-
'
225-
226-
test_expect_success 'server is initially behind - no ref in want' '
227-
git -C "$REPO" config uploadpack.allowRefInWant false &&
228-
rm -rf local &&
229-
cp -r "$LOCAL_PRISTINE" local &&
230-
inconsistency master "master^" &&
231-
git -C local fetch &&
232-
233-
git -C "$REPO" rev-parse --verify "master^" >expected &&
234-
git -C local rev-parse --verify refs/remotes/origin/master >actual &&
235-
test_cmp expected actual
236-
'
237-
238-
test_expect_success 'server is initially behind - ref in want' '
239-
git -C "$REPO" config uploadpack.allowRefInWant true &&
240-
rm -rf local &&
241-
cp -r "$LOCAL_PRISTINE" local &&
242-
inconsistency master "master^" &&
243-
git -C local fetch &&
244-
245-
git -C "$REPO" rev-parse --verify "master" >expected &&
246-
git -C local rev-parse --verify refs/remotes/origin/master >actual &&
247-
test_cmp expected actual
248-
'
249-
250-
test_expect_success 'server loses a ref - ref in want' '
251-
git -C "$REPO" config uploadpack.allowRefInWant true &&
252-
rm -rf local &&
253-
cp -r "$LOCAL_PRISTINE" local &&
254-
echo "s/master/raster/" >"$HTTPD_ROOT_PATH/one-time-sed" &&
255-
test_must_fail git -C local fetch 2>err &&
256-
257-
test_i18ngrep "fatal: remote error: unknown ref refs/heads/raster" err
258-
'
259-
260160
REPO="$(pwd)/repo"
261161
LOCAL_PRISTINE="$(pwd)/local_pristine"
262162

@@ -372,4 +272,108 @@ test_expect_success 'fetching with wildcard that matches multiple refs' '
372272
grep "want-ref refs/heads/o/bar" log
373273
'
374274

275+
. "$TEST_DIRECTORY"/lib-httpd.sh
276+
start_httpd
277+
278+
REPO="$HTTPD_DOCUMENT_ROOT_PATH/repo"
279+
LOCAL_PRISTINE="$(pwd)/local_pristine"
280+
281+
test_expect_success 'setup repos for change-while-negotiating test' '
282+
(
283+
git init "$REPO" &&
284+
cd "$REPO" &&
285+
>.git/git-daemon-export-ok &&
286+
test_commit m1 &&
287+
git tag -d m1 &&
288+
289+
# Local repo with many commits (so that negotiation will take
290+
# more than 1 request/response pair)
291+
rm -rf "$LOCAL_PRISTINE" &&
292+
git clone "http://127.0.0.1:$LIB_HTTPD_PORT/smart/repo" "$LOCAL_PRISTINE" &&
293+
cd "$LOCAL_PRISTINE" &&
294+
git checkout -b side &&
295+
test_commit_bulk --id=s 33 &&
296+
297+
# Add novel commits to upstream
298+
git checkout master &&
299+
cd "$REPO" &&
300+
test_commit m2 &&
301+
test_commit m3 &&
302+
git tag -d m2 m3
303+
) &&
304+
git -C "$LOCAL_PRISTINE" remote set-url origin "http://127.0.0.1:$LIB_HTTPD_PORT/one_time_sed/repo" &&
305+
git -C "$LOCAL_PRISTINE" config protocol.version 2
306+
'
307+
308+
inconsistency () {
309+
# Simulate that the server initially reports $2 as the ref
310+
# corresponding to $1, and after that, $1 as the ref corresponding to
311+
# $1. This corresponds to the real-life situation where the server's
312+
# repository appears to change during negotiation, for example, when
313+
# different servers in a load-balancing arrangement serve (stateless)
314+
# RPCs during a single negotiation.
315+
printf "s/%s/%s/" \
316+
$(git -C "$REPO" rev-parse $1 | tr -d "\n") \
317+
$(git -C "$REPO" rev-parse $2 | tr -d "\n") \
318+
>"$HTTPD_ROOT_PATH/one-time-sed"
319+
}
320+
321+
test_expect_success 'server is initially ahead - no ref in want' '
322+
git -C "$REPO" config uploadpack.allowRefInWant false &&
323+
rm -rf local &&
324+
cp -r "$LOCAL_PRISTINE" local &&
325+
inconsistency master 1234567890123456789012345678901234567890 &&
326+
test_must_fail git -C local fetch 2>err &&
327+
test_i18ngrep "fatal: remote error: upload-pack: not our ref" err
328+
'
329+
330+
test_expect_success 'server is initially ahead - ref in want' '
331+
git -C "$REPO" config uploadpack.allowRefInWant true &&
332+
rm -rf local &&
333+
cp -r "$LOCAL_PRISTINE" local &&
334+
inconsistency master 1234567890123456789012345678901234567890 &&
335+
git -C local fetch &&
336+
337+
git -C "$REPO" rev-parse --verify master >expected &&
338+
git -C local rev-parse --verify refs/remotes/origin/master >actual &&
339+
test_cmp expected actual
340+
'
341+
342+
test_expect_success 'server is initially behind - no ref in want' '
343+
git -C "$REPO" config uploadpack.allowRefInWant false &&
344+
rm -rf local &&
345+
cp -r "$LOCAL_PRISTINE" local &&
346+
inconsistency master "master^" &&
347+
git -C local fetch &&
348+
349+
git -C "$REPO" rev-parse --verify "master^" >expected &&
350+
git -C local rev-parse --verify refs/remotes/origin/master >actual &&
351+
test_cmp expected actual
352+
'
353+
354+
test_expect_success 'server is initially behind - ref in want' '
355+
git -C "$REPO" config uploadpack.allowRefInWant true &&
356+
rm -rf local &&
357+
cp -r "$LOCAL_PRISTINE" local &&
358+
inconsistency master "master^" &&
359+
git -C local fetch &&
360+
361+
git -C "$REPO" rev-parse --verify "master" >expected &&
362+
git -C local rev-parse --verify refs/remotes/origin/master >actual &&
363+
test_cmp expected actual
364+
'
365+
366+
test_expect_success 'server loses a ref - ref in want' '
367+
git -C "$REPO" config uploadpack.allowRefInWant true &&
368+
rm -rf local &&
369+
cp -r "$LOCAL_PRISTINE" local &&
370+
echo "s/master/raster/" >"$HTTPD_ROOT_PATH/one-time-sed" &&
371+
test_must_fail git -C local fetch 2>err &&
372+
373+
test_i18ngrep "fatal: remote error: unknown ref refs/heads/raster" err
374+
'
375+
376+
# DO NOT add non-httpd-specific tests here, because the last part of this
377+
# test script is only executed when httpd is available and enabled.
378+
375379
test_done

0 commit comments

Comments
 (0)