linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ian Rogers <irogers@google.com>
To: Anup Sharma <anupnewsmail@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH V2] perf test: Add support for testing gecko script
Date: Tue, 15 Aug 2023 02:05:02 -0700	[thread overview]
Message-ID: <CAP-5=fWGb=h0NuU5tTTUVsgn-ScqZKqdTLHi5XuoL1jnPyyxpg@mail.gmail.com> (raw)
In-Reply-To: <ZNf9zM1mYAqCYqnf@yoga>

On Sat, Aug 12, 2023 at 2:47 PM Anup Sharma <anupnewsmail@gmail.com> wrote:
>
> On Sat, Aug 12, 2023 at 12:46:00PM +0530, Anup Sharma 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>
> >
> > ---
> > Patch needed for testing:
> >     https://lore.kernel.org/linux-perf-users/ZNOS0vo58DnVLpD8@yoga/T/#u
>
> To run this script:
> ./test_gecko.sh
> or
> bash test_gecko.sh
>
> Expected output:
>
> Testing Gecko Command
> Staring Firefox Profiler on your default browser...
> Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
> 127.0.0.1 - - [13/Aug/2023 03:07:35] "GET /gecko_profile.json HTTP/1.1" 200 -
> [ perf gecko: Captured and wrote into gecko_profile.json ]
> PASS: "Gecko Command"
> PASS: "The file contains valid JSON format"
> PASS: "test_meta"
> PASS: "test_threads"
> PASS: "test_samples"
> PASS: "test_frametable"
> PASS: "test_stacktable"
> PASS: "test_stringtable"
> PASS: "test_pauseranges"

Hi Anup,

this works for me but when I run as root (using sudo) I need to set
PERF_EXEC_PATH. Running as a user it launches firefox profiler which I
don't think it should.

Thanks,
Ian

> > changes in v2:
> >     - Removed uncessary prepare_perf_data.
> >     - provided patch which is required for testing this patch.
> > ---
> >  tools/perf/tests/shell/test_gecko.sh | 130 +++++++++++++++++++++++++++
> >  1 file changed, 130 insertions(+)
> >  create mode 100755 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 100755
> > index 000000000000..44160eff87fd
> > --- /dev/null
> > +++ b/tools/perf/tests/shell/test_gecko.sh
> > @@ -0,0 +1,130 @@
> > +#!/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]}"
> > +}
> > +
> > +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
> >

  reply	other threads:[~2023-08-15  9:05 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-12  7:16 [PATCH V2] perf test: Add support for testing gecko script Anup Sharma
2023-08-12 21:46 ` Anup Sharma
2023-08-15  9:05   ` Ian Rogers [this message]
2023-08-16 16:47     ` Anup Sharma

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAP-5=fWGb=h0NuU5tTTUVsgn-ScqZKqdTLHi5XuoL1jnPyyxpg@mail.gmail.com' \
    --to=irogers@google.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=anupnewsmail@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).