commit: document a couple of options
[gitweb.git] / t / t5540-http-push.sh
index d1234f9feff52c6788555e9086ec293d8a655b1e..1eea64765608dc4a2e4b19eec4155890306e5d59 100755 (executable)
@@ -3,7 +3,7 @@
 # Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>
 #
 
-test_description='test http-push
+test_description='test WebDAV http-push
 
 This test runs various sanity checks on http-push.'
 
@@ -11,7 +11,7 @@ This test runs various sanity checks on http-push.'
 
 if git http-push > /dev/null 2>&1 || [ $? -eq 128 ]
 then
-       say "skipping test, USE_CURL_MULTI is not defined"
+       skip_all="skipping test, USE_CURL_MULTI is not defined"
        test_done
 fi
 
@@ -40,9 +40,25 @@ test_expect_success 'setup remote repository' '
        mv test_repo.git "$HTTPD_DOCUMENT_ROOT_PATH"
 '
 
+test_expect_success 'create password-protected repository' '
+       mkdir -p "$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb" &&
+       cp -Rf "$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
+              "$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb/test_repo.git"
+'
+
+test_expect_success 'setup askpass helper' '
+       cat >askpass <<-\EOF &&
+       #!/bin/sh
+       echo user@host
+       EOF
+       chmod +x askpass &&
+       GIT_ASKPASS="$PWD/askpass" &&
+       export GIT_ASKPASS
+'
+
 test_expect_success 'clone remote repository' '
        cd "$ROOT_PATH" &&
-       git clone $HTTPD_URL/test_repo.git test_repo_clone
+       git clone $HTTPD_URL/dumb/test_repo.git test_repo_clone
 '
 
 test_expect_success 'push to remote repository with packed refs' '
@@ -75,7 +91,7 @@ test_expect_success 'http-push fetches unpacked objects' '
        cp -R "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \
                "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_unpacked.git &&
 
-       git clone $HTTPD_URL/test_repo_unpacked.git \
+       git clone $HTTPD_URL/dumb/test_repo_unpacked.git \
                "$ROOT_PATH"/fetch_unpacked &&
 
        # By reset, we force git to retrieve the object
@@ -84,14 +100,14 @@ test_expect_success 'http-push fetches unpacked objects' '
         git remote rm origin &&
         git reflog expire --expire=0 --all &&
         git prune &&
-        git push -f -v $HTTPD_URL/test_repo_unpacked.git master)
+        git push -f -v $HTTPD_URL/dumb/test_repo_unpacked.git master)
 '
 
 test_expect_success 'http-push fetches packed objects' '
        cp -R "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \
                "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_packed.git &&
 
-       git clone $HTTPD_URL/test_repo_packed.git \
+       git clone $HTTPD_URL/dumb/test_repo_packed.git \
                "$ROOT_PATH"/test_repo_clone_packed &&
 
        (cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_packed.git &&
@@ -104,7 +120,7 @@ test_expect_success 'http-push fetches packed objects' '
         git remote rm origin &&
         git reflog expire --expire=0 --all &&
         git prune &&
-        git push -f -v $HTTPD_URL/test_repo_packed.git master)
+        git push -f -v $HTTPD_URL/dumb/test_repo_packed.git master)
 '
 
 test_expect_success 'create and delete remote branch' '
@@ -132,9 +148,34 @@ x38="$x5$x5$x5$x5$x5$x5$x5$x1$x1$x1"
 x40="$x38$x2"
 
 test_expect_success 'PUT and MOVE sends object to URLs with SHA-1 hash suffix' '
-       sed -e "s/PUT /OP /" -e "s/MOVE /OP /" "$HTTPD_ROOT_PATH"/access.log |
-       grep -e "\"OP .*/objects/$x2/${x38}_$x40 HTTP/[.0-9]*\" 20[0-9] "
+       sed \
+               -e "s/PUT /OP /" \
+               -e "s/MOVE /OP /" \
+           -e "s|/objects/$x2/${x38}_$x40|WANTED_PATH_REQUEST|" \
+               "$HTTPD_ROOT_PATH"/access.log |
+       grep -e "\"OP .*WANTED_PATH_REQUEST HTTP/[.0-9]*\" 20[0-9] "
+
+'
+
+test_http_push_nonff "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \
+       "$ROOT_PATH"/test_repo_clone master
+
+test_expect_success 'push to password-protected repository (user in URL)' '
+       test_commit pw-user &&
+       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" \
+               rev-parse --verify HEAD >actual &&
+       test_cmp expect actual
+'
 
+test_expect_failure 'push to password-protected repository (no user in URL)' '
+       test_commit pw-nouser &&
+       git push "$HTTPD_URL/auth/dumb/test_repo.git" HEAD &&
+       git rev-parse --verify HEAD >expect &&
+       git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb/test_repo.git" \
+               rev-parse --verify HEAD >actual &&
+       test_cmp expect actual
 '
 
 stop_httpd