lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAP-5=fVJyx71LwbNRZqMp3qg=uufVLiaZ+q4-JzAoaE3HcJmUg@mail.gmail.com>
Date:   Thu, 10 Aug 2023 13:01:20 -0700
From:   Ian Rogers <irogers@...gle.com>
To:     Anup Sharma <anupnewsmail@...il.com>
Cc:     Peter Zijlstra <peterz@...radead.org>,
        Ingo Molnar <mingo@...hat.com>,
        Arnaldo Carvalho de Melo <acme@...nel.org>,
        Mark Rutland <mark.rutland@....com>,
        Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
        Jiri Olsa <jolsa@...nel.org>,
        Namhyung Kim <namhyung@...nel.org>,
        Adrian Hunter <adrian.hunter@...el.com>,
        linux-perf-users@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] perf test: Add support for testing gecko script

On Wed, Aug 9, 2023 at 12:26 PM Anup Sharma <anupnewsmail@...il.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@...il.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
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,
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
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