Blame test/runtests.sh

Packit Service 63ea89
#!/bin/bash
Packit Service 63ea89
Packit Service 63ea89
TESTS="$@"
Packit Service 63ea89
RET=0
Packit Service 63ea89
Packit Service 63ea89
TIMEOUT=60
Packit Service 63ea89
FAILED=""
Packit Service 63ea89
MAYBE_FAILED=""
Packit Service 63ea89
Packit Service 63ea89
do_kmsg="1"
Packit Service 63ea89
if ! [ $(id -u) = 0 ]; then
Packit Service 63ea89
	do_kmsg="0"
Packit Service 63ea89
fi
Packit Service 63ea89
Packit Service 63ea89
TEST_DIR=$(dirname $0)
Packit Service 63ea89
TEST_FILES=""
Packit Service 63ea89
if [ -f "$TEST_DIR/config.local" ]; then
Packit Service 63ea89
	. $TEST_DIR/config.local
Packit Service 63ea89
	for dev in $TEST_FILES; do
Packit Service 63ea89
		if [ ! -e "$dev" ]; then
Packit Service 63ea89
			echo "Test file $dev not valid"
Packit Service 63ea89
			exit 1
Packit Service 63ea89
		fi
Packit Service 63ea89
	done
Packit Service 63ea89
fi
Packit Service 63ea89
Packit Service 63ea89
_check_dmesg()
Packit Service 63ea89
{
Packit Service 63ea89
	local dmesg_marker="$1"
Packit Service 63ea89
	local seqres="$2.seqres"
Packit Service 63ea89
Packit Service 63ea89
	if [[ $do_kmsg -eq 0 ]]; then
Packit Service 63ea89
		return 0
Packit Service 63ea89
	fi
Packit Service 63ea89
Packit Service 63ea89
	dmesg | bash -c "$DMESG_FILTER" | grep -A 9999 "$dmesg_marker" >"${seqres}.dmesg"
Packit Service 63ea89
	grep -q -e "kernel BUG at" \
Packit Service 63ea89
	     -e "WARNING:" \
Packit Service 63ea89
	     -e "BUG:" \
Packit Service 63ea89
	     -e "Oops:" \
Packit Service 63ea89
	     -e "possible recursive locking detected" \
Packit Service 63ea89
	     -e "Internal error" \
Packit Service 63ea89
	     -e "INFO: suspicious RCU usage" \
Packit Service 63ea89
	     -e "INFO: possible circular locking dependency detected" \
Packit Service 63ea89
	     -e "general protection fault:" \
Packit Service 63ea89
	     -e "blktests failure" \
Packit Service 63ea89
	     "${seqres}.dmesg"
Packit Service 63ea89
	# shellcheck disable=SC2181
Packit Service 63ea89
	if [[ $? -eq 0 ]]; then
Packit Service 63ea89
		return 1
Packit Service 63ea89
	else
Packit Service 63ea89
		rm -f "${seqres}.dmesg"
Packit Service 63ea89
		return 0
Packit Service 63ea89
	fi
Packit Service 63ea89
}
Packit Service 63ea89
Packit Service 63ea89
run_test()
Packit Service 63ea89
{
Packit Service 63ea89
	T="$1"
Packit Service 63ea89
	D="$2"
Packit Service 63ea89
	DMESG_FILTER="cat"
Packit Service 63ea89
Packit Service 63ea89
	if [ "$do_kmsg" -eq 1 ]; then
Packit Service 63ea89
		if [ -z "$D" ]; then
Packit Service 63ea89
			local dmesg_marker="Running test $T:"
Packit Service 63ea89
		else
Packit Service 63ea89
			local dmesg_marker="Running test $T $D:"
Packit Service 63ea89
		fi
Packit Service 63ea89
		echo $dmesg_marker | tee /dev/kmsg
Packit Service 63ea89
	else
Packit Service 63ea89
		local dmesg_marker=""
Packit Service 63ea89
		echo Running test $T $D
Packit Service 63ea89
	fi
Packit Service 63ea89
	timeout --preserve-status -s INT $TIMEOUT ./$T $D
Packit Service 63ea89
	r=$?
Packit Service 63ea89
	if [ "${r}" -eq 124 ]; then
Packit Service 63ea89
		echo "Test $T timed out (may not be a failure)"
Packit Service 63ea89
	elif [ "${r}" -ne 0 ]; then
Packit Service 63ea89
		echo "Test $T failed with ret ${r}"
Packit Service 63ea89
		if [ -z "$D" ]; then
Packit Service 63ea89
			FAILED="$FAILED <$T>"
Packit Service 63ea89
		else
Packit Service 63ea89
			FAILED="$FAILED <$T $D>"
Packit Service 63ea89
		fi
Packit Service 63ea89
		RET=1
Packit Service 63ea89
	elif ! _check_dmesg "$dmesg_marker" "$T"; then
Packit Service 63ea89
		echo "Test $T failed dmesg check"
Packit Service 63ea89
		if [ -z "$D" ]; then
Packit Service 63ea89
			FAILED="$FAILED <$T>"
Packit Service 63ea89
		else
Packit Service 63ea89
			FAILED="$FAILED <$T $D>"
Packit Service 63ea89
		fi
Packit Service 63ea89
		RET=1
Packit Service 63ea89
	elif [ ! -z "$D" ]; then
Packit Service 63ea89
		sleep .1
Packit Service 63ea89
		ps aux | grep "\[io_wq_manager\]" > /dev/null
Packit Service 63ea89
		R="$?"
Packit Service 63ea89
		if [ "$R" -eq 0 ]; then
Packit Service 63ea89
			MAYBE_FAILED="$MAYBE_FAILED $T"
Packit Service 63ea89
		fi
Packit Service 63ea89
	fi
Packit Service 63ea89
}
Packit Service 63ea89
Packit Service 63ea89
for t in $TESTS; do
Packit Service 63ea89
	run_test $t
Packit Service 63ea89
	if [ ! -z "$TEST_FILES" ]; then
Packit Service 63ea89
		for dev in $TEST_FILES; do
Packit Service 63ea89
			run_test $t $dev
Packit Service 63ea89
		done
Packit Service 63ea89
	fi
Packit Service 63ea89
done
Packit Service 63ea89
Packit Service 63ea89
if [ "${RET}" -ne 0 ]; then
Packit Service 63ea89
	echo "Tests $FAILED failed"
Packit Service 63ea89
	exit $RET
Packit Service 63ea89
else
Packit Service 63ea89
	sleep 1
Packit Service 63ea89
	ps aux | grep "\[io_wq_manager\]" > /dev/null
Packit Service 63ea89
	R="$?"
Packit Service 63ea89
	if [ "$R" -ne 0 ]; then
Packit Service 63ea89
		MAYBE_FAILED=""
Packit Service 63ea89
	fi
Packit Service 63ea89
	if [ ! -z "$MAYBE_FAILED" ]; then
Packit Service 63ea89
		echo "Tests _maybe_ failed: $MAYBE_FAILED"
Packit Service 63ea89
	fi
Packit Service 63ea89
	echo "All tests passed"
Packit Service 63ea89
	exit 0
Packit Service 63ea89
fi