Messages in this thread | | | From | Anup Sharma <> | Date | Fri, 11 Aug 2023 20:19:36 +0530 | Subject | Re: [PATCH] perf test: Add support for testing gecko script |
| |
On Thu, Aug 10, 2023 at 01:01:20PM -0700, Ian Rogers wrote: > On Wed, Aug 9, 2023 at 12:26 PM Anup Sharma <anupnewsmail@gmail.com> wrote: > > > > This commit add support for testing gecko script. The test checks > > for the presence of required sections such as "meta," "threads," > > "samples," "frameTable," "stackTable," "stringTable," and > > "pausedRanges" which are few essential parameter to be present > > in output file. Also it verifies the validity of the JSON format > > using Python's JSON library if available. > > > > Signed-off-by: Anup Sharma <anupnewsmail@gmail.com> > > Hi Anup, > > I was trying to test this and grabbing other patches didn't resolve > the issue I see: > ``` > 111: perf script gecko test : > --- start --- > test child forked, pid 2886031 > ./tools/perf/tests/shell/test_gecko.sh: line 120: prepare_perf_data: > command not found
got it, will fix it.
> Testing Gecko Command > Error: Couldn't find script `gecko' > ... > ``` > > It can be useful when sending a patch like this to, under a ---, list > patches necessary for testing.
Thanks will send the v2 after adding the patch list.
> Thanks, > Ian > > > --- > > tools/perf/tests/shell/test_gecko.sh | 131 +++++++++++++++++++++++++++ > > 1 file changed, 131 insertions(+) > > create mode 100644 tools/perf/tests/shell/test_gecko.sh > > > > diff --git a/tools/perf/tests/shell/test_gecko.sh b/tools/perf/tests/shell/test_gecko.sh > > new file mode 100644 > > index 000000000000..457c85474a62 > > --- /dev/null > > +++ b/tools/perf/tests/shell/test_gecko.sh > > @@ -0,0 +1,131 @@ > > +#!/bin/bash > > +# perf script gecko test > > +# SPDX-License-Identifier: GPL-2.0 > > + > > +err=0 > > + > > +cleanup() { > > + rm -rf gecko_profile.json > > + trap - exit term int > > +} > > + > > +trap_cleanup() { > > + cleanup > > + exit 1 > > +} > > +trap trap_cleanup exit term int > > + > > +report() { > > + if [ "$1" = 0 ]; then > > + echo "PASS: \"$2\"" > > + else > > + echo "FAIL: \"$2\" Error message: \"$3\"" > > + err=1 > > + fi > > +} > > + > > +find_str_or_fail() { > > + grep -q "$1" <<< "$2" > > + if [ "$?" != 0 ]; then > > + report 1 "$3" "Failed to find required string:'${1}'." > > + else > > + report 0 "$3" > > + fi > > +} > > + > > +# To validate the json format, check if python is installed > > +if [ "$PYTHON" = "" ] ; then > > + if which python3 > /dev/null ; then > > + PYTHON=python3 > > + elif which python > /dev/null ; then > > + PYTHON=python > > + else > > + echo Skipping JSON format check, python not detected please set environment variable PYTHON. > > + PYTHON_NOT_AVAILABLE=1 > > + fi > > +fi > > + > > +# Check execution of perf script gecko command > > +test_gecko_command() { > > + echo "Testing Gecko Command" > > + perf script gecko -a sleep 0.5 > > + # Store the content of the file in the 'out' variable > > + out=$(< "gecko_profile.json") > > + # Get the length of the gecko_profile.json output in 'out' > > + length=${#out} > > + if [ "$length" -gt 0 ]; then > > + echo "PASS: \"Gecko Command\"" > > + else > > + echo "FAIL: \"Gecko Command\"" > > + err=1 > > + exit > > + fi > > +} > > + > > +# with the help of python json libary validate the json output > > +if [ "$PYTHON_NOT_AVAILABLE" != "0" ]; then > > + validate_json_format() > > + { > > + if [ "$out" ] ; then > > + if [ "$PYTHON -c import json; json.load($out)" ]; then > > + echo "PASS: \"The file contains valid JSON format\"" > > + else > > + echo "FAIL: \"The file does not contain valid JSON format\"" > > + err=1 > > + exit > > + fi > > + else > > + echo "FAIL: \"File not found\"" > > + err=2 > > + exit > > + fi > > + } > > +fi > > + > > +# validate output for the presence of "meta". > > +test_meta() { > > + find_str_or_fail "meta" "$out" "${FUNCNAME[0]}" > > +} > > + > > +# validate output for the presence of "threads". > > +test_threads() { > > + find_str_or_fail "threads" "$out" "${FUNCNAME[0]}" > > +} > > + > > +# validate output for the presence of "samples". > > +test_samples() { > > + find_str_or_fail "samples" "$out" "${FUNCNAME[0]}" > > +} > > + > > +# validate output for the presence of "frameTable". > > +test_frametable() { > > + find_str_or_fail "frameTable" "$out" "${FUNCNAME[0]}" > > +} > > + > > +# validate output for the presence of "stackTable". > > +test_stacktable() { > > + find_str_or_fail "stackTable" "$out" "${FUNCNAME[0]}" > > +} > > + > > +# validate output for the presence of "stringTable" > > +test_stringtable() { > > + find_str_or_fail "stringTable" "$out" "${FUNCNAME[0]}" > > +} > > + > > +# validate output for the presence of "pausedRanges". > > +test_pauseranges(){ > > + find_str_or_fail "pausedRanges" "$out" "${FUNCNAME[0]}" > > +} > > + > > +prepare_perf_data > > +test_gecko_command > > +validate_json_format > > +test_meta > > +test_threads > > +test_samples > > +test_frametable > > +test_stacktable > > +test_stringtable > > +test_pauseranges > > +cleanup > > +exit $err > > -- > > 2.34.1 > >
| |