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


Reply via email to