Files
linux/tools/perf/tests/shell/test_bpf_metadata.sh
Thomas Richter 744175e972 perf test: Checking BPF metadata collection fails on version string
commit edf2cadf01 ("perf test: add test for BPF metadata collection")

fails consistently on the version string check. The perf version
string on some of the constant integration test machines contains
characters with special meaning in grep's extended regular expression
matching algorithm. The output of perf version is:

 # perf version
 perf version 6.17.0-20250814.rc1.git20.24ea63ea3877.63.fc42.s390x+git
 #

and the '+' character has special meaning in egrep command.
Also the use of egrep is deprecated.

Change the perf version string check to fixed character matching
and get rid of egrep's warning being deprecated. Use grep -F instead.

Output before:
 # perf test -F 102
 Checking BPF metadata collection
 egrep: warning: egrep is obsolescent; using grep -E
 Basic BPF metadata test [Failed invalid output]
 102: BPF metadata collection test             : FAILED!
 #

Output after:
 # perf test -F 102
 Checking BPF metadata collection
 Basic BPF metadata test [Success]
 102: BPF metadata collection test             : Ok
 #

Fixes: edf2cadf01 ("perf test: add test for BPF metadata collection")
Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Reviewed-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Acked-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
Cc: Blake Jones <blakejones@google.com>
Link: https://lore.kernel.org/r/20250822122540.4104658-1-tmricht@linux.ibm.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
2025-09-04 16:37:19 -07:00

77 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# BPF metadata collection test
#
# SPDX-License-Identifier: GPL-2.0
set -e
err=0
perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
cleanup() {
rm -f "${perfdata}"
rm -f "${perfdata}".old
trap - EXIT TERM INT
}
trap_cleanup() {
cleanup
exit 1
}
trap trap_cleanup EXIT TERM INT
test_bpf_metadata() {
echo "Checking BPF metadata collection"
if ! perf check -q feature libbpf-strings ; then
echo "Basic BPF metadata test [skipping - not supported]"
err=0
return
fi
# This is a basic invocation of perf record
# that invokes the perf_sample_filter BPF program.
if ! perf record -e task-clock --filter 'ip > 0' \
-o "${perfdata}" sleep 1 2> /dev/null
then
echo "Basic BPF metadata test [Failed record]"
err=1
return
fi
# The BPF programs that ship with "perf" all have the following
# variable defined at compile time:
#
# const char bpf_metadata_perf_version[] SEC(".rodata") = <...>;
#
# This invocation looks for a PERF_RECORD_BPF_METADATA event,
# and checks that its content contains the string given by
# "perf version".
VERS=$(perf version | awk '{print $NF}')
if ! perf script --show-bpf-events -i "${perfdata}" | awk '
/PERF_RECORD_BPF_METADATA.*perf_sample_filter/ {
header = 1;
}
/^ *entry/ {
if (header) { header = 0; entry = 1; }
}
$0 !~ /^ *entry/ {
entry = 0;
}
/perf_version/ {
if (entry) print $NF;
}
' | grep -qF "$VERS"
then
echo "Basic BPF metadata test [Failed invalid output]"
err=1
return
fi
echo "Basic BPF metadata test [Success]"
}
test_bpf_metadata
cleanup
exit $err