Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at> |
| 4 | # |
| 5 | |
| 6 | if test -z "$GIT_TEST_HTTPD" |
| 7 | then |
Ævar Arnfjörð Bjarmason | fadb515 | 2010-06-24 17:44:48 +0000 | [diff] [blame] | 8 | skip_all="Network testing disabled (define GIT_TEST_HTTPD to enable)" |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 9 | test_done |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 10 | fi |
| 11 | |
Jay Soffian | 69707d6 | 2009-02-25 03:28:15 -0500 | [diff] [blame] | 12 | HTTPD_PARA="" |
| 13 | |
Tarmigan Casebolt | 0d34473 | 2010-01-02 14:04:25 -0800 | [diff] [blame] | 14 | for DEFAULT_HTTPD_PATH in '/usr/sbin/httpd' '/usr/sbin/apache2' |
| 15 | do |
| 16 | if test -x "$DEFAULT_HTTPD_PATH" |
| 17 | then |
| 18 | break |
| 19 | fi |
| 20 | done |
| 21 | |
| 22 | for DEFAULT_HTTPD_MODULE_PATH in '/usr/libexec/apache2' \ |
| 23 | '/usr/lib/apache2/modules' \ |
| 24 | '/usr/lib64/httpd/modules' \ |
| 25 | '/usr/lib/httpd/modules' |
| 26 | do |
| 27 | if test -d "$DEFAULT_HTTPD_MODULE_PATH" |
| 28 | then |
| 29 | break |
| 30 | fi |
| 31 | done |
| 32 | |
Jay Soffian | 69707d6 | 2009-02-25 03:28:15 -0500 | [diff] [blame] | 33 | case $(uname) in |
| 34 | Darwin) |
Jay Soffian | 69707d6 | 2009-02-25 03:28:15 -0500 | [diff] [blame] | 35 | HTTPD_PARA="$HTTPD_PARA -DDarwin" |
| 36 | ;; |
Jay Soffian | 69707d6 | 2009-02-25 03:28:15 -0500 | [diff] [blame] | 37 | esac |
| 38 | |
| 39 | LIB_HTTPD_PATH=${LIB_HTTPD_PATH-"$DEFAULT_HTTPD_PATH"} |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 40 | LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'8111'} |
| 41 | |
Junio C Hamano | bfdbee9 | 2008-08-08 02:26:28 -0700 | [diff] [blame] | 42 | TEST_PATH="$TEST_DIRECTORY"/lib-httpd |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 43 | HTTPD_ROOT_PATH="$PWD"/httpd |
| 44 | HTTPD_DOCUMENT_ROOT_PATH=$HTTPD_ROOT_PATH/www |
| 45 | |
Jeff King | f628825 | 2012-07-24 09:43:59 -0400 | [diff] [blame] | 46 | # hack to suppress apache PassEnv warnings |
| 47 | GIT_VALGRIND=$GIT_VALGRIND; export GIT_VALGRIND |
| 48 | GIT_VALGRIND_OPTIONS=$GIT_VALGRIND_OPTIONS; export GIT_VALGRIND_OPTIONS |
| 49 | |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 50 | if ! test -x "$LIB_HTTPD_PATH" |
| 51 | then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 52 | skip_all="skipping test, no web server found at '$LIB_HTTPD_PATH'" |
Markus Heidelberg | 3564131 | 2009-01-20 00:43:26 +0100 | [diff] [blame] | 53 | test_done |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 54 | fi |
| 55 | |
| 56 | HTTPD_VERSION=`$LIB_HTTPD_PATH -v | \ |
| 57 | sed -n 's/^Server version: Apache\/\([0-9]*\)\..*$/\1/p; q'` |
| 58 | |
| 59 | if test -n "$HTTPD_VERSION" |
| 60 | then |
| 61 | if test -z "$LIB_HTTPD_MODULE_PATH" |
| 62 | then |
| 63 | if ! test $HTTPD_VERSION -ge 2 |
| 64 | then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 65 | skip_all="skipping test, at least Apache version 2 is required" |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 66 | test_done |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 67 | fi |
Tarmigan Casebolt | 0d34473 | 2010-01-02 14:04:25 -0800 | [diff] [blame] | 68 | if ! test -d "$DEFAULT_HTTPD_MODULE_PATH" |
| 69 | then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 70 | skip_all="Apache module directory not found. Skipping tests." |
Tarmigan Casebolt | 0d34473 | 2010-01-02 14:04:25 -0800 | [diff] [blame] | 71 | test_done |
| 72 | fi |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 73 | |
Jay Soffian | 69707d6 | 2009-02-25 03:28:15 -0500 | [diff] [blame] | 74 | LIB_HTTPD_MODULE_PATH="$DEFAULT_HTTPD_MODULE_PATH" |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 75 | fi |
| 76 | else |
| 77 | error "Could not identify web server at '$LIB_HTTPD_PATH'" |
| 78 | fi |
| 79 | |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 80 | prepare_httpd() { |
Mike Hommey | 13b5481 | 2008-07-07 21:02:37 +0200 | [diff] [blame] | 81 | mkdir -p "$HTTPD_DOCUMENT_ROOT_PATH" |
Gabriel Corona | 3cf8fe1 | 2010-11-14 02:51:14 +0100 | [diff] [blame] | 82 | cp "$TEST_PATH"/passwd "$HTTPD_ROOT_PATH" |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 83 | |
Mike Hommey | 13b5481 | 2008-07-07 21:02:37 +0200 | [diff] [blame] | 84 | ln -s "$LIB_HTTPD_MODULE_PATH" "$HTTPD_ROOT_PATH/modules" |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 85 | |
| 86 | if test -n "$LIB_HTTPD_SSL" |
| 87 | then |
Jeff King | 5232586 | 2011-07-18 03:49:12 -0400 | [diff] [blame] | 88 | HTTPD_PROTO=https |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 89 | |
| 90 | RANDFILE_PATH="$HTTPD_ROOT_PATH"/.rnd openssl req \ |
Mike Hommey | 13b5481 | 2008-07-07 21:02:37 +0200 | [diff] [blame] | 91 | -config "$TEST_PATH/ssl.cnf" \ |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 92 | -new -x509 -nodes \ |
Mike Hommey | 13b5481 | 2008-07-07 21:02:37 +0200 | [diff] [blame] | 93 | -out "$HTTPD_ROOT_PATH/httpd.pem" \ |
| 94 | -keyout "$HTTPD_ROOT_PATH/httpd.pem" |
Bryan Donlan | 0e46e70 | 2008-05-04 01:37:58 -0400 | [diff] [blame] | 95 | GIT_SSL_NO_VERIFY=t |
| 96 | export GIT_SSL_NO_VERIFY |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 97 | HTTPD_PARA="$HTTPD_PARA -DSSL" |
| 98 | else |
Jeff King | 5232586 | 2011-07-18 03:49:12 -0400 | [diff] [blame] | 99 | HTTPD_PROTO=http |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 100 | fi |
Jeff King | 5232586 | 2011-07-18 03:49:12 -0400 | [diff] [blame] | 101 | HTTPD_DEST=127.0.0.1:$LIB_HTTPD_PORT |
| 102 | HTTPD_URL=$HTTPD_PROTO://$HTTPD_DEST |
| 103 | HTTPD_URL_USER=$HTTPD_PROTO://user%40host@$HTTPD_DEST |
| 104 | HTTPD_URL_USER_PASS=$HTTPD_PROTO://user%40host:user%40host@$HTTPD_DEST |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 105 | |
| 106 | if test -n "$LIB_HTTPD_DAV" -o -n "$LIB_HTTPD_SVN" |
| 107 | then |
| 108 | HTTPD_PARA="$HTTPD_PARA -DDAV" |
| 109 | |
| 110 | if test -n "$LIB_HTTPD_SVN" |
| 111 | then |
| 112 | HTTPD_PARA="$HTTPD_PARA -DSVN" |
| 113 | rawsvnrepo="$HTTPD_ROOT_PATH/svnrepo" |
| 114 | svnrepo="http://127.0.0.1:$LIB_HTTPD_PORT/svn" |
| 115 | fi |
| 116 | fi |
| 117 | } |
| 118 | |
| 119 | start_httpd() { |
Jeff King | 75318a3 | 2009-02-25 03:32:08 -0500 | [diff] [blame] | 120 | prepare_httpd >&3 2>&4 |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 121 | |
Clemens Buchacher | a5adcbe | 2009-06-01 14:28:25 +0200 | [diff] [blame] | 122 | trap 'code=$?; stop_httpd; (exit $code); die' EXIT |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 123 | |
Mike Hommey | 13b5481 | 2008-07-07 21:02:37 +0200 | [diff] [blame] | 124 | "$LIB_HTTPD_PATH" -d "$HTTPD_ROOT_PATH" \ |
| 125 | -f "$TEST_PATH/apache.conf" $HTTPD_PARA \ |
Jeff King | 75318a3 | 2009-02-25 03:32:08 -0500 | [diff] [blame] | 126 | -c "Listen 127.0.0.1:$LIB_HTTPD_PORT" -k start \ |
| 127 | >&3 2>&4 |
Clemens Buchacher | a5adcbe | 2009-06-01 14:28:25 +0200 | [diff] [blame] | 128 | if test $? -ne 0 |
| 129 | then |
Ævar Arnfjörð Bjarmason | e8344e8 | 2010-07-08 01:16:06 +0000 | [diff] [blame] | 130 | skip_all="skipping test, web server setup failed" |
Clemens Buchacher | a5adcbe | 2009-06-01 14:28:25 +0200 | [diff] [blame] | 131 | trap 'die' EXIT |
Jeff King | 75318a3 | 2009-02-25 03:32:08 -0500 | [diff] [blame] | 132 | test_done |
| 133 | fi |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 134 | } |
| 135 | |
| 136 | stop_httpd() { |
Markus Heidelberg | 3564131 | 2009-01-20 00:43:26 +0100 | [diff] [blame] | 137 | trap 'die' EXIT |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 138 | |
Mike Hommey | 13b5481 | 2008-07-07 21:02:37 +0200 | [diff] [blame] | 139 | "$LIB_HTTPD_PATH" -d "$HTTPD_ROOT_PATH" \ |
Jay Soffian | 69707d6 | 2009-02-25 03:28:15 -0500 | [diff] [blame] | 140 | -f "$TEST_PATH/apache.conf" $HTTPD_PARA -k stop |
Clemens Buchacher | faa4bc3 | 2008-02-27 20:28:45 +0100 | [diff] [blame] | 141 | } |
Tay Ray Chuan | 6cbd6e9 | 2010-03-02 18:49:26 +0800 | [diff] [blame] | 142 | |
| 143 | test_http_push_nonff() { |
| 144 | REMOTE_REPO=$1 |
| 145 | LOCAL_REPO=$2 |
| 146 | BRANCH=$3 |
| 147 | |
| 148 | test_expect_success 'non-fast-forward push fails' ' |
| 149 | cd "$REMOTE_REPO" && |
| 150 | HEAD=$(git rev-parse --verify HEAD) && |
| 151 | |
| 152 | cd "$LOCAL_REPO" && |
| 153 | git checkout $BRANCH && |
| 154 | echo "changed" > path2 && |
| 155 | git commit -a -m path2 --amend && |
| 156 | |
Brandon Casey | 77b5be2 | 2010-07-20 13:27:55 -0500 | [diff] [blame] | 157 | test_must_fail git push -v origin >output 2>&1 && |
Tay Ray Chuan | 6cbd6e9 | 2010-03-02 18:49:26 +0800 | [diff] [blame] | 158 | (cd "$REMOTE_REPO" && |
| 159 | test $HEAD = $(git rev-parse --verify HEAD)) |
| 160 | ' |
| 161 | |
| 162 | test_expect_success 'non-fast-forward push show ref status' ' |
| 163 | grep "^ ! \[rejected\][ ]*$BRANCH -> $BRANCH (non-fast-forward)$" output |
| 164 | ' |
| 165 | |
Junio C Hamano | d3bd042 | 2011-04-12 16:12:47 -0700 | [diff] [blame] | 166 | test_expect_success 'non-fast-forward push shows help message' ' |
Christopher Tiwald | 0aff719 | 2012-04-12 13:56:28 -0400 | [diff] [blame] | 167 | test_i18ngrep "Updates were rejected because" output |
Tay Ray Chuan | 6cbd6e9 | 2010-03-02 18:49:26 +0800 | [diff] [blame] | 168 | ' |
| 169 | } |
Jeff King | e837936 | 2012-08-27 09:24:31 -0400 | [diff] [blame] | 170 | |
| 171 | setup_askpass_helper() { |
| 172 | test_expect_success 'setup askpass helper' ' |
| 173 | write_script "$TRASH_DIRECTORY/askpass" <<-\EOF && |
| 174 | echo >>"$TRASH_DIRECTORY/askpass-query" "askpass: $*" && |
| 175 | cat "$TRASH_DIRECTORY/askpass-response" |
| 176 | EOF |
| 177 | GIT_ASKPASS="$TRASH_DIRECTORY/askpass" && |
| 178 | export GIT_ASKPASS && |
| 179 | export TRASH_DIRECTORY |
| 180 | ' |
| 181 | } |
| 182 | |
| 183 | set_askpass() { |
| 184 | >"$TRASH_DIRECTORY/askpass-query" && |
| 185 | echo "$*" >"$TRASH_DIRECTORY/askpass-response" |
| 186 | } |
| 187 | |
| 188 | expect_askpass() { |
| 189 | dest=$HTTPD_DEST |
| 190 | { |
| 191 | case "$1" in |
| 192 | none) |
| 193 | ;; |
| 194 | pass) |
| 195 | echo "askpass: Password for 'http://$2@$dest': " |
| 196 | ;; |
| 197 | both) |
| 198 | echo "askpass: Username for 'http://$dest': " |
| 199 | echo "askpass: Password for 'http://$2@$dest': " |
| 200 | ;; |
| 201 | *) |
| 202 | false |
| 203 | ;; |
| 204 | esac |
| 205 | } >"$TRASH_DIRECTORY/askpass-expect" && |
| 206 | test_cmp "$TRASH_DIRECTORY/askpass-expect" \ |
| 207 | "$TRASH_DIRECTORY/askpass-query" |
| 208 | } |