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

[PATCH 1/2] t5551: test http interaction with credential helpers

From
Jeff King <peff@peff.net>
Date
May 18, 2021, 06:27 UTC
Message-ID
<YKNeWOCaa31qRVqk@coredump.intra.peff.net>
In-Reply-To
<YKNeJ+NKUbD5ixA9@coredump.intra.peff.net>

We test authentication with http, and we independently test that credential helpers work, but we don't have any tests that cover the two features working together. Let's add two:

  1. Make sure that a successful request asks the helper to save the
     credential. This works as expected.
  2. Make sure that a failed request asks the helper to forget the
     credential. This is marked as expect_failure, as it was recently
     regressed by 1b0d9545bb (remote-curl: fall back to basic auth if
     Negotiate fails, 2021-03-22). The symptom here is that the second
     request should prompt the user, but doesn't.
Signed-off-by: Jeff King <peff@peff.net>
---
 t/t5551-http-fetch-smart.sh | 41 +++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh
index 984dba22af..1de87e4ffe 100755
--- a/t/t5551-http-fetch-smart.sh
+++ b/t/t5551-http-fetch-smart.sh
@@ -517,4 +517,45 @@ test_expect_success 'server-side error detected' '
 	test_i18ngrep "server-side error" actual
 '
 
+test_expect_success 'http auth remembers successful credentials' '
+	rm -f .git-credentials &&
+	test_config credential.helper store &&
+
+	# the first request prompts the user...
+	set_askpass user@host pass@host &&
+	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass both user@host &&
+
+	# ...and the second one uses the stored value rather than
+	# prompting the user.
+	set_askpass bogus-user bogus-pass &&
+	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass none
+'
+
+test_expect_failure 'http auth forgets bogus credentials' '
+	# seed credential store with bogus values. In real life,
+	# this would probably come from a password which worked
+	# for a previous request.
+	rm -f .git-credentials &&
+	test_config credential.helper store &&
+	{
+		echo "url=$HTTPD_URL" &&
+		echo "username=bogus" &&
+		echo "password=bogus"
+	} | git credential approve &&
+
+	# we expect this to use the bogus values and fail, never even
+	# prompting the user...
+	set_askpass user@host pass@host &&
+	test_must_fail git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass none &&
+
+	# ...but now we should have forgotten the bad value, causing
+	# us to prompt the user again.
+	set_askpass user@host pass@host &&
+	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass both user@host
+'
+
 test_done
-- 
2.32.0.rc0.421.g64c9147932
Previous: Jeff KingNext: Jeff King
Message 4 of 11 in “Git 2.23.0-rc0 HTTP authentication failure - error message change”
  1. Ben HumphreysMay 18, 2021
  2. Jeff KingMay 18, 2021
  3. 0/2 fix v2.32.0-rc0 bug with Negotiate / HTTP_NOAUTHJeff King, May 18, 2021
  4. 1/2 t5551: test http interaction with credential helpersJeff King, May 18, 2021
  5. 2/2 Revert "remote-curl: fall back to basic auth if Negotiate fails"Jeff King, May 18, 2021
  6. Derrick StoleeMay 19, 2021
  7. Jeff KingMay 19, 2021
  8. Derrick StoleeMay 19, 2021
  9. Junio C HamanoMay 19, 2021
  10. brian m. carlsonMay 19, 2021
  11. Jeff KingMay 19, 2021

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.