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