Give the user more control over the test execution when the test scripts are run directly (not through prove), in order to do things like run a particular test repeatedly to diagnose an intermittent failure.
If $SUBTESTS is provided, then only tests whose number is on the list will run. For example: # SUBTESTS="14 133 4 $(seq 98 103) 9" bash ./tests/timerlat.t 1..150 ok 4 - top verify -s/--stack ok 9 - hist set the automatic trace mode ok 14 - top disable auto-analysis ok 98 - hist verify -H/--house-keeping ok 99 - top verify -k/--kernel-threads ok 100 - hist verify -k/--kernel-threads ok 101 - top verify -u/--user-threads ok 102 - hist verify -u/--user-threads ok 103 - apply default timerlat_period_us ok 133 - top trace output through --on-threshold trace If $STOPONFAIL is set, then the script will exit with a non-zero exit code on the first failure. If the output directory is non-empty, it will be preserved, and the location shown. Signed-off-by: Crystal Wood <[email protected]> --- tools/tracing/rtla/tests/engine.sh | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/tools/tracing/rtla/tests/engine.sh b/tools/tracing/rtla/tests/engine.sh index ab4fa0a8ded7..395b472921a7 100644 --- a/tools/tracing/rtla/tests/engine.sh +++ b/tools/tracing/rtla/tests/engine.sh @@ -9,6 +9,12 @@ test_begin() { testdir=$(dirname "$scriptfile") [ -z "$RTLA" ] && RTLA="$(pwd)/rtla" [ -n "$TEST_COUNT" ] && echo "1..$TEST_COUNT" + + # Convert newlines to spaces so that seq can be used + unset subtests + if [ -n "$SUBTESTS" ]; then + subtests=$(echo "$SUBTESTS"|tr '\n' ' ') + fi } reset_osnoise() { @@ -50,8 +56,7 @@ check() { # Simple check: run rtla with given arguments and test exit code. # If TEST_COUNT is set, run the test. Otherwise, just count. ctr=$(($ctr + 1)) - if [ -n "$TEST_COUNT" ] - then + if [[ -n "$TEST_COUNT" && ( -z "$subtests" || " $subtests " == *" $ctr "* ) ]]; then # Reset osnoise options before running test. [ "$NO_RESET_OSNOISE" == 1 ] || reset_osnoise @@ -62,6 +67,7 @@ check() { # Run rtla; in case of failure, include its output as comment # in the test results. result=$(eval stdbuf -oL $TIMEOUT "$RTLA" $2 2>&1); exitcode=$? + popd >/dev/null failbuf='' fail=0 @@ -90,10 +96,18 @@ check() { echo -n "$failbuf" echo "$result" | col -b | while read line; do echo "# $line"; done printf "#\n# exit code %s\n" $exitcode + + if [ -n "$STOPONFAIL" ]; then + # If the directory is not empty, tell the user where + # to find the output + if ! rmdir $tmpdir; then + echo "# output dir: $tmpdir" + fi + exit 1 + fi fi # Remove temporary directory - popd >/dev/null rm -r $tmpdir fi } -- 2.54.0
