Blame test/runtests.sh

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