5 if [ -n "$SKIP_TESTS" ]; then
9 # Windows doesn't run the NTLM tests properly (yet)
10 if [[ "$(uname -s)" == MINGW
* ]]; then
14 SOURCE_DIR
=${SOURCE_DIR:-$( cd "$( dirname "${BASH_SOURCE[0]}" )" && dirname $( pwd ) )}
16 TMPDIR
=${TMPDIR:-/tmp}
17 USER
=${USER:-$(whoami)}
24 if [ ! -z "$GITDAEMON_PID" ]; then
25 echo "Stopping git daemon..."
29 if [ ! -z "$SSHD_DIR" -a -f "${SSHD_DIR}/pid" ]; then
30 echo "Stopping SSH..."
31 kill $
(cat "${SSHD_DIR}/pid")
38 if [[ "$GITTEST_FLAKY_RETRY" > 0 ]]; then
39 ATTEMPTS_REMAIN
=$GITTEST_FLAKY_RETRY
45 while [[ "$ATTEMPTS_REMAIN" > 0 ]]; do
46 if [ "$FAILED" -eq 1 ]; then
48 echo "Re-running flaky ${1} tests..."
54 CLAR_SUMMARY
="${BUILD_DIR}/results_${1}.xml" ctest -V -R "^${1}$" || RETURN_CODE
=$?
&& true
56 if [ "$RETURN_CODE" -eq 0 ]; then
61 echo "Test exited with code: $RETURN_CODE"
62 ATTEMPTS_REMAIN
="$(($ATTEMPTS_REMAIN-1))"
66 if [ "$FAILED" -ne 0 ]; then
71 # Configure the test environment; run them early so that we're certain
72 # that they're started by the time we need them.
74 echo "##############################################################################"
75 echo "## Configuring test environment"
76 echo "##############################################################################"
78 if [ -z "$SKIP_GITDAEMON_TESTS" ]; then
79 echo "Starting git daemon..."
80 GITDAEMON_DIR
=`mktemp -d ${TMPDIR}/gitdaemon.XXXXXXXX`
81 git init
--bare "${GITDAEMON_DIR}/test.git"
82 git daemon
--listen=localhost
--export-all --enable=receive-pack
--base-path="${GITDAEMON_DIR}" "${GITDAEMON_DIR}" 2>/dev
/null
&
87 if [ -z "$SKIP_PROXY_TESTS" ]; then
88 curl
--location --silent --show-error https
://github.com
/ethomson
/poxyproxy
/releases
/download
/v0.7
.0/poxyproxy-0.7
.0.jar
>poxyproxy.jar
91 echo "Starting HTTP proxy (Basic)..."
92 java
-jar poxyproxy.jar
--address 127.0.0.1 --port 8080 --credentials foo
:bar
--auth-type basic
--quiet &
95 echo "Starting HTTP proxy (NTLM)..."
96 java
-jar poxyproxy.jar
--address 127.0.0.1 --port 8090 --credentials foo
:bar
--auth-type ntlm
--quiet &
99 if [ -z "$SKIP_NTLM_TESTS" ]; then
100 curl
--location --silent --show-error https
://github.com
/ethomson
/poxygit
/releases
/download
/v0.4
.0/poxygit-0.4
.0.jar
>poxygit.jar
103 echo "Starting HTTP server..."
104 NTLM_DIR
=`mktemp -d ${TMPDIR}/ntlm.XXXXXXXX`
105 git init
--bare "${NTLM_DIR}/test.git"
106 java
-jar poxygit.jar
--address 127.0.0.1 --port 9000 --credentials foo
:baz
--quiet "${NTLM_DIR}" &
109 if [ -z "$SKIP_SSH_TESTS" ]; then
110 echo "Starting ssh daemon..."
111 HOME
=`mktemp -d ${TMPDIR}/home.XXXXXXXX`
112 SSHD_DIR
=`mktemp -d ${TMPDIR}/sshd.XXXXXXXX`
113 git init
--bare "${SSHD_DIR}/test.git"
114 cat >"${SSHD_DIR}/sshd_config" <<-EOF
116 ListenAddress 0.0.0.0
118 HostKey ${SSHD_DIR}/id_rsa
119 PidFile ${SSHD_DIR}/pid
120 AuthorizedKeysFile ${HOME}/.ssh/authorized_keys
122 RSAAuthentication yes
123 PasswordAuthentication yes
124 PubkeyAuthentication yes
125 ChallengeResponseAuthentication no
127 # Required here as sshd will simply close connection otherwise
130 ssh-keygen
-t rsa
-f "${SSHD_DIR}/id_rsa" -N "" -q
131 /usr
/sbin
/sshd
-f "${SSHD_DIR}/sshd_config" -E "${SSHD_DIR}/log"
135 ssh-keygen
-t rsa
-f "${HOME}/.ssh/id_rsa" -N "" -q
136 cat "${HOME}/.ssh/id_rsa.pub" >>"${HOME}/.ssh/authorized_keys"
137 while read algorithm key comment
; do
138 echo "[localhost]:2222 $algorithm $key" >>"${HOME}/.ssh/known_hosts"
139 done <"${SSHD_DIR}/id_rsa.pub"
141 # Get the fingerprint for localhost and remove the colons so we can
142 # parse it as a hex number. Older versions have a different output
144 if [[ $
(ssh -V 2>&1) == OpenSSH_6
* ]]; then
145 SSH_FINGERPRINT
=$
(ssh-keygen
-F '[localhost]:2222' -f "${HOME}/.ssh/known_hosts" -l |
tail -n 1 | cut
-d ' ' -f 2 |
tr -d ':')
147 SSH_FINGERPRINT
=$
(ssh-keygen
-E md5
-F '[localhost]:2222' -f "${HOME}/.ssh/known_hosts" -l |
tail -n 1 | cut
-d ' ' -f 3 | cut
-d : -f2- |
tr -d :)
151 # Run the tests that do not require network connectivity.
153 if [ -z "$SKIP_OFFLINE_TESTS" ]; then
155 echo "##############################################################################"
156 echo "## Running (offline) tests"
157 echo "##############################################################################"
162 if [ -n "$RUN_INVASIVE_TESTS" ]; then
164 echo "Running invasive tests"
167 export GITTEST_INVASIVE_FS_SIZE
=1
168 export GITTEST_INVASIVE_MEMORY
=1
169 export GITTEST_INVASIVE_SPEED
=1
171 unset GITTEST_INVASIVE_FS_SIZE
172 unset GITTEST_INVASIVE_MEMORY
173 unset GITTEST_INVASIVE_SPEED
176 if [ -z "$SKIP_ONLINE_TESTS" ]; then
177 # Run the various online tests. The "online" test suite only includes the
178 # default online tests that do not require additional configuration. The
179 # "proxy" and "ssh" test suites require further setup.
182 echo "##############################################################################"
183 echo "## Running (online) tests"
184 echo "##############################################################################"
186 export GITTEST_FLAKY_RETRY
=5
188 unset GITTEST_FLAKY_RETRY
191 if [ -z "$SKIP_GITDAEMON_TESTS" ]; then
193 echo "Running gitdaemon tests"
196 export GITTEST_REMOTE_URL
="git://localhost/test.git"
198 unset GITTEST_REMOTE_URL
201 if [ -z "$SKIP_PROXY_TESTS" ]; then
203 echo "Running proxy tests (Basic authentication)"
206 export GITTEST_REMOTE_PROXY_HOST
="localhost:8080"
207 export GITTEST_REMOTE_PROXY_USER
="foo"
208 export GITTEST_REMOTE_PROXY_PASS
="bar"
210 unset GITTEST_REMOTE_PROXY_HOST
211 unset GITTEST_REMOTE_PROXY_USER
212 unset GITTEST_REMOTE_PROXY_PASS
215 echo "Running proxy tests (NTLM authentication)"
218 export GITTEST_REMOTE_PROXY_HOST
="localhost:8090"
219 export GITTEST_REMOTE_PROXY_USER
="foo"
220 export GITTEST_REMOTE_PROXY_PASS
="bar"
221 export GITTEST_FLAKY_RETRY
=5
223 unset GITTEST_FLAKY_RETRY
224 unset GITTEST_REMOTE_PROXY_HOST
225 unset GITTEST_REMOTE_PROXY_USER
226 unset GITTEST_REMOTE_PROXY_PASS
229 if [ -z "$SKIP_NTLM_TESTS" ]; then
231 echo "Running NTLM tests (IIS emulation)"
234 export GITTEST_REMOTE_URL
="http://localhost:9000/ntlm/test.git"
235 export GITTEST_REMOTE_USER
="foo"
236 export GITTEST_REMOTE_PASS
="baz"
237 run_test auth_clone_and_push
238 unset GITTEST_REMOTE_URL
239 unset GITTEST_REMOTE_USER
240 unset GITTEST_REMOTE_PASS
243 echo "Running NTLM tests (Apache emulation)"
246 export GITTEST_REMOTE_URL
="http://localhost:9000/broken-ntlm/test.git"
247 export GITTEST_REMOTE_USER
="foo"
248 export GITTEST_REMOTE_PASS
="baz"
249 run_test auth_clone_and_push
250 unset GITTEST_REMOTE_URL
251 unset GITTEST_REMOTE_USER
252 unset GITTEST_REMOTE_PASS
255 if [ -z "$SKIP_NEGOTIATE_TESTS" -a -n "$GITTEST_NEGOTIATE_PASSWORD" ]; then
257 echo "Running SPNEGO tests"
260 if [ "$(uname -s)" = "Darwin" ]; then
261 KINIT_FLAGS
="--password-file=STDIN"
264 echo $GITTEST_NEGOTIATE_PASSWORD | kinit
$KINIT_FLAGS test@LIBGIT2.ORG
267 export GITTEST_REMOTE_URL
="https://test.libgit2.org/kerberos/empty.git"
268 export GITTEST_REMOTE_DEFAULT
="true"
270 unset GITTEST_REMOTE_URL
271 unset GITTEST_REMOTE_DEFAULT
274 echo "Running SPNEGO tests (expect/continue)"
277 export GITTEST_REMOTE_URL
="https://test.libgit2.org/kerberos/empty.git"
278 export GITTEST_REMOTE_DEFAULT
="true"
279 export GITTEST_REMOTE_EXPECTCONTINUE
="true"
281 unset GITTEST_REMOTE_URL
282 unset GITTEST_REMOTE_DEFAULT
283 unset GITTEST_REMOTE_EXPECTCONTINUE
288 if [ -z "$SKIP_SSH_TESTS" ]; then
290 echo "Running ssh tests"
293 export GITTEST_REMOTE_URL
="ssh://localhost:2222/$SSHD_DIR/test.git"
294 export GITTEST_REMOTE_USER
=$USER
295 export GITTEST_REMOTE_SSH_KEY
="${HOME}/.ssh/id_rsa"
296 export GITTEST_REMOTE_SSH_PUBKEY
="${HOME}/.ssh/id_rsa.pub"
297 export GITTEST_REMOTE_SSH_PASSPHRASE
=""
298 export GITTEST_REMOTE_SSH_FINGERPRINT
="${SSH_FINGERPRINT}"
300 unset GITTEST_REMOTE_URL
301 unset GITTEST_REMOTE_USER
302 unset GITTEST_REMOTE_SSH_KEY
303 unset GITTEST_REMOTE_SSH_PUBKEY
304 unset GITTEST_REMOTE_SSH_PASSPHRASE
305 unset GITTEST_REMOTE_SSH_FINGERPRINT
308 if [ -z "$SKIP_FUZZERS" ]; then
310 echo "##############################################################################"
311 echo "## Running fuzzers"
312 echo "##############################################################################"
319 if [ "$SUCCESS" -ne 1 ]; then
320 echo "Some tests failed."