]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t5551: handle v2 protocol when checking curl trace
authorJeff King <peff@peff.net>
Thu, 23 Feb 2023 10:59:00 +0000 (05:59 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 23 Feb 2023 21:01:15 +0000 (13:01 -0800)
After cloning an http repository, we check the curl trace to make sure
the expected requests were made. But since the expected trace was never
updated to handle v2, it is only run when you ask the test suite to run
in v0 mode (which hardly anybody does).

Let's update it to handle both protocols. This isn't too hard since v2
just sends an extra header and an extra request. So we can just annotate
those extra lines and strip them out for v0 (and drop the annotations
for v2). I didn't bother handling v1 here, as it's not really of
practical interest (it would drop the extra v2 request, but still have
the "git-protocol" lines).

There's a similar tweak needed at the end. Since we check the
"accept-encoding" value loosely, we grep for it rather than finding it
in the verbatim trace. This grep insists that there are exactly 2
matches, but of course in v2 with the extra request there are 3. We
could tweak the number, but it's simpler still to just check that we saw
at least one match. The verbatim check already confirmed how many
instances of the header we have; we're really just checking here that
"gzip" is in the value (it's possible, of course, that the headers could
have different values, but that seems like an unlikely bug).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5551-http-fetch-smart.sh

index 4191174584a6f0d2a6a0699691812ffdec1a49bd..9d99cefb926847a790a57ea3f778b8b10e4ff73f 100755 (executable)
@@ -33,12 +33,13 @@ test_expect_success 'create http-accessible bare repository' '
 setup_askpass_helper
 
 test_expect_success 'clone http repository' '
-       cat >exp <<-EOF &&
+       cat >exp.raw <<-EOF &&
        > GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1
        > accept: */*
        > accept-encoding: ENCODINGS
        > accept-language: ko-KR, *;q=0.9
        > pragma: no-cache
+       {V2} > git-protocol: version=2
        < $HTTP_PROTO 200 OK
        < pragma: no-cache
        < cache-control: no-cache, max-age=0, must-revalidate
@@ -48,13 +49,32 @@ test_expect_success 'clone http repository' '
        > content-type: application/x-git-upload-pack-request
        > accept: application/x-git-upload-pack-result
        > accept-language: ko-KR, *;q=0.9
+       {V2} > git-protocol: version=2
        > content-length: xxx
        < HTTP/1.1 200 OK
        < pragma: no-cache
        < cache-control: no-cache, max-age=0, must-revalidate
        < content-type: application/x-git-upload-pack-result
+       {V2} > POST /smart/repo.git/git-upload-pack HTTP/1.1
+       {V2} > accept-encoding: ENCODINGS
+       {V2} > content-type: application/x-git-upload-pack-request
+       {V2} > accept: application/x-git-upload-pack-result
+       {V2} > accept-language: ko-KR, *;q=0.9
+       {V2} > git-protocol: version=2
+       {V2} > content-length: xxx
+       {V2} < HTTP/1.1 200 OK
+       {V2} < pragma: no-cache
+       {V2} < cache-control: no-cache, max-age=0, must-revalidate
+       {V2} < content-type: application/x-git-upload-pack-result
        EOF
 
+       if test "$GIT_TEST_PROTOCOL_VERSION" = 0
+       then
+               sed "/^{V2}/d" <exp.raw >exp
+       else
+               sed "s/^{V2} //" <exp.raw >exp
+       fi &&
+
        GIT_TRACE_CURL=true LANGUAGE="ko_KR.UTF-8" \
                git clone --quiet $HTTPD_URL/smart/repo.git clone 2>err &&
        test_cmp file clone/file &&
@@ -107,17 +127,11 @@ test_expect_success 'clone http repository' '
                /^< transfer-encoding: /d
        " >actual &&
 
-       # NEEDSWORK: If the overspecification of the expected result is reduced, we
-       # might be able to run this test in all protocol versions.
-       if test "$GIT_TEST_PROTOCOL_VERSION" = 0
-       then
-               sed -e "s/^> accept-encoding: .*/> accept-encoding: ENCODINGS/" \
-                               actual >actual.smudged &&
-               test_cmp exp actual.smudged &&
+       sed -e "s/^> accept-encoding: .*/> accept-encoding: ENCODINGS/" \
+                       actual >actual.smudged &&
+       test_cmp exp actual.smudged &&
 
-               grep "accept-encoding:.*gzip" actual >actual.gzip &&
-               test_line_count = 2 actual.gzip
-       fi
+       grep "accept-encoding:.*gzip" actual >actual.gzip
 '
 
 test_expect_success 'fetch changes via http' '