diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-07-01 18:00:38 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-07-01 19:00:50 -0400 |
commit | 6129a076d6e8140fb3ba396945c64961d40aace4 (patch) | |
tree | da29b182f1d78f5cad0bb2e2f6142a3e7d1700be | |
parent | 8b3ced5c52f2d062cae5f170503caf9a012c1ae1 (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.sh | 113 | ||||
-rwxr-xr-x | lib/testrunner | 90 |
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 |