Jeff King <p...@peff.net> writes:

> ... But the test suite, of course, always uses askpass because it
> cannot rely on accessing a terminal (we'd have to do some magic with
> lib-terminal, I think).
>
> So it doesn't detect the problem in your patch, but I wonder if it is
> worth applying the patch below anyway, as it makes the test suite
> slightly more robust.

Sounds like a good first step in the right direction.  Thanks.


> -- >8 --
> Subject: use distinct username/password for http auth tests
>
> The httpd server we set up to test git's http client code
> knows about a single account, in which both the username and
> password are "user@host" (the unusual use of the "@" here is
> to verify that we handle the character correctly when URL
> escaped).
>
> This means that we may miss a certain class of errors in
> which the username and password are mixed up internally by
> git. We can make our tests more robust by having distinct
> values for the username and password.
>
> In addition to tweaking the server passwd file and the
> client URL, we must teach the "askpass" harness to accept
> multiple values. As a bonus, this makes the setup of some
> tests more obvious; when we are expecting git to ask
> only about the password, we can seed the username askpass
> response with a bogus value.
>
> Signed-off-by: Jeff King <p...@peff.net>
> ---
>  t/lib-httpd.sh        | 15 ++++++++++++---
>  t/lib-httpd/passwd    |  2 +-
>  t/t5540-http-push.sh  |  4 ++--
>  t/t5541-http-push.sh  |  6 +++---
>  t/t5550-http-fetch.sh | 10 +++++-----
>  t/t5551-http-fetch.sh |  6 +++---
>  6 files changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/t/lib-httpd.sh b/t/lib-httpd.sh
> index c470784..bfdff2a 100644
> --- a/t/lib-httpd.sh
> +++ b/t/lib-httpd.sh
> @@ -129,7 +129,7 @@ prepare_httpd() {
>       HTTPD_DEST=127.0.0.1:$LIB_HTTPD_PORT
>       HTTPD_URL=$HTTPD_PROTO://$HTTPD_DEST
>       HTTPD_URL_USER=$HTTPD_PROTO://user%40host@$HTTPD_DEST
> -     HTTPD_URL_USER_PASS=$HTTPD_PROTO://user%40host:user%40host@$HTTPD_DEST
> +     HTTPD_URL_USER_PASS=$HTTPD_PROTO://user%40host:pass%40host@$HTTPD_DEST
>  
>       if test -n "$LIB_HTTPD_DAV" -o -n "$LIB_HTTPD_SVN"
>       then
> @@ -217,7 +217,15 @@ setup_askpass_helper() {
>       test_expect_success 'setup askpass helper' '
>               write_script "$TRASH_DIRECTORY/askpass" <<-\EOF &&
>               echo >>"$TRASH_DIRECTORY/askpass-query" "askpass: $*" &&
> -             cat "$TRASH_DIRECTORY/askpass-response"
> +             case "$*" in
> +             *Username*)
> +                     what=user
> +                     ;;
> +             *Password*)
> +                     what=pass
> +                     ;;
> +             esac &&
> +             cat "$TRASH_DIRECTORY/askpass-$what"
>               EOF
>               GIT_ASKPASS="$TRASH_DIRECTORY/askpass" &&
>               export GIT_ASKPASS &&
> @@ -227,7 +235,8 @@ setup_askpass_helper() {
>  
>  set_askpass() {
>       >"$TRASH_DIRECTORY/askpass-query" &&
> -     echo "$*" >"$TRASH_DIRECTORY/askpass-response"
> +     echo "$1" >"$TRASH_DIRECTORY/askpass-user" &&
> +     echo "$2" >"$TRASH_DIRECTORY/askpass-pass"
>  }
>  
>  expect_askpass() {
> diff --git a/t/lib-httpd/passwd b/t/lib-httpd/passwd
> index f2fbcad..99a34d6 100644
> --- a/t/lib-httpd/passwd
> +++ b/t/lib-httpd/passwd
> @@ -1 +1 @@
> -user@host:nKpa8pZUHx/ic
> +user@host:xb4E8pqD81KQs
> diff --git a/t/t5540-http-push.sh b/t/t5540-http-push.sh
> index 01d0d95..5b0198c 100755
> --- a/t/t5540-http-push.sh
> +++ b/t/t5540-http-push.sh
> @@ -154,7 +154,7 @@ test_http_push_nonff 
> "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \
>  
>  test_expect_success 'push to password-protected repository (user in URL)' '
>       test_commit pw-user &&
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git push "$HTTPD_URL_USER/auth/dumb/test_repo.git" HEAD &&
>       git rev-parse --verify HEAD >expect &&
>       git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb/test_repo.git" \
> @@ -168,7 +168,7 @@ test_expect_failure 'user was prompted only once for 
> password' '
>  
>  test_expect_failure 'push to password-protected repository (no user in URL)' 
> '
>       test_commit pw-nouser &&
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git push "$HTTPD_URL/auth/dumb/test_repo.git" HEAD &&
>       expect_askpass both user@host
>       git rev-parse --verify HEAD >expect &&
> diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh
> index 470ac54..bfd241e 100755
> --- a/t/t5541-http-push.sh
> +++ b/t/t5541-http-push.sh
> @@ -274,7 +274,7 @@ test_expect_success 'push over smart http with auth' '
>       cd "$ROOT_PATH/test_repo_clone" &&
>       echo push-auth-test >expect &&
>       test_commit push-auth-test &&
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git push "$HTTPD_URL"/auth/smart/test_repo.git &&
>       git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
>               log -1 --format=%s >actual &&
> @@ -286,7 +286,7 @@ test_expect_success 'push to auth-only-for-push repo' '
>       cd "$ROOT_PATH/test_repo_clone" &&
>       echo push-half-auth >expect &&
>       test_commit push-half-auth &&
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git push "$HTTPD_URL"/auth-push/smart/test_repo.git &&
>       git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
>               log -1 --format=%s >actual &&
> @@ -316,7 +316,7 @@ test_expect_success 'push into half-auth-complete 
> requires password' '
>       cd "$ROOT_PATH/half-auth-clone" &&
>       echo two >expect &&
>       test_commit two &&
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git push "$HTTPD_URL/half-auth-complete/smart/half-auth.git" &&
>       git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/half-auth.git" \
>               log -1 --format=%s >actual &&
> diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh
> index f7d0f14..8392624 100755
> --- a/t/t5550-http-fetch.sh
> +++ b/t/t5550-http-fetch.sh
> @@ -62,13 +62,13 @@ test_expect_success 'http auth can use user/pass in URL' '
>  '
>  
>  test_expect_success 'http auth can use just user in URL' '
> -     set_askpass user@host &&
> +     set_askpass wrong pass@host &&
>       git clone "$HTTPD_URL_USER/auth/dumb/repo.git" clone-auth-pass &&
>       expect_askpass pass user@host
>  '
>  
>  test_expect_success 'http auth can request both user and pass' '
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git clone "$HTTPD_URL/auth/dumb/repo.git" clone-auth-both &&
>       expect_askpass both user@host
>  '
> @@ -77,7 +77,7 @@ test_expect_success 'http auth respects credential helper 
> config' '
>       test_config_global credential.helper "!f() {
>               cat >/dev/null
>               echo username=user@host
> -             echo password=user@host
> +             echo password=pass@host
>       }; f" &&
>       set_askpass wrong &&
>       git clone "$HTTPD_URL/auth/dumb/repo.git" clone-auth-helper &&
> @@ -86,14 +86,14 @@ test_expect_success 'http auth respects credential helper 
> config' '
>  
>  test_expect_success 'http auth can get username from config' '
>       test_config_global "credential.$HTTPD_URL.username" user@host &&
> -     set_askpass user@host &&
> +     set_askpass wrong pass@host &&
>       git clone "$HTTPD_URL/auth/dumb/repo.git" clone-auth-user &&
>       expect_askpass pass user@host
>  '
>  
>  test_expect_success 'configured username does not override URL' '
>       test_config_global "credential.$HTTPD_URL.username" wrong &&
> -     set_askpass user@host &&
> +     set_askpass wrong pass@host &&
>       git clone "$HTTPD_URL_USER/auth/dumb/repo.git" clone-auth-user2 &&
>       expect_askpass pass user@host
>  '
> diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh
> index afb439e..a124efe 100755
> --- a/t/t5551-http-fetch.sh
> +++ b/t/t5551-http-fetch.sh
> @@ -119,7 +119,7 @@ test_expect_success 'redirects re-root further requests' '
>  
>  test_expect_success 'clone from password-protected repository' '
>       echo two >expect &&
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git clone --bare "$HTTPD_URL/auth/smart/repo.git" smart-auth &&
>       expect_askpass both user@host &&
>       git --git-dir=smart-auth log -1 --format=%s >actual &&
> @@ -137,7 +137,7 @@ test_expect_success 'clone from auth-only-for-push 
> repository' '
>  
>  test_expect_success 'clone from auth-only-for-objects repository' '
>       echo two >expect &&
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git clone --bare "$HTTPD_URL/auth-fetch/smart/repo.git" half-auth &&
>       expect_askpass both user@host &&
>       git --git-dir=half-auth log -1 --format=%s >actual &&
> @@ -151,7 +151,7 @@ test_expect_success 'no-op half-auth fetch does not 
> require a password' '
>  '
>  
>  test_expect_success 'redirects send auth to new location' '
> -     set_askpass user@host &&
> +     set_askpass user@host pass@host &&
>       git -c credential.useHttpPath=true \
>         clone $HTTPD_URL/smart-redir-auth/repo.git repo-redir-auth &&
>       expect_askpass both user@host auth/smart/repo.git
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to