linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Ingo Molnar <mingo@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Michael Petlan <mpetlan@redhat.com>,
	Ian Rogers <irogers@google.com>,
	Stephane Eranian <eranian@google.com>,
	Alexei Budankov <abudankov@huawei.com>
Subject: [PATCH 18/22] perf test: Add daemon list command test
Date: Sat,  2 Jan 2021 23:04:37 +0100	[thread overview]
Message-ID: <20210102220441.794923-19-jolsa@kernel.org> (raw)
In-Reply-To: <20210102220441.794923-1-jolsa@kernel.org>

Adding test for basic perf daemon listing via the CSV
output mode (-x option).

Checking that configured sessions display expected values.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/tests/shell/daemon.sh | 184 +++++++++++++++++++++++++++++++
 1 file changed, 184 insertions(+)
 create mode 100755 tools/perf/tests/shell/daemon.sh

diff --git a/tools/perf/tests/shell/daemon.sh b/tools/perf/tests/shell/daemon.sh
new file mode 100755
index 000000000000..52abd2f015ed
--- /dev/null
+++ b/tools/perf/tests/shell/daemon.sh
@@ -0,0 +1,184 @@
+#!/bin/sh
+# daemon operations
+# SPDX-License-Identifier: GPL-2.0
+
+check_line_first()
+{
+	local line=$1
+	local name=$2
+	local base=$3
+	local output=$4
+	local lock=$5
+	local up=$6
+
+	local line_name=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $2 }'`
+	local line_base=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $3 }'`
+	local line_output=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $4 }'`
+	local line_lock=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $5 }'`
+	local line_up=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $6 }'`
+
+	if [ "${name}" != "${line_name}" ]; then
+		echo "FAILED: wrong name"
+		error=1
+	fi
+
+	if [ "${base}" != "${line_base}" ]; then
+		echo "FAILED: wrong base"
+		error=1
+	fi
+
+	if [ "${output}" != "${line_output}" ]; then
+		echo "FAILED: wrong output"
+		error=1
+	fi
+
+	if [ "${lock}" != "${line_lock}" ]; then
+		echo "FAILED: wrong lock"
+		error=1
+	fi
+
+	if [ "${up}" != "${line_up}" ]; then
+		echo "FAILED: wrong up"
+		error=1
+	fi
+}
+
+check_line_other()
+{
+	local line=$1
+	local name=$2
+	local run=$3
+	local base=$4
+	local output=$5
+	local control=$6
+	local ack=$7
+	local up=$8
+
+	local line_name=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $2 }'`
+	local line_run=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $3 }'`
+	local line_base=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $4 }'`
+	local line_output=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $5 }'`
+	local line_control=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $6 }'`
+	local line_ack=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $7 }'`
+	local line_up=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $8 }'`
+
+	if [ "${name}" != "${line_name}" ]; then
+		echo "FAILED: wrong name"
+		error=1
+	fi
+
+	if [ "${run}" != "${line_run}" ]; then
+		echo "FAILED: wrong run"
+		error=1
+	fi
+
+	if [ "${base}" != "${line_base}" ]; then
+		echo "FAILED: wrong base"
+		error=1
+	fi
+
+	if [ "${output}" != "${line_output}" ]; then
+		echo "FAILED: wrong output"
+		error=1
+	fi
+
+	if [ "${control}" != "${line_control}" ]; then
+		echo "FAILED: wrong control"
+		error=1
+	fi
+
+	if [ "${ack}" != "${line_ack}" ]; then
+		echo "FAILED: wrong ack"
+		error=1
+	fi
+
+	if [ "${up}" != "${line_up}" ]; then
+		echo "FAILED: wrong up"
+		error=1
+	fi
+}
+
+daemon_start()
+{
+	local config=$1
+	local session=$2
+
+	perf daemon start --config ${config}
+
+	# wait for the session to ping
+	local state="FAIL"
+	while [ "${state}" != "OK" ]; do
+		state=`perf daemon ping --config ${config} --session ${session} | awk '{ print $1 }'`
+		sleep 0.05
+	done
+}
+
+daemon_exit()
+{
+	local base=$1
+	local config=$2
+
+	local line=`perf daemon --config ${config} -x | head -1`
+	local pid=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $1 }'`
+
+	# stop daemon
+	perf daemon stop --config ${config}
+
+	# ... and wait for the pid to go away
+	tail --pid=${pid} -f /dev/null
+}
+
+test_list()
+{
+	echo "test daemon list"
+
+	local config=$(mktemp /tmp/perf.daemon.config.XXX)
+	local base=$(mktemp -d /tmp/perf.daemon.base.XXX)
+
+	cat <<EOF > ${config}
+[daemon]
+base=BASE
+
+[session-size]
+run = -e cpu-clock
+
+[session-time]
+run = -e task-clock
+EOF
+
+	sed -i -e "s|BASE|${base}|" ${config}
+
+	# start daemon
+	daemon_start ${config} size
+
+	# check first line
+	# pid:daemon:base:base/output:base/lock
+	local line=`perf daemon --config ${config} -x | head -1`
+	check_line_first ${line} daemon ${base} ${base}/output ${base}/lock "0"
+
+	# check 1st session
+	# pid:size:-e cpu-clock:base/size:base/size/output:base/size/control:base/size/ack:0
+	local line=`perf daemon --config ${config} -x | head -2 | tail -1`
+	check_line_other "${line}" size "-e cpu-clock" ${base}/session-size \
+			 ${base}/session-size/output ${base}/session-size/control \
+			 ${base}/session-size/ack "0"
+
+	# check 2nd session
+	# pid:time:-e task-clock:base/time:base/time/output:base/time/control:base/time/ack:0
+	local line=`perf daemon --config ${config} -x | head -3 | tail -1`
+	check_line_other "${line}" time "-e task-clock" ${base}/session-time \
+			 ${base}/session-time/output ${base}/session-time/control \
+			 ${base}/session-time/ack "0"
+
+	# stop daemon
+	daemon_exit ${base} ${config}
+
+	rm -rf ${base}
+	rm -f ${config}
+}
+
+error=0
+
+test_list
+
+exit ${error}
-- 
2.26.2


  parent reply	other threads:[~2021-01-02 22:06 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-02 22:04 [PATCHv2 00/22] perf tools: Add daemon command Jiri Olsa
2021-01-02 22:04 ` [PATCH 01/22] perf tools: Make perf_config_from_file static Jiri Olsa
2021-01-18 15:51   ` Arnaldo Carvalho de Melo
2021-01-02 22:04 ` [PATCH 02/22] perf tools: Add config set interface Jiri Olsa
2021-01-18 15:53   ` Arnaldo Carvalho de Melo
2021-01-02 22:04 ` [PATCH 03/22] perf tools: Add debug_set_display_time function Jiri Olsa
2021-01-18 16:02   ` Arnaldo Carvalho de Melo
2021-01-19 14:59   ` Arnaldo Carvalho de Melo
2021-01-19 17:39     ` Jiri Olsa
2021-01-19 19:42       ` Arnaldo Carvalho de Melo
2021-01-02 22:04 ` [PATCH 04/22] perf tools: Add perf_home_perfconfig function Jiri Olsa
2021-01-18 16:05   ` Arnaldo Carvalho de Melo
2021-01-02 22:04 ` [PATCH 05/22] perf tools: Make perf_config_system global Jiri Olsa
2021-01-18 16:03   ` Arnaldo Carvalho de Melo
2021-01-02 22:04 ` [PATCH 06/22] perf tools: Make perf_config_global gobal Jiri Olsa
2021-01-18 16:05   ` Arnaldo Carvalho de Melo
2021-01-02 22:04 ` [PATCH 07/22] perf daemon: Add daemon command Jiri Olsa
2021-01-19  4:08   ` Namhyung Kim
2021-01-19 18:31     ` Jiri Olsa
2021-01-21  4:53       ` Namhyung Kim
2021-01-27  7:09   ` Namhyung Kim
2021-01-27 22:01     ` Jiri Olsa
2021-01-02 22:04 ` [PATCH 08/22] perf daemon: Add config file change check Jiri Olsa
2021-01-19  5:31   ` Namhyung Kim
2021-01-19 17:49     ` Jiri Olsa
2021-01-21  4:54       ` Namhyung Kim
2021-01-02 22:04 ` [PATCH 09/22] perf daemon: Add signalfd support Jiri Olsa
2021-01-02 22:04 ` [PATCH 10/22] perf daemon: Add signal command Jiri Olsa
2021-01-02 22:04 ` [PATCH 11/22] perf daemon: Add stop command Jiri Olsa
2021-01-19  5:35   ` Namhyung Kim
2021-01-02 22:04 ` [PATCH 12/22] perf daemon: Allow only one daemon over base directory Jiri Olsa
2021-01-19  5:37   ` Namhyung Kim
2021-01-19 17:44     ` Jiri Olsa
2021-01-02 22:04 ` [PATCH 13/22] perf daemon: Set control fifo for session Jiri Olsa
2021-01-02 22:04 ` [PATCH 14/22] perf daemon: Add ping command Jiri Olsa
2021-01-02 22:04 ` [PATCH 15/22] perf daemon: Use control to stop session Jiri Olsa
2021-01-02 22:04 ` [PATCH 16/22] perf daemon: Add up time for daemon/session list Jiri Olsa
2021-01-02 22:04 ` [PATCH 17/22] perf daemon: Add man page for perf-daemon Jiri Olsa
2021-01-02 22:04 ` Jiri Olsa [this message]
2021-01-02 22:04 ` [PATCH 19/22] perf test: Add daemon reconfig test Jiri Olsa
2021-01-02 22:04 ` [PATCH 20/22] perf test: Add daemon stop command test Jiri Olsa
2021-01-02 22:04 ` [PATCH 21/22] perf test: Add daemon signal " Jiri Olsa
2021-01-02 22:04 ` [PATCH 22/22] perf test: Add daemon ping " Jiri Olsa
2021-01-18 12:55 ` [PATCHv2 00/22] perf tools: Add daemon command Jiri Olsa

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=20210102220441.794923-19-jolsa@kernel.org \
    --to=jolsa@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=abudankov@huawei.com \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=eranian@google.com \
    --cc=irogers@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@kernel.org \
    --cc=mpetlan@redhat.com \
    --cc=namhyung@kernel.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).