git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 05/16] t5551: lower-case headers in expected curl trace

From
Jeff King <peff@peff.net>
Date
Feb 23, 2023, 10:54 UTC
Message-ID
<Y/dFyjOAliTgOHYV@coredump.intra.peff.net>
In-Reply-To
<Y/dEYYWKy/o96vBG@coredump.intra.peff.net>

There's a test in t5551 which checks the curl trace (after simplifying it a bit). It doesn't work with HTTP/2, because in that case curl outputs all of the headers in lower-case. Even though this test is run with HTTP/2 by t5559, nobody has noticed because checking the trace only happens if GIT_TEST_PROTOCOL_VERSION is manually set to "0".

Let's fix this by lower-casing all of the header names in the trace, and then checking for those in our expected code (this is easier than making HTTP/2 traces look like HTTP/1.1, since HTTP/1.1 uses title-casing).

Sadly, we can't quite do this in our existing sed script. This works if you have GNU sed:

  s/^\\([><]\\) \\([A-Za-z0-9-]*:\\)/\1 \L\2\E/

but \L is a GNU-ism, and I don't think there's a portable solution. We could just "tr A-Z a-z" on the way in, of course, but that makes the non-header parts harder to read (e.g., lowercase "post" requests). But to paraphrase Baron Munchausen, I have learned from experience that a modicum of Perl can be most efficacious.

Note that this doesn't quite get the test passing with t5559; there are more fixes needed on top.

Signed-off-by: Jeff King <peff@peff.net>
---
 t/t5551-http-fetch-smart.sh | 55 ++++++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 25 deletions(-)
diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh
index 29d489768e..a81f852cbf 100755
--- a/t/t5551-http-fetch-smart.sh
+++ b/t/t5551-http-fetch-smart.sh
@@ -35,30 +35,35 @@ setup_askpass_helper
 test_expect_success 'clone http repository' '
 	cat >exp <<-\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
+	> accept: */*
+	> accept-encoding: ENCODINGS
+	> accept-language: ko-KR, *;q=0.9
+	> pragma: no-cache
 	< HTTP/1.1 200 OK
-	< Pragma: no-cache
-	< Cache-Control: no-cache, max-age=0, must-revalidate
-	< Content-Type: application/x-git-upload-pack-advertisement
+	< pragma: no-cache
+	< cache-control: no-cache, max-age=0, must-revalidate
+	< content-type: application/x-git-upload-pack-advertisement
 	> POST /smart/repo.git/git-upload-pack HTTP/1.1
-	> Accept-Encoding: ENCODINGS
-	> Content-Type: application/x-git-upload-pack-request
-	> Accept: application/x-git-upload-pack-result
-	> Accept-Language: ko-KR, *;q=0.9
-	> Content-Length: xxx
+	> accept-encoding: ENCODINGS
+	> content-type: application/x-git-upload-pack-request
+	> accept: application/x-git-upload-pack-result
+	> accept-language: ko-KR, *;q=0.9
+	> 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
+	< pragma: no-cache
+	< cache-control: no-cache, max-age=0, must-revalidate
+	< content-type: application/x-git-upload-pack-result
 	EOF
 
 	GIT_TRACE_CURL=true GIT_TEST_PROTOCOL_VERSION=0 LANGUAGE="ko_KR.UTF-8" \
 		git clone --quiet $HTTPD_URL/smart/repo.git clone 2>err &&
 	test_cmp file clone/file &&
 	tr '\''\015'\'' Q <err |
+	perl -pe '\''
+		s/(Send|Recv) header: ([A-Za-z0-9-]+):/
+		"$1 header: " . lc($2) . ":"
+		/e;
+	'\'' |
 	sed -e "
 		s/Q\$//
 		/^[*] /d
@@ -78,31 +83,31 @@ test_expect_success 'clone http repository' '
 			s/^/> /
 		}
 
-		/^> User-Agent: /d
-		/^> Host: /d
+		/^> user-agent: /d
+		/^> host: /d
 		/^> POST /,$ {
 			/^> Accept: [*]\\/[*]/d
 		}
-		s/^> Content-Length: .*/> Content-Length: xxx/
+		s/^> content-length: .*/> content-length: xxx/
 		/^> 00..want /d
 		/^> 00.*done/d
 
-		/^< Server: /d
-		/^< Expires: /d
-		/^< Date: /d
-		/^< Content-Length: /d
-		/^< Transfer-Encoding: /d
+		/^< server: /d
+		/^< expires: /d
+		/^< date: /d
+		/^< content-length: /d
+		/^< 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/" \
+		sed -e "s/^> accept-encoding: .*/> accept-encoding: ENCODINGS/" \
 				actual >actual.smudged &&
 		test_cmp exp actual.smudged &&
 
-		grep "Accept-Encoding:.*gzip" actual >actual.gzip &&
+		grep "accept-encoding:.*gzip" actual >actual.gzip &&
 		test_line_count = 2 actual.gzip
 	fi
 '
-- 
2.39.2.981.g6157336f25
Previous: Junio C HamanoNext: Jeff King
Message 9 of 24 in “http test bug potpourri”
  1. 0/16 http test bug potpourriJeff King, Feb 23, 2023
  2. 01/16 t5541: run "used receive-pack service" test earlierJeff King, Feb 23, 2023
  3. 02/16 t5541: stop marking "used receive-pack service" test as v0 onlyJeff King, Feb 23, 2023
  4. 03/16 t5541: simplify and move "no empty path components" testJeff King, Feb 23, 2023
  5. Junio C HamanoFeb 23, 2023
  6. Jeff KingFeb 24, 2023
  7. 04/16 t5551: drop redundant grep for Accept-LanguageJeff King, Feb 23, 2023
  8. Junio C HamanoFeb 23, 2023
  9. 05/16 t5551: lower-case headers in expected curl traceJeff King, Feb 23, 2023
  10. 06/16 t5551: handle HTTP/2 when checking curl traceJeff King, Feb 23, 2023
  11. 07/16 t5551: stop forcing clone to run with v0 protocolJeff King, Feb 23, 2023
  12. 08/16 t5551: handle v2 protocol when checking curl traceJeff King, Feb 23, 2023
  13. 09/16 t5551: handle v2 protocol in upload-pack service testJeff King, Feb 23, 2023
  14. 10/16 t5551: simplify expected cookie fileJeff King, Feb 23, 2023
  15. 11/16 t5551: handle v2 protocol in cookie testJeff King, Feb 23, 2023
  16. 12/16 t5551: drop curl trace lines without headersJeff King, Feb 23, 2023
  17. 13/16 t/lib-httpd: respect $HTTPD_PROTO in expect_askpass()Jeff King, Feb 23, 2023
  18. 14/16 t/lib-httpd: enable HTTP/2 "h2" protocol, not just h2cJeff King, Feb 23, 2023
  19. Junio C HamanoFeb 23, 2023
  20. 15/16 t5559: fix test failures with LIB_HTTPD_SSLJeff King, Feb 23, 2023
  21. 16/16 t5559: make SSL/TLS the defaultJeff King, Feb 23, 2023
  22. Junio C HamanoFeb 23, 2023
  23. Jeff KingFeb 24, 2023
  24. Junio C HamanoFeb 24, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.