CI: run sanitizers as root
[tinc] / .ci / test / run.sh
1 #!/bin/sh
2
3 set -eux
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   if [ "$(id -u)" != 0 ]; then
28     sudo chown -R "${USER:-$(whoami)}" . || true
29   fi
30
31   mkdir -p sanitizer /tmp/logs
32
33   header "Running test flavor $flavor"
34
35   ./.ci/build.sh "$flavor" "$@"
36
37   if [ "${HOST:-}" = mingw ]; then
38     echo >&2 "Integration tests cannot run under wine, skipping"
39     return 0
40   fi
41
42   if [ -n "${HOST:-}" ]; then
43     echo >&2 "Using higher test timeout for cross-compilation job $HOST"
44     timeout=10
45   else
46     timeout=1
47   fi
48
49   code=0
50   meson test -C "$flavor" --timeout-multiplier $timeout --verbose || code=$?
51
52   sudo tar -c -z -f "/tmp/logs/tests.$flavor.tar.gz" "$flavor" sanitizer/ || true
53
54   return $code
55 }
56
57 case "$(uname -s)" in
58 MINGW* | Darwin) sudo() { "$@"; } ;;
59 esac
60
61 flavor=$1
62 shift
63
64 case "$flavor" in
65 default)
66   run_tests default "$@"
67   ;;
68 nolegacy)
69   run_tests nolegacy -Dcrypto=nolegacy "$@"
70   ;;
71 gcrypt)
72   run_tests gcrypt -Dcrypto=gcrypt "$@"
73   ;;
74 openssl3)
75   if [ -d /opt/ssl3 ]; then
76     run_tests openssl3 -Dpkg_config_path=/opt/ssl3/lib64/pkgconfig "$@"
77   else
78     echo >&2 "OpenSSL 3 not installed, skipping test"
79   fi
80   ;;
81 *)
82   bail "unknown test flavor $1"
83   ;;
84 esac