isle/tests/entrypoint.sh

116 lines
2.7 KiB
Bash
Raw Normal View History

2023-08-30 16:16:19 +00:00
set -e
2023-09-01 16:28:22 +00:00
# cd into script's directory
cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null
root=$(pwd)
export UTILS="$root"/utils
2023-09-01 14:18:23 +00:00
REGEXS=()
2023-08-30 18:08:40 +00:00
while [[ $# -gt 0 ]]; do
case $1 in
2023-09-01 14:18:23 +00:00
-h|--help)
cat <<EOF
USAGE: [flags] [test regexs...]
FLAGS
2023-09-01 15:19:48 +00:00
--keep-tmp
2023-09-01 14:18:23 +00:00
--verbose (-v)
--help (-h)
EOF
2023-08-30 18:08:40 +00:00
exit 1
;;
2023-09-01 15:19:48 +00:00
-v|--verbose)
VERBOSE=1
shift
;;
--keep-tmp)
KEEP_TMP=1
shift
;;
2023-09-01 14:18:23 +00:00
*)
REGEXS+=("$1")
shift
;;
2023-08-30 18:08:40 +00:00
esac
done
[ -n "$VERBOSE" ] && set -x
2023-08-30 16:16:19 +00:00
ROOT_TMPDIR="$(mktemp --tmpdir -d isle-tests.XXXXXX)"
if [ -z "$KEEP_TMP" ]; then trap 'rm -rf $ROOT_TMPDIR' EXIT; fi
TMPDIR="$ROOT_TMPDIR"
export ROOT_TMPDIR TMPDIR
echo "tmp dir is $ROOT_TMPDIR"
2023-08-30 16:16:19 +00:00
# Blackhole these directories so that tests don't accidentally use the host's
# real ones.
export XDG_RUNTIME_DIR=/dev/null
export XDG_DATA_HOME=/dev/null
test_files=$(
2023-09-01 16:28:22 +00:00
find ./cases -type f -name '*.sh' \
| sed "s|^\./cases/||" \
| grep -v entrypoint.sh \
| sort
)
2023-08-30 16:16:19 +00:00
2023-09-01 14:18:23 +00:00
for r in "${REGEXS[@]}"; do
2023-09-01 16:28:22 +00:00
test_files="$(echo "$test_files" | grep "$r")"
2023-09-01 14:18:23 +00:00
done
echo -e "number of tests: $(echo "$test_files" | wc -l)\n"
for file in $test_files; do
2023-09-04 18:56:48 +00:00
echo "Running test case: $file"
2023-08-30 18:08:40 +00:00
if [ -z "$VERBOSE" ]; then
output="$TMPDIR/$file.log"
mkdir -p "$(dirname "$output")"
exec 3>"$output"
else
exec 3>&1
fi
2023-08-30 18:08:40 +00:00
2023-09-01 14:18:23 +00:00
(
export TEST_CASE_FILE="$file"
if ! $SHELL -e -x "$root/cases/$file" >&3 2>&1; then
2023-09-01 14:18:23 +00:00
echo "$file FAILED"
if [ -z "$VERBOSE" ]; then
echo "output of test is as follows"
echo "------------------------------"
cat "$output"
echo "------------------------------"
fi
exit 1
fi
2023-09-04 18:56:48 +00:00
) || TESTS_FAILED=1
if [ -n "$TESTS_FAILED" ]; then break; fi
2023-08-30 16:16:19 +00:00
done
2023-09-04 18:56:48 +00:00
# Clean up any shared running clusters. Each cleanup script is responsible for
# figuring out if its shared cluster was actually instantiated during any tests.
if [ -e "$ROOT_TMPDIR/cleanup-pids" ]; then
echo "Cleaning up running pids"
tac "$ROOT_TMPDIR/cleanup-pids" | while read -r line; do
pid="$(echo "$line" | cut -d' ' -f1)"
descr="$(echo "$line" | cut -d' ' -f2-)"
echo "Killing $descr ($pid)"
kill "$pid"
done
# This is easier than checking if the pids are still running, and for some
# reason it doesn't occur until after the pids have died anyway
echo "Waiting for appimage mounts to unmount"
while [ "$(find "$ROOT_TMPDIR" -type d -name '*.mount_isle*' | wc -l)" -ge "1" ]; do
sleep 1
done
fi
2023-09-04 18:56:48 +00:00
if [ -z "$TESTS_FAILED" ]; then echo -e '\nall tests succeeded!'; fi