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