Code

Smart-http tests: Test http-backend without curl or a webserver
[git.git] / t / t5560-http-backend-noserver.sh
1 #!/bin/sh
3 test_description='test git-http-backend-noserver'
4 . ./test-lib.sh
6 HTTPD_DOCUMENT_ROOT_PATH="$TRASH_DIRECTORY"
8 run_backend() {
9         echo "$2" |
10         QUERY_STRING="${1#*\?}" \
11         GIT_PROJECT_ROOT="$HTTPD_DOCUMENT_ROOT_PATH" \
12         PATH_INFO="${1%%\?*}" \
13         git http-backend >act.out 2>act.err
14 }
16 GET() {
17         REQUEST_METHOD="GET" \
18         run_backend "/repo.git/$1" &&
19         if ! grep "Status" act.out >act
20         then
21                 printf "Status: 200 OK\r\n" >act
22         fi
23         printf "Status: $2\r\n" >exp &&
24         test_cmp exp act
25 }
27 POST() {
28         REQUEST_METHOD="POST" \
29         CONTENT_TYPE="application/x-$1-request" \
30         run_backend "/repo.git/$1" "$2" &&
31         if ! grep "Status" act.out >act
32         then
33                 printf "Status: 200 OK\r\n" >act
34         fi
35         printf "Status: $3\r\n" >exp &&
36         test_cmp exp act
37 }
39 log_div() {
40         return 0
41 }
43 . "$TEST_DIRECTORY"/t556x_common
45 expect_aliased() {
46         if test $1 = 0; then
47                 REQUEST_METHOD=GET run_backend "$2"
48         else
49                 REQUEST_METHOD=GET run_backend "$2" &&
50                 echo "fatal: '$2': aliased" >exp.err &&
51                 test_cmp exp.err act.err
52         fi
53 }
55 test_expect_success 'http-backend blocks bad PATH_INFO' '
56         config http.getanyfile true &&
58         expect_aliased 0 /repo.git/HEAD &&
60         expect_aliased 1 /repo.git/../HEAD &&
61         expect_aliased 1 /../etc/passwd &&
62         expect_aliased 1 ../etc/passwd &&
63         expect_aliased 1 /etc//passwd &&
64         expect_aliased 1 /etc/./passwd &&
65         expect_aliased 1 //domain/data.txt
66 '
68 test_done