On Tue, Jun 13, 2023 at 10:04 AM Athira Rajeev <atraj...@linux.vnet.ibm.com> wrote: > > From: Aditya Gupta <adit...@linux.ibm.com> > > Test "perf script task-analyzer tests" fails in environment with missing > libtraceevent support, as perf record fails to create the perf.data > file, which further tests depend on. > > Instead, when perf is not compiled with libtraceevent support, skip those > tests instead of failing them, by checking the output of `perf > record --dry-run` to see if it prints the error "libtraceevent is > necessary for tracepoint support" > > For the following output, perf compiled with: `make NO_LIBTRACEEVENT=1` > > Before the patch: > > 108: perf script task-analyzer tests : > test child forked, pid 24105 > failed to open perf.data: No such file or directory (try 'perf record' first) > FAIL: "invokation of perf script report task-analyzer command failed" Error > message: "" > FAIL: "test_basic" Error message: "Failed to find required string:'Comm'." > failed to open perf.data: No such file or directory (try 'perf record' first) > FAIL: "invokation of perf script report task-analyzer --ns > --rename-comms-by-tids 0:random command failed" Error message: "" > FAIL: "test_ns_rename" Error message: "Failed to find required string:'Comm'." > failed to open perf.data: No such file or directory (try 'perf record' first) > <...> > perf script task-analyzer tests: FAILED! > > With this patch, the script instead returns 2 signifying SKIP, and after > the patch: > > 108: perf script task-analyzer tests : > test child forked, pid 26010 > libtraceevent is necessary for tracepoint support > WARN: Skipping tests. No libtraceevent support > test child finished with -2 > perf script task-analyzer tests: Skip > > Fixes: e8478b84d6ba ("perf test: add new task-analyzer tests") > Signed-off-by: Athira Rajeev <atraj...@linux.vnet.ibm.com> > Signed-off-by: Kajol Jain <kj...@linux.ibm.com> > Signed-off-by: Aditya Gupta <adit...@linux.ibm.com> > --- > tools/perf/tests/shell/test_task_analyzer.sh | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/tools/perf/tests/shell/test_task_analyzer.sh > b/tools/perf/tests/shell/test_task_analyzer.sh > index b094eeb3bf66..59785dfc11f8 100755 > --- a/tools/perf/tests/shell/test_task_analyzer.sh > +++ b/tools/perf/tests/shell/test_task_analyzer.sh > @@ -44,9 +44,20 @@ find_str_or_fail() { > fi > } > > +# check if perf is compiled with libtraceevent support > +skip_no_probe_record_support() { > + perf record -e "sched:sched_switch" -a -- sleep 1 2>&1 | grep > "libtraceevent is necessary for tracepoint support" && return 2
Fwiw, another way to detect build options used in other shell tests is: perf version --build-options | grep HAVE_LIBTRACEEVENT | grep -q OFF && return 2 Thanks, Ian > + return 0 > +} > + > prepare_perf_data() { > # 1s should be sufficient to catch at least some switches > perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1 > + # check if perf data file got created in above step. > + if [ ! -e "perf.data" ]; then > + printf "FAIL: perf record failed to create \"perf.data\" \n" > + return 1 > + fi > } > > # check standard inkvokation with no arguments > @@ -134,6 +145,13 @@ test_csvsummary_extended() { > find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}" > } > > +skip_no_probe_record_support > +err=$? > +if [ $err -ne 0 ]; then > + echo "WARN: Skipping tests. No libtraceevent support" > + cleanup > + exit $err > +fi > prepare_perf_data > test_basic > test_ns_rename > -- > 2.39.1 >