]> git.proxmox.com Git - systemd.git/blob - test/run-integration-tests.sh
New upstream version 249~rc1
[systemd.git] / test / run-integration-tests.sh
1 #!/usr/bin/env bash
2 set -e
3
4 if [ "$NO_BUILD" ]; then
5 BUILD_DIR=""
6 elif BUILD_DIR="$($(dirname "$0")/../tools/find-build-dir.sh)"; then
7 ninja -C "$BUILD_DIR"
8 else
9 echo "No build found, please set BUILD_DIR or NO_BUILD" >&2
10 exit 1
11 fi
12
13 if [ $# -gt 0 ]; then
14 args="$*"
15 else
16 args="setup run clean-again"
17 fi
18
19 VALID_TARGETS="all setup run clean clean-again"
20
21 is_valid_target() {
22 for target in $VALID_TARGETS; do
23 [ "$1" = "$target" ] && return 0
24 done
25 return 1
26 }
27
28 # reject invalid make targets in $args
29 for arg in $args; do
30 if ! is_valid_target "$arg"; then
31 echo "Invalid target: $arg" >&2
32 exit 1
33 fi
34 done
35
36 CLEAN=0
37 CLEANAGAIN=0
38
39 # separate 'clean' and 'clean-again' operations
40 [[ "$args" =~ "clean-again" ]] && CLEANAGAIN=1
41 args=${args/clean-again}
42 [[ "$args" =~ "clean" ]] && CLEAN=1
43 args=${args/clean}
44
45 declare -A results
46 declare -A times
47
48 COUNT=0
49 FAILURES=0
50
51 cd "$(dirname "$0")"
52
53 pass_deny_list() {
54 for marker in $DENY_LIST_MARKERS $BLACKLIST_MARKERS; do
55 if [ -f "$1/$marker" ]; then
56 echo "========== DENY-LISTED: $1 ($marker) =========="
57 return 1
58 fi
59 done
60 return 0
61 }
62
63 SELECTED_TESTS="${SELECTED_TESTS:-TEST-??-*}"
64
65 # Let's always do the cleaning operation first, because it destroys the image
66 # cache.
67 if [ $CLEAN = 1 ]; then
68 for TEST in $SELECTED_TESTS; do
69 ( set -x ; make -C "$TEST" clean )
70 done
71 fi
72
73 # Run actual tests (if requested)
74 if [[ $args =~ [a-z] ]]; then
75 for TEST in $SELECTED_TESTS; do
76 COUNT=$(($COUNT+1))
77
78 pass_deny_list $TEST || continue
79 start=$(date +%s)
80
81 echo -e "\n--x-- Running $TEST --x--"
82 set +e
83 ( set -x ; make -C "$TEST" $args )
84 RESULT=$?
85 set -e
86 echo "--x-- Result of $TEST: $RESULT --x--"
87
88 results["$TEST"]="$RESULT"
89 times["$TEST"]=$(( $(date +%s) - $start ))
90
91 [ "$RESULT" -ne "0" ] && FAILURES=$(($FAILURES+1))
92 done
93 fi
94
95 # Run clean-again, if requested, and if no tests failed
96 if [ $FAILURES -eq 0 -a $CLEANAGAIN = 1 ]; then
97 for TEST in ${!results[@]}; do
98 ( set -x ; make -C "$TEST" clean-again )
99 done
100 fi
101
102 echo ""
103
104 for TEST in ${!results[@]}; do
105 RESULT="${results[$TEST]}"
106 time="${times[$TEST]}"
107 string=$([ "$RESULT" = "0" ] && echo "SUCCESS" || echo "FAIL")
108 printf "%-35s %-8s (%3s s)\n" "${TEST}:" "${string}" "$time"
109 done | sort
110
111 if [ "$FAILURES" -eq 0 ] ; then
112 echo -e "\nALL $COUNT TESTS PASSED"
113 else
114 echo -e "\nTOTAL FAILURES: $FAILURES OF $COUNT"
115 fi
116
117 exit "$FAILURES"