b17d2de7875ee9d6207679ba3fd85191100cc1bf
[tinc] / .ci / test / run.sh
1 #!/bin/sh
2
3 set -eu
4
5 bail() {
6   echo >&2 "@"
7   exit 1
8 }
9
10 header() {
11   echo '################################################################################'
12   echo "# $*"
13   echo '################################################################################'
14 }
15
16 run_tests() {
17   flavor="$1"
18   shift
19
20   header "Cleaning up leftovers from previous runs"
21
22   for name in tinc tincd; do
23     sudo pkill -TERM -x "$name" || true
24     sudo pkill -KILL -x "$name" || true
25   done
26
27   sudo git clean -dfx
28   sudo chown -R "${USER:-$(whoami)}" .
29
30   mkdir -p sanitizer /tmp/logs
31
32   header "Running test flavor $flavor"
33
34   autoreconf -fsi
35   # shellcheck disable=SC2046
36   ./configure $(sh .ci/conf.sh "$@")
37   make -j"$(nproc)" all extra
38
39   code=0
40   make check -j2 VERBOSE=1 || code=$?
41
42   sudo tar -c -z -f "/tmp/logs/tests.$flavor.tar.gz" test/ sanitizer/
43
44   return $code
45 }
46
47 case "$(uname -s)" in
48 Linux)
49   if [ -n "${HOST:-}" ]; then
50     # Needed for cross-compilation for 32-bit targets.
51     export CPPFLAGS="${CPPFLAGS:-} -D_FILE_OFFSET_BITS=64"
52   fi
53   ;;
54
55 MINGW*)
56   # No-op.
57   sudo() { "$@"; }
58   ;;
59
60 Darwin)
61   nproc() { sysctl -n hw.ncpu; }
62   gcrypt=$(brew --prefix libgcrypt)
63   openssl=$(brew --prefix openssl)
64   export CPPFLAGS="${CPPFLAGS:-} -I/usr/local/include -I$gcrypt/include -I$openssl/include -I$gcrypt/include"
65   ;;
66 esac
67
68 case "$1" in
69 default)
70   run_tests default
71   ;;
72 nolegacy)
73   run_tests nolegacy --disable-legacy-protocol
74   ;;
75 gcrypt)
76   run_tests gcrypt --with-libgcrypt
77   ;;
78 *)
79   bail "unknown test flavor $1"
80   ;;
81 esac