t / t5560-http-backend-noserver.shon commit t/helper: merge test-chmtime into test-tool (0e49649)
   1#!/bin/sh
   2
   3test_description='test git-http-backend-noserver'
   4. ./test-lib.sh
   5
   6HTTPD_DOCUMENT_ROOT_PATH="$TRASH_DIRECTORY"
   7
   8if test_have_prereq GREP_STRIPS_CR
   9then
  10        GREP_OPTIONS=-U
  11        export GREP_OPTIONS
  12fi
  13
  14run_backend() {
  15        echo "$2" |
  16        QUERY_STRING="${1#*[?]}" \
  17        PATH_TRANSLATED="$HTTPD_DOCUMENT_ROOT_PATH/${1%%[?]*}" \
  18        git http-backend >act.out 2>act.err
  19}
  20
  21GET() {
  22        REQUEST_METHOD="GET" && export REQUEST_METHOD &&
  23        run_backend "/repo.git/$1" &&
  24        sane_unset REQUEST_METHOD &&
  25        if ! grep "Status" act.out >act
  26        then
  27                printf "Status: 200 OK\r\n" >act
  28        fi
  29        printf "Status: $2\r\n" >exp &&
  30        test_cmp exp act
  31}
  32
  33POST() {
  34        REQUEST_METHOD="POST" && export REQUEST_METHOD &&
  35        CONTENT_TYPE="application/x-$1-request" && export CONTENT_TYPE &&
  36        run_backend "/repo.git/$1" "$2" &&
  37        sane_unset REQUEST_METHOD &&
  38        sane_unset CONTENT_TYPE &&
  39        if ! grep "Status" act.out >act
  40        then
  41                printf "Status: 200 OK\r\n" >act
  42        fi
  43        printf "Status: $3\r\n" >exp &&
  44        test_cmp exp act
  45}
  46
  47. "$TEST_DIRECTORY"/t556x_common
  48
  49expect_aliased() {
  50        REQUEST_METHOD="GET" && export REQUEST_METHOD &&
  51        if test $1 = 0; then
  52                run_backend "$2"
  53        else
  54                run_backend "$2" &&
  55                echo "fatal: '$2': aliased" >exp.err &&
  56                test_cmp exp.err act.err
  57        fi
  58        unset REQUEST_METHOD
  59}
  60
  61test_expect_success 'http-backend blocks bad PATH_INFO' '
  62        config http.getanyfile true &&
  63
  64        expect_aliased 0 /repo.git/HEAD &&
  65
  66        expect_aliased 1 /repo.git/../HEAD &&
  67        expect_aliased 1 /../etc/passwd &&
  68        expect_aliased 1 ../etc/passwd &&
  69        expect_aliased 1 /etc//passwd &&
  70        expect_aliased 1 /etc/./passwd &&
  71        expect_aliased 1 //domain/data.txt
  72'
  73
  74test_done