|
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
|