]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rtla: Set distinctive exit value for failed tests
authorCosta Shulyupin <costa.shul@redhat.com>
Thu, 17 Apr 2025 18:56:16 +0000 (21:56 +0300)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 7 May 2025 19:36:19 +0000 (15:36 -0400)
A test is considered failed when a sample trace exceeds the threshold.
Failed tests return the same exit code as passed tests, requiring test
frameworks to determine the result by searching for "hit stop tracing"
in the output.

Assign a distinct exit code for failed tests to enable the use of shell
expressions and seamless integration with testing frameworks without the
need to parse output.

Add enum type for return value.

Update `make check`.

Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: John Kacur <jkacur@redhat.com>
Cc: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
Cc: Eder Zulian <ezulian@redhat.com>
Cc: Dan Carpenter <dan.carpenter@linaro.org>
Cc: Jan Stancek <jstancek@redhat.com>
Link: https://lore.kernel.org/20250417185757.2194541-1-costa.shul@redhat.com
Signed-off-by: Costa Shulyupin <costa.shul@redhat.com>
Reviewed-by: Tomas Glozar <tglozar@redhat.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
tools/tracing/rtla/src/osnoise_hist.c
tools/tracing/rtla/src/osnoise_top.c
tools/tracing/rtla/src/timerlat_hist.c
tools/tracing/rtla/src/timerlat_top.c
tools/tracing/rtla/src/utils.h
tools/tracing/rtla/tests/engine.sh
tools/tracing/rtla/tests/hwnoise.t
tools/tracing/rtla/tests/osnoise.t
tools/tracing/rtla/tests/timerlat.t

index d9d15c8f27c71cfb60eb01f7f1dcdd876c51e89a..8d579bcee709073829ae6cfd3084c4095bec1aa2 100644 (file)
@@ -766,8 +766,8 @@ int osnoise_hist_main(int argc, char *argv[])
        struct osnoise_params *params;
        struct osnoise_tool *record = NULL;
        struct osnoise_tool *tool = NULL;
+       enum result return_value = ERROR;
        struct trace_instance *trace;
-       int return_value = 1;
        int retval;
 
        params = osnoise_hist_parse_args(argc, argv);
@@ -889,12 +889,13 @@ int osnoise_hist_main(int argc, char *argv[])
 
        osnoise_print_stats(params, tool);
 
-       return_value = 0;
+       return_value = PASSED;
 
        if (osnoise_trace_is_off(tool, record)) {
                printf("rtla osnoise hit stop tracing\n");
                save_trace_to_file(record ? record->trace.inst : NULL,
                                   params->trace_output);
+               return_value = FAILED;
        }
 
 out_hist:
index 3455ee73e2e69d6d3a0bf587858d50c23e692d0f..2c12780c8aa92dfbc6128b90586ff707607382d2 100644 (file)
@@ -594,8 +594,8 @@ int osnoise_top_main(int argc, char **argv)
        struct osnoise_params *params;
        struct osnoise_tool *record = NULL;
        struct osnoise_tool *tool = NULL;
+       enum result return_value = ERROR;
        struct trace_instance *trace;
-       int return_value = 1;
        int retval;
 
        params = osnoise_top_parse_args(argc, argv);
@@ -715,12 +715,13 @@ int osnoise_top_main(int argc, char **argv)
 
        osnoise_print_stats(params, tool);
 
-       return_value = 0;
+       return_value = PASSED;
 
        if (osnoise_trace_is_off(tool, record)) {
                printf("osnoise hit stop tracing\n");
                save_trace_to_file(record ? record->trace.inst : NULL,
                                   params->trace_output);
+               return_value = FAILED;
        }
 
 out_top:
index 9d9efeedc4c2cff8e1991a4d2d11861f96a12088..36d2294c963d14d1b7168696b35e1f03321bb43d 100644 (file)
@@ -1141,11 +1141,11 @@ int timerlat_hist_main(int argc, char *argv[])
        struct timerlat_params *params;
        struct osnoise_tool *record = NULL;
        struct timerlat_u_params params_u;
