summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-07-01 18:00:38 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-07-01 19:00:50 -0400
commit6129a076d6e8140fb3ba396945c64961d40aace4 (patch)
treeda29b182f1d78f5cad0bb2e2f6142a3e7d1700be
parent8b3ced5c52f2d062cae5f170503caf9a012c1ae1 (diff)
Ensure tests are marked as not run
If we fail to run tests for any reason, we want to mark them as not run: this patch creates per-test logfiles immediately after parsing the test and marks them as not run, ensuring they're marked correctly no matter what kind of error we get. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--lib/parse-test.sh113
-rwxr-xr-xlib/testrunner90
2 files changed, 117 insertions, 86 deletions
diff --git a/lib/parse-test.sh b/lib/parse-test.sh
index 5d87af8..161d81f 100644
--- a/lib/parse-test.sh
+++ b/lib/parse-test.sh
@@ -166,4 +166,117 @@ parse_test_deps()
echo "test must specify config-timeout"
exit 1
fi
+
+ # may be overridden by test:
+ if [[ $(type -t run_test) != function ]]; then
+ run_test()
+ {
+ local test=test_$1
+
+ if [[ $(type -t $test) != function ]]; then
+ echo "test $1 does not exist"
+ exit 1
+ fi
+
+ $test
+ }
+ fi
+
+ # may be overridden by test:
+ if [[ $(type -t run_tests) != function ]]; then
+ run_tests()
+ {
+ local tests_passed=()
+ local tests_failed=()
+
+ echo
+ echo "Running tests $@"
+ echo
+
+ for i in $@; do
+ echo "========= TEST $i"
+ echo
+
+ local start=$(date '+%s')
+ local ret=0
+ (set -e; run_test $i)
+ ret=$?
+ local finish=$(date '+%s')
+
+ pkill -P $$ >/dev/null
+
+ # XXX: check dmesg for warnings, oopses, slab corruption, etc. before
+ # signaling success
+
+ echo
+
+ if [[ $ret = 0 ]]; then
+ echo "========= PASSED $i in $(($finish - $start))s"
+ tests_passed+=($i)
+ else
+ echo "========= FAILED $i in $(($finish - $start))s"
+ tests_failed+=($i)
+
+ # Try to clean up after a failed test so we can run the rest of
+ # the tests - unless failfast is enabled, or there was only one
+ # test to run:
+
+ [[ $ktest_failfast = 1 ]] && break
+ [[ $# = 1 ]] && break
+
+ for mnt in $(awk '{print $2}' /proc/mounts|grep ^/mnt|sort -r); do
+ while [[ -n $(fuser -k -M -m $mnt) ]]; do
+ sleep 1
+ done
+ umount $mnt
+ done
+ fi
+ done
+
+ echo
+ echo "Passed: ${tests_passed[@]}"
+ echo "Failed: ${tests_failed[@]}"
+
+ return ${#tests_failed[@]}
+ }
+ fi
+
+ # may be overridden by test:
+ if [[ $(type -t list_tests) != function ]]; then
+ list_tests()
+ {
+ declare -F|sed -ne '/ test_/ s/.*test_// p'
+ }
+ fi
+
+ ktest_tests=$(list_tests)
+
+ if [[ -z $ktest_tests ]]; then
+ echo "No tests found"
+ echo "TEST FAILED"
+ exit 1
+ fi
+
+ local t
+
+ # Ensure specified tests exist:
+ if [[ -n $ktest_testargs ]]; then
+ for t in $ktest_testargs; do
+ if ! echo "$ktest_tests"|grep -wq "$t"; then
+ echo "Test $t not found"
+ exit 1
+ fi
+ done
+
+ ktest_tests="$ktest_testargs"
+ fi
+
+ # Mark tests not run:
+ local testname=$(basename -s .ktest "$ktest_test")
+ mkdir -p $ktest_out/out
+ for t in $ktest_tests; do
+ t=$(echo "$t"|tr / .)
+
+ echo "========= NOTRUN $t" > $ktest_out/out/$testname.$t
+ done
}
diff --git a/lib/testrunner b/lib/testrunner
index 6a19462..ce30ec6 100755
--- a/lib/testrunner
+++ b/lib/testrunner
@@ -153,97 +153,15 @@ done
echo -n "Kernel version: "
uname -r
-if [[ $(type -t list_tests) == function ]]; then
- tests=$(list_tests)
-else
- tests=$(declare -F|sed -ne '/ test_/ s/.*test_// p')
-fi
-
-# may be overridden by test:
-if [[ $(type -t run_test) != function ]]; then
- run_test()
- {
- local test=test_$1
-
- if [[ $(type -t $test) != function ]]; then
- echo "test $1 does not exist"
- exit 1
- fi
-
- $test
- }
-fi
-
-# may be overridden by test:
-if [[ $(type -t run_tests) != function ]]; then
- run_tests()
- {
- local tests_passed=()
- local tests_failed=()
-
- echo
- echo "Running tests $@"
- echo
-
- for i in $@; do
- echo "========= TEST $i"
- echo
-
- local start=$(date '+%s')
- local ret=0
- (set -e; run_test $i)
- ret=$?
- local finish=$(date '+%s')
-
- pkill -P $$ >/dev/null
-
- # XXX: check dmesg for warnings, oopses, slab corruption, etc. before
- # signaling success
-
- echo
-
- if [[ $ret = 0 ]]; then
- echo "========= PASSED $i in $(($finish - $start))s"
- tests_passed+=($i)
- else
- echo "========= FAILED $i in $(($finish - $start))s"
- tests_failed+=($i)
-
- # Try to clean up after a failed test so we can run the rest of
- # the tests - unless failfast is enabled, or there was only one
- # test to run:
-
- [[ $ktest_failfast = 1 ]] && break
- [[ $# = 1 ]] && break
-
- for mnt in $(awk '{print $2}' /proc/mounts|grep ^/mnt|sort -r); do
- while [[ -n $(fuser -k -M -m $mnt) ]]; do
- sleep 1
- done
- umount $mnt
- done
- fi
- done
-
- echo
- echo "Passed: ${tests_passed[@]}"
- echo "Failed: ${tests_failed[@]}"
-
- return ${#tests_failed[@]}
- }
-fi
-
-if [[ -z $tests ]]; then
+if [[ -z $ktest_tests ]]; then
echo "No tests found"
echo "TEST FAILED"
exit 1
fi
-[[ -n $ktest_testargs ]] && tests="$ktest_testargs"
-
-tests=$(echo $tests)
+ktest_tests=$(echo $ktest_tests)
-if [[ $tests = "none" ]]; then
+if [[ $ktest_tests = "none" ]]; then
echo "No tests to run"
echo "TEST FAILED"
exit 0
@@ -271,7 +189,7 @@ set +e
ret=0
iterations=0
while [[ $ret = 0 ]]; do
- run_tests $tests
+ run_tests $ktest_tests
ret=$?
pkill -P $$ >/dev/null || true
[[ $ret != 0 ]] && break