summaryrefslogtreecommitdiffstats
path: root/test/run-integration-tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/run-integration-tests.sh')
-rwxr-xr-xtest/run-integration-tests.sh83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/run-integration-tests.sh b/test/run-integration-tests.sh
new file mode 100755
index 0000000..04b8385
--- /dev/null
+++ b/test/run-integration-tests.sh
@@ -0,0 +1,83 @@
+#!/usr/bin/env bash
+set -e
+
+BUILD_DIR="$($(dirname "$0")/../tools/find-build-dir.sh)"
+if [ $# -gt 0 ]; then
+ args="$@"
+else
+ args="setup run clean-again"
+fi
+args_no_clean=$(sed -r 's/\bclean\b//g' <<<$args)
+do_clean=$( [ "$args" = "$args_no_clean" ]; echo $? )
+
+ninja -C "$BUILD_DIR"
+
+declare -A results
+declare -A times
+
+COUNT=0
+FAILURES=0
+
+cd "$(dirname "$0")"
+
+# Let's always do the cleaning operation first, because it destroys the image
+# cache.
+if [ $do_clean = 1 ]; then
+ for TEST in TEST-??-* ; do
+ ( set -x ; make -C "$TEST" "BUILD_DIR=$BUILD_DIR" clean )
+ done
+
+ [ -n "$args_no_clean" ] || exit 0
+fi
+
+pass_blacklist() {
+ for marker in $BLACKLIST_MARKERS; do
+ if [ -f "$1/$marker" ]; then
+ echo "========== BLACKLISTED: $1 ($marker) =========="
+ return 1
+ fi
+ done
+ return 0
+}
+
+for TEST in TEST-??-* ; do
+ COUNT=$(($COUNT+1))
+
+ pass_blacklist $TEST || continue
+ start=$(date +%s)
+
+ echo -e "\n--x-- Running $TEST --x--"
+ set +e
+ ( set -x ; make -C "$TEST" "BUILD_DIR=$BUILD_DIR" $args_no_clean )
+ RESULT=$?
+ set -e
+ echo "--x-- Result of $TEST: $RESULT --x--"
+
+ results["$TEST"]="$RESULT"
+ times["$TEST"]=$(( $(date +%s) - $start ))
+
+ [ "$RESULT" -ne "0" ] && FAILURES=$(($FAILURES+1))
+done
+
+if [ $FAILURES -eq 0 -a $do_clean = 1 ]; then
+ for TEST in ${!results[@]}; do
+ ( set -x ; make -C "$TEST" "BUILD_DIR=$BUILD_DIR" clean-again )
+ done
+fi
+
+echo ""
+
+for TEST in ${!results[@]}; do
+ RESULT="${results[$TEST]}"
+ time="${times[$TEST]}"
+ string=$([ "$RESULT" = "0" ] && echo "SUCCESS" || echo "FAIL")
+ printf "%-35s %-8s (%3s s)\n" "${TEST}:" "${string}" "$time"
+done | sort
+
+if [ "$FAILURES" -eq 0 ] ; then
+ echo -e "\nALL $COUNT TESTS PASSED"
+else
+ echo -e "\nTOTAL FAILURES: $FAILURES OF $COUNT"
+fi
+
+exit "$FAILURES"