+       enum result return_value = ERROR;
        struct osnoise_tool *tool = NULL;
        struct osnoise_tool *aa = NULL;
        struct trace_instance *trace;
        int dma_latency_fd = -1;
-       int return_value = 1;
        pthread_t timerlat_u;
        int retval;
        int nr_cpus, i;
@@ -1378,7 +1378,7 @@ int timerlat_hist_main(int argc, char *argv[])
 
        timerlat_print_stats(params, tool);
 
-       return_value = 0;
+       return_value = PASSED;
 
        if (osnoise_trace_is_off(tool, record) && !stop_tracing) {
                printf("rtla timerlat hit stop tracing\n");
@@ -1388,6 +1388,7 @@ int timerlat_hist_main(int argc, char *argv[])
 
                save_trace_to_file(record ? record->trace.inst : NULL,
                                   params->trace_output);
+               return_value = FAILED;
        }
 
 out_hist:
index 79cb6f28967fc1eac377426f4c2b440b0781fd86..7365e08fe9866596a6492390132818938b57d1dd 100644 (file)
@@ -985,12 +985,12 @@ int timerlat_top_main(int argc, char *argv[])
        struct timerlat_params *params;
        struct osnoise_tool *record = NULL;
        struct timerlat_u_params params_u;
+       enum result return_value = ERROR;
        struct osnoise_tool *top = NULL;
        struct osnoise_tool *aa = NULL;
        struct trace_instance *trace;
        int dma_latency_fd = -1;
        pthread_t timerlat_u;
-       int return_value = 1;
        char *max_lat;
        int retval;
        int nr_cpus, i;
@@ -1197,7 +1197,7 @@ int timerlat_top_main(int argc, char *argv[])
 
        timerlat_print_stats(params, top);
 
