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)}
25 if [ ! -z "$GITDAEMON_PID" ]; then
26 echo "Stopping git daemon..."
30 if [ ! -z "$SSHD_DIR" -a -f "${SSHD_DIR}/pid" ]; then
31 echo "Stopping SSH..."
32 kill $
(cat "${SSHD_DIR}/pid")
39 if [[ "$GITTEST_FLAKY_RETRY" > 0 ]]; then
40 ATTEMPTS_REMAIN
=$GITTEST_FLAKY_RETRY
46 while [[ "$ATTEMPTS_REMAIN" > 0 ]]; do
47 if [ "$FAILED" -eq 1 ]; then
49 echo "Re-running flaky ${1} tests..."
55 CLAR_SUMMARY
="${BUILD_DIR}/results_${1}.xml" ctest -V -R "^${1}$" || RETURN_CODE
=$?
&& true
57 if [ "$RETURN_CODE" -eq 0 ]; then
62 echo "Test exited with code: $RETURN_CODE"
63 ATTEMPTS_REMAIN
="$(($ATTEMPTS_REMAIN-1))"
67 if [ "$FAILED" -ne 0 ]; then
68 if [ "$CONTINUE_ON_FAILURE" -ne 1 ]; then
76 # Configure the test environment; run them early so that we're certain
77 # that they're started by the time we need them.
79 echo "##############################################################################"
80 echo "## Configuring test environment"
81 echo "##############################################################################"
83 if [ -z "$SKIP_GITDAEMON_TESTS" ]; then
84 echo "Starting git daemon..."
85 GITDAEMON_DIR
=`mktemp -d ${TMPDIR}/gitdaemon.XXXXXXXX`
86 git init
--bare "${GITDAEMON_DIR}/test.git" >/dev
/null
87 git daemon
--listen=localhost
--export-all --enable=receive-pack
--base-path="${GITDAEMON_DIR}" "${GITDAEMON_DIR}" 2>/dev
/null
&
92 if [ -z "$SKIP_PROXY_TESTS" ]; then
93 curl
--location --silent --show-error https
://github.com
/ethomson
/poxyproxy
/releases
/download
/v0.7
.0/poxyproxy-0.7
.0.jar
>poxyproxy.jar
96 echo "Starting HTTP proxy (Basic)..."
97 java
-jar poxyproxy.jar
--address 127.0.0.1 --port 8080 --credentials foo
:bar
--auth-type basic
--quiet &
100 echo "Starting HTTP proxy (NTLM)..."
101 java
-jar poxyproxy.jar
--address 127.0.0.1 --port 8090 --credentials foo
:bar
--auth-type ntlm
--quiet &
104 if [ -z "$SKIP_NTLM_TESTS" -o -z "$SKIP_ONLINE_TESTS" ]; then
105 curl
--location --silent --show-error https
://github.com
/ethomson
/poxygit
/releases
/download
/v0.5
.1/poxygit-0.5
.1.jar
>poxygit.jar
108 echo "Starting HTTP server..."
109 NTLM_DIR
=`mktemp -d ${TMPDIR}/ntlm.XXXXXXXX`
110 git init
--bare "${NTLM_DIR}/test.git"
111 java
-jar poxygit.jar
--address 127.0.0.1 --port 9000 --credentials foo
:baz
--quiet "${NTLM_DIR}" &
114 if [ -z "$SKIP_SSH_TESTS" ]; then
116 echo "Starting ssh daemon..."
117 HOME
=`mktemp -d ${TMPDIR}/home.XXXXXXXX`
118 SSHD_DIR
=`mktemp -d ${TMPDIR}/sshd.XXXXXXXX`
119 git init
--bare "${SSHD_DIR}/test.git" >/dev
/null
120 cat >"${SSHD_DIR}/sshd_config" <<-EOF
122 ListenAddress 0.0.0.0
124 HostKey ${SSHD_DIR}/id_rsa
125 PidFile ${SSHD_DIR}/pid
126 AuthorizedKeysFile ${HOME}/.ssh/authorized_keys
128 RSAAuthentication yes
129 PasswordAuthentication yes
130 PubkeyAuthentication yes
131 ChallengeResponseAuthentication no
133 # Required here as sshd will simply close connection otherwise
136 ssh-keygen
-t rsa
-f "${SSHD_DIR}/id_rsa" -N "" -q
137 /usr
/sbin
/sshd
-f "${SSHD_DIR}/sshd_config" -E "${SSHD_DIR}/log"
141 ssh-keygen
-t rsa
-f "${HOME}/.ssh/id_rsa" -N "" -q
142 cat "${HOME}/.ssh/id_rsa.pub" >>"${HOME}/.ssh/authorized_keys"
143 while read algorithm key comment
; do
144 echo "[localhost]:2222 $algorithm $key" >>"${HOME}/.ssh/known_hosts"
145 done <"${SSHD_DIR}/id_rsa.pub"
147 # Get the fingerprint for localhost and remove the colons so we can
148 # parse it as a hex number. Older versions have a different output
150 if [[ $
(ssh -V 2>&1) == OpenSSH_6
* ]]; then
151 SSH_FINGERPRINT
=$
(ssh-keygen
-F '[localhost]:2222' -f "${HOME}/.ssh/known_hosts" -l |
tail -n 1 | cut
-d ' ' -f 2 |
tr -d ':')
153 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 :)
157 # Run the tests that do not require network connectivity.
159 if [ -z "$SKIP_OFFLINE_TESTS" ]; then
161 echo "##############################################################################"
162 echo "## Running core tests"
163 echo "##############################################################################"
166 echo "Running libgit2 integration (offline) tests"
171 echo "Running utility tests"
176 if [ -n "$RUN_INVASIVE_TESTS" ]; then
178 echo "Running invasive tests"
181 export GITTEST_INVASIVE_FS_SIZE
=1
182 export GITTEST_INVASIVE_MEMORY
=1
183 export GITTEST_INVASIVE_SPEED
=1
185 unset GITTEST_INVASIVE_FS_SIZE
186 unset GITTEST_INVASIVE_MEMORY
187 unset GITTEST_INVASIVE_SPEED
190 if [ -z "$SKIP_ONLINE_TESTS" ]; then
191 # Run the online tests. The "online" test suite only includes the
192 # default online tests that do not require additional configuration.
193 # The "proxy" and "ssh" test suites require further setup.
196 echo "##############################################################################"
197 echo "## Running networking (online) tests"
198 echo "##############################################################################"
200 export GITTEST_REMOTE_REDIRECT_INITIAL
="http://localhost:9000/initial-redirect/libgit2/TestGitRepository"
201 export GITTEST_REMOTE_REDIRECT_SUBSEQUENT
="http://localhost:9000/subsequent-redirect/libgit2/TestGitRepository"
203 unset GITTEST_REMOTE_REDIRECT_INITIAL
204 unset GITTEST_REMOTE_REDIRECT_SUBSEQUENT
206 # Run the online tests that immutably change global state separately
207 # to avoid polluting the test environment.
209 echo "Running custom certificate (online_customcert) tests"
212 run_test online_customcert
215 if [ -z "$SKIP_GITDAEMON_TESTS" ]; then
217 echo "Running gitdaemon tests"
220 export GITTEST_REMOTE_URL
="git://localhost/test.git"
222 unset GITTEST_REMOTE_URL
225 if [ -z "$SKIP_PROXY_TESTS" ]; then
227 echo "Running proxy tests (Basic authentication)"
230 export GITTEST_REMOTE_PROXY_HOST
="localhost:8080"
231 export GITTEST_REMOTE_PROXY_USER
="foo"
232 export GITTEST_REMOTE_PROXY_PASS
="bar"
234 unset GITTEST_REMOTE_PROXY_HOST
235 unset GITTEST_REMOTE_PROXY_USER
236 unset GITTEST_REMOTE_PROXY_PASS
239 echo "Running proxy tests (NTLM authentication)"
242 export GITTEST_REMOTE_PROXY_HOST
="localhost:8090"
243 export GITTEST_REMOTE_PROXY_USER
="foo"
244 export GITTEST_REMOTE_PROXY_PASS
="bar"
246 unset GITTEST_REMOTE_PROXY_HOST
247 unset GITTEST_REMOTE_PROXY_USER
248 unset GITTEST_REMOTE_PROXY_PASS
251 if [ -z "$SKIP_NTLM_TESTS" ]; then
253 echo "Running NTLM tests (IIS emulation)"
256 export GITTEST_REMOTE_URL
="http://localhost:9000/ntlm/test.git"
257 export GITTEST_REMOTE_USER
="foo"
258 export GITTEST_REMOTE_PASS
="baz"
259 run_test auth_clone_and_push
260 unset GITTEST_REMOTE_URL
261 unset GITTEST_REMOTE_USER
262 unset GITTEST_REMOTE_PASS
265 echo "Running NTLM tests (Apache emulation)"
268 export GITTEST_REMOTE_URL
="http://localhost:9000/broken-ntlm/test.git"
269 export GITTEST_REMOTE_USER
="foo"
270 export GITTEST_REMOTE_PASS
="baz"
271 run_test auth_clone_and_push
272 unset GITTEST_REMOTE_URL
273 unset GITTEST_REMOTE_USER
274 unset GITTEST_REMOTE_PASS
277 if [ -z "$SKIP_NEGOTIATE_TESTS" -a -n "$GITTEST_NEGOTIATE_PASSWORD" ]; then
279 echo "Running SPNEGO tests"
282 if [ "$(uname -s)" = "Darwin" ]; then
283 KINIT_FLAGS
="--password-file=STDIN"
286 echo $GITTEST_NEGOTIATE_PASSWORD | kinit
$KINIT_FLAGS test@LIBGIT2.ORG
289 export GITTEST_REMOTE_URL
="https://test.libgit2.org/kerberos/empty.git"
290 export GITTEST_REMOTE_DEFAULT
="true"
292 unset GITTEST_REMOTE_URL
293 unset GITTEST_REMOTE_DEFAULT
296 echo "Running SPNEGO tests (expect/continue)"
299 export GITTEST_REMOTE_URL
="https://test.libgit2.org/kerberos/empty.git"
300 export GITTEST_REMOTE_DEFAULT
="true"
301 export GITTEST_REMOTE_EXPECTCONTINUE
="true"
303 unset GITTEST_REMOTE_URL
304 unset GITTEST_REMOTE_DEFAULT
305 unset GITTEST_REMOTE_EXPECTCONTINUE
310 if [ -z "$SKIP_SSH_TESTS" ]; then
311 export GITTEST_REMOTE_USER
=$USER
312 export GITTEST_REMOTE_SSH_KEY
="${HOME}/.ssh/id_rsa"
313 export GITTEST_REMOTE_SSH_PUBKEY
="${HOME}/.ssh/id_rsa.pub"
314 export GITTEST_REMOTE_SSH_PASSPHRASE
=""
315 export GITTEST_REMOTE_SSH_FINGERPRINT
="${SSH_FINGERPRINT}"
318 echo "Running ssh tests"
321 export GITTEST_REMOTE_URL
="ssh://localhost:2222/$SSHD_DIR/test.git"
323 unset GITTEST_REMOTE_URL
326 echo "Running ssh tests (scp-style paths)"
329 export GITTEST_REMOTE_URL
="[localhost:2222]:$SSHD_DIR/test.git"
331 unset GITTEST_REMOTE_URL
333 unset GITTEST_REMOTE_USER
334 unset GITTEST_REMOTE_SSH_KEY
335 unset GITTEST_REMOTE_SSH_PUBKEY
336 unset GITTEST_REMOTE_SSH_PASSPHRASE
337 unset GITTEST_REMOTE_SSH_FINGERPRINT
340 if [ -z "$SKIP_FUZZERS" ]; then
342 echo "##############################################################################"
343 echo "## Running fuzzers"
344 echo "##############################################################################"
351 if [ "$SUCCESS" -ne 1 ]; then
352 echo "Some tests failed."