-       return_value = 0;
+       return_value = PASSED;
 
        if (osnoise_trace_is_off(top, record) && !stop_tracing) {
                printf("rtla timerlat hit stop tracing\n");
@@ -1207,6 +1207,7 @@ int timerlat_top_main(int argc, char *argv[])
 
                save_trace_to_file(record ? record->trace.inst : NULL,
                                   params->trace_output);
+               return_value = FAILED;
        } else if (params->aa_only) {
                /*
                 * If the trace did not stop with --aa-only, at least print the
index 101d4799a009038ee44ccca58d28cc3c2562c26f..a2a6f89f342d09d0c5fcad9d09ea485375f5d5c2 100644 (file)
@@ -83,3 +83,9 @@ int auto_house_keeping(cpu_set_t *monitored_cpus);
 
 #define ns_to_usf(x) (((double)x/1000))
 #define ns_to_per(total, part) ((part * 100) / (double)total)
+
+enum result {
+       PASSED = 0, /* same as EXIT_SUCCESS */
+       ERROR = 1,  /* same as EXIT_FAILURE, an error in arguments */
+       FAILED = 2, /* test hit the stop tracing condition */
+};
index b1697b3e3f52834dc97a431c8ba362229aadf3e6..f2616a8e4179e40571fe99865cb921c3ee180b28 100644 (file)
@@ -39,6 +39,7 @@ reset_osnoise() {
 }
 
 check() {
+       expected_exitcode=${3:-0}
        # 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))
@@ -49,7 +50,7 @@ check() {
                # Run rtla; in case of failure, include its output as comment
                # in the test results.
                result=$(stdbuf -oL $TIMEOUT "$RTLA" $2 2>&1); exitcode=$?
-               if [ $exitcode -eq 0 ]
+               if [ $exitcode -eq $expected_exitcode ]
                then
                        echo "ok $ctr - $1"
                else
@@ -68,12 +69,14 @@ check_with_osnoise_options() {
        # Save original arguments
        arg1=$1
        arg2=$2
+       arg3=$3
 
        # Apply osnoise options (if not dry run)
        if [ -n "$TEST_COUNT" ]
        then
                [ "$NO_RESET_OSNOISE" == 1 ] || reset_osnoise
                shift
+               shift
                while shift
                do
                        [ "$1" == "" ] && continue
@@ -84,7 +87,7 @@ check_with_osnoise_options() {
                done
        fi
 
-       NO_RESET_OSNOISE=1 check "$arg1" "$arg2"
+       NO_RESET_OSNOISE=1 check "$arg1" "$arg2" "$arg3"
 }
 
 set_timeout() {
index bbed175805374565703291462090ace940f4dd29..5f71401a139e6855aacc40b51cd67cdd69c47762 100644 (file)
@@ -10,11 +10,11 @@ check "verify help page" \
 check "detect noise higher than one microsecond" \
        "hwnoise -c 0 -T 1 -d 5s -q"
 check "set the automatic trace mode" \
-       "hwnoise -a 5 -d 30s"
+       "hwnoise -a 5 -d 30s" 2
 check "set scheduling param to the osnoise tracer threads" \
        "hwnoise -P F:1 -c 0 -r 900000 -d 1M -q"
 check "stop the trace if a single sample is higher than 1 us" \
-       "hwnoise -s 1 -T 1 -t -d 30s"
+       "hwnoise -s 1 -T 1 -t -d 30s" 2
 check "enable a trace event trigger" \
        "hwnoise -t -e osnoise:irq_noise trigger=\"hist:key=desc,duration:sort=desc,duration:vals=hitcount\" -d 1m"
 
index e5995c03c790f76d1f360cab4f2564d079790549..44908fc01abfd80502219b578dbbd497248e7673 100644 (file)
@@ -10,9 +10,9 @@ check "verify help page" \
 check "verify the --priority/-P param" \
        "osnoise top -P F:1 -c 0 -r 900000 -d 1M -q"
 check "verify the --stop/-s param" \
-       "osnoise top -s 30 -T 1 -t"
+       "osnoise top -s 30 -T 1 -t" 2
 check "verify the  --trace param" \
-       "osnoise hist -s 30 -T 1 -t"
+       "osnoise hist -s 30 -T 1 -t" 2
 check "verify the --entries/-E param" \
        "osnoise hist -P F:1 -c 0 -r 900000 -d 1M -b 10 -E 25"
 
@@ -20,6 +20,6 @@ check "verify the --entries/-E param" \
 # and stopping on threshold.
 # If default period is not set, this will time out.
 check_with_osnoise_options "apply default period" \
-       "osnoise hist -s 1" period_us=600000000
+       "osnoise hist -s 1" period_us=600000000
 
 test_end
index e939ff71d6be3299d7e69ee9b497eb92be77ba17..579c12a85e8f3e4c72e90bfe016b33380bf05ad3 100644 (file)
@@ -21,21 +21,21 @@ export RTLA_NO_BPF=$option
 check "verify help page" \
        "timerlat --help"
 check "verify -s/--stack" \
-       "timerlat top -s 3 -T 10 -t"
+       "timerlat top -s 3 -T 10 -t" 2
 check "verify -P/--priority" \
        "timerlat top -P F:1 -c 0 -d 1M -q"
 check "test in nanoseconds" \
-       "timerlat top -i 2 -c 0 -n -d 30s"
+       "timerlat top -i 2 -c 0 -n -d 30s" 2
 check "set the automatic trace mode" \
-       "timerlat top -a 5 --dump-tasks"
+       "timerlat top -a 5 --dump-tasks" 2
 check "print the auto-analysis if hits the stop tracing condition" \
-       "timerlat top --aa-only 5"
+       "timerlat top --aa-only 5" 2
 check "disable auto-analysis" \
-       "timerlat top -s 3 -T 10 -t --no-aa"
+       "timerlat top -s 3 -T 10 -t --no-aa" 2
 check "verify -c/--cpus" \
        "timerlat hist -c 0 -d 30s"
 check "hist test in nanoseconds" \
-       "timerlat hist -i 2 -c 0 -n -d 30s"
+       "timerlat hist -i 2 -c 0 -n -d 30s" 2
 done
 
 test_end