All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: a.p.zijlstra@chello.nl, mingo@elte.hu, paulus@samba.org,
	cjashfor@linux.vnet.ibm.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/3] perf, tool: Add more automated tests for event parsing
Date: Tue, 20 Dec 2011 15:38:06 -0200	[thread overview]
Message-ID: <20111220173805.GC22107@infradead.org> (raw)
In-Reply-To: <1323963039-7602-4-git-send-email-jolsa@redhat.com>

Em Thu, Dec 15, 2011 at 04:30:39PM +0100, Jiri Olsa escreveu:
> Adding automated tests for event parsing to include testing
> for modifier, ',' operator and group_leader.

Aha! Brownie points hereby granted, good stuff,

- Arnaldo
 
> Signed-off-by: Jiri Olsa <jolsa@redhat.com>
> ---
>  tools/perf/builtin-test.c |  245 ++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 244 insertions(+), 1 deletions(-)
> 
> diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c
> index 6173f78..0cdb4c9 100644
> --- a/tools/perf/builtin-test.c
> +++ b/tools/perf/builtin-test.c
> @@ -603,7 +603,7 @@ out_free_threads:
>  
>  #define TEST_ASSERT_VAL(text, cond) \
>  do { \
> -	if (!cond) { \
> +	if (!(cond)) { \
>  		pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \
>  		return -1; \
>  	} \
> @@ -759,6 +759,201 @@ static int test__checkevent_breakpoint_w(struct perf_evlist *evlist)
>  	return 0;
>  }
>  
> +static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +
> +	return test__checkevent_tracepoint(evlist);
> +}
> +
> +static int
> +test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel;
> +
> +	TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1);
> +
> +	list_for_each_entry(evsel, &evlist->entries, node) {
> +		TEST_ASSERT_VAL("wrong exclude_user",
> +				!evsel->attr.exclude_user);
> +		TEST_ASSERT_VAL("wrong exclude_kernel",
> +				evsel->attr.exclude_kernel);
> +		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +	}
> +
> +	return test__checkevent_tracepoint_multi(evlist);
> +}
> +
> +static int test__checkevent_raw_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
> +
> +	return test__checkevent_raw(evlist);
> +}
> +
> +static int test__checkevent_numeric_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
> +
> +	return test__checkevent_numeric(evlist);
> +}
> +
> +static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +
> +	return test__checkevent_symbolic_name(evlist);
> +}
> +
> +static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +
> +	return test__checkevent_symbolic_alias(evlist);
> +}
> +
> +static int test__checkevent_genhw_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
> +
> +	return test__checkevent_genhw(evlist);
> +}
> +
> +static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +
> +	return test__checkevent_breakpoint(evlist);
> +}
> +
> +static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +
> +	return test__checkevent_breakpoint_x(evlist);
> +}
> +
> +static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
> +
> +	return test__checkevent_breakpoint_r(evlist);
> +}
> +
> +static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel = list_entry(evlist->entries.next,
> +					      struct perf_evsel, node);
> +
> +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
> +
> +	return test__checkevent_breakpoint_w(evlist);
> +}
> +
> +static int test__checkevent_list(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel;
> +	struct perf_evsel *group_leader;
> +
> +	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
> +
> +	/* r1 */
> +	evsel = list_entry(evlist->entries.next, struct perf_evsel, node);
> +	group_leader = evsel;
> +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
> +	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
> +	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +	TEST_ASSERT_VAL("wrong group_leader", !evsel->group_leader);
> +
> +	/* syscalls:sys_enter_open:k */
> +	evsel = list_entry(evsel->node.next, struct perf_evsel, node);
> +	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
> +	TEST_ASSERT_VAL("wrong sample_type",
> +		(PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | PERF_SAMPLE_CPU) ==
> +		evsel->attr.sample_type);
> +	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
> +	TEST_ASSERT_VAL("wrong group_leader",
> +			evsel->group_leader == group_leader);
> +
> +	/* 1:1:hp */
> +	evsel = list_entry(evsel->node.next, struct perf_evsel, node);
> +	TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
> +	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
> +	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
> +	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
> +	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
> +	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
> +	TEST_ASSERT_VAL("wrong group_leader",
> +			evsel->group_leader == group_leader);
> +
> +	return 0;
> +}
> +
>  static struct test__event_st {
>  	const char *name;
>  	__u32 type;
> @@ -808,6 +1003,54 @@ static struct test__event_st {
>  		.name  = "mem:0:w",
>  		.check = test__checkevent_breakpoint_w,
>  	},
> +	{
> +		.name  = "syscalls:sys_enter_open:k",
> +		.check = test__checkevent_tracepoint_modifier,
> +	},
> +	{
> +		.name  = "syscalls:*:u",
> +		.check = test__checkevent_tracepoint_multi_modifier,
> +	},
> +	{
> +		.name  = "r1:kp",
> +		.check = test__checkevent_raw_modifier,
> +	},
> +	{
> +		.name  = "1:1:hp",
> +		.check = test__checkevent_numeric_modifier,
> +	},
> +	{
> +		.name  = "instructions:h",
> +		.check = test__checkevent_symbolic_name_modifier,
> +	},
> +	{
> +		.name  = "faults:u",
> +		.check = test__checkevent_symbolic_alias_modifier,
> +	},
> +	{
> +		.name  = "L1-dcache-load-miss:kp",
> +		.check = test__checkevent_genhw_modifier,
> +	},
> +	{
> +		.name  = "mem:0:u",
> +		.check = test__checkevent_breakpoint_modifier,
> +	},
> +	{
> +		.name  = "mem:0:x:k",
> +		.check = test__checkevent_breakpoint_x_modifier,
> +	},
> +	{
> +		.name  = "mem:0:r:hp",
> +		.check = test__checkevent_breakpoint_r_modifier,
> +	},
> +	{
> +		.name  = "mem:0:w:up",
> +		.check = test__checkevent_breakpoint_w_modifier,
> +	},
> +	{
> +		.name  = "r1,syscalls:sys_enter_open:k,1:1:hp",
> +		.check = test__checkevent_list,
> +	},
>  };
>  
>  #define TEST__EVENTS_CNT (sizeof(test__events) / sizeof(struct test__event_st))
> -- 
> 1.7.4

  reply	other threads:[~2011-12-20 17:38 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-15 15:30 [RFC 0/3] perf tool: Add new event group management Jiri Olsa
2011-12-15 15:30 ` [PATCH 1/3] perf, tool: Add parser generator for events parsing Jiri Olsa
2011-12-16 14:02   ` Peter Zijlstra
2011-12-16 14:03     ` Peter Zijlstra
2011-12-20 10:31       ` Jiri Olsa
2011-12-20 10:47         ` Peter Zijlstra
2011-12-20 11:30           ` Peter Zijlstra
2011-12-20 11:39             ` Peter Zijlstra
2011-12-21 16:16               ` new syntax for perf event Jiri Olsa
2012-01-05  9:17                 ` Jiri Olsa
2012-01-05 14:10                 ` Peter Zijlstra
2012-01-09 15:28                   ` Jiri Olsa
2012-01-09 15:43                     ` Peter Zijlstra
2012-01-16 12:31                     ` [RFCv3 0/9] perf tool: parser generator for events parsing Jiri Olsa
2012-01-16 12:31                       ` [PATCH 1/9] perf, tool: Make perf_evlist__splice_list_tail global Jiri Olsa
2012-01-16 12:31                       ` [PATCH 2/9] perf, tool: Remove unused functions from debugfs object Jiri Olsa
2012-01-16 12:31                       ` [PATCH 3/9] perf, tool: Add sysfs mountpoint interface Jiri Olsa
2012-01-16 12:31                       ` [PATCH 4/9] perf, tool: Add bitmap_or function into bitmap object Jiri Olsa
2012-01-16 12:31                       ` [PATCH 5/9] perf: Add sysfs format attribute for pmu device Jiri Olsa
2012-01-23 15:13                         ` Eric W. Biederman
2012-01-23 15:33                           ` Jiri Olsa
2012-01-24 15:22                             ` Peter Zijlstra
2012-01-24 19:40                               ` Eric W. Biederman
2012-01-25  8:54                                 ` Jiri Olsa
2012-01-26 16:26                         ` Peter Zijlstra
2012-01-27 12:32                           ` Jiri Olsa
2012-01-16 12:31                       ` [PATCH 6/9] perf, tool: Add parser generator for events parsing Jiri Olsa
2012-01-24 16:02                         ` Peter Zijlstra
2012-01-25  8:42                           ` Jiri Olsa
2012-01-16 12:31                       ` [PATCH 7/9] perf, tool: Add config options support for event parsing Jiri Olsa
2012-01-16 12:31                       ` [PATCH 8/9] perf, tool: Add perf pmu object to access pmu format definition Jiri Olsa
2012-01-16 12:31                       ` [PATCH 9/9] perf, tool: Add support to specify pmu style event Jiri Olsa
2012-01-24 15:22                       ` [RFCv3 0/9] perf tool: parser generator for events parsing Peter Zijlstra
2012-01-24 16:26                       ` Peter Zijlstra
2012-01-25  0:53                         ` Greg KH
2012-01-25 10:49                           ` Peter Zijlstra
2012-01-25 14:37                             ` Jiri Olsa
2012-01-26 16:23                               ` Peter Zijlstra
2012-01-26 16:27                                 ` Greg KH
2012-01-25 17:01                             ` Greg KH
2012-01-27 14:34                       ` [PATCHv4 " Jiri Olsa
2012-01-27 14:34                         ` [PATCH 1/9] perf, tool: Make perf_evlist__splice_list_tail global Jiri Olsa
2012-02-07 19:31                           ` [tip:perf/core] perf evlist: Make splice_list_tail method public tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 2/9] perf, tool: Remove unused functions from debugfs object Jiri Olsa
2012-02-17  9:51                           ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 3/9] perf, tool: Add sysfs mountpoint interface Jiri Olsa
2012-02-17  9:52                           ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 4/9] perf, tool: Add bitmap_or function into bitmap object Jiri Olsa
2012-02-17  9:53                           ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-01-27 14:34                         ` [PATCH 5/9] perf: Adding sysfs group format attribute for pmu device Jiri Olsa
2012-01-27 21:08                           ` Corey Ashford
2012-01-27 21:19                             ` Peter Zijlstra
2012-02-01  0:47                               ` Corey Ashford
2012-01-30  9:52                             ` Jiri Olsa
2012-02-01  1:25                               ` Corey Ashford
2012-02-01 13:13                                 ` Jiri Olsa
2012-02-01 14:18                                   ` Peter Zijlstra
2012-02-01 14:31                                     ` Jiri Olsa
2012-02-01 14:40                                       ` Peter Zijlstra
2012-02-01 13:36                                 ` Peter Zijlstra
2012-02-02  0:33                                   ` Corey Ashford
2012-01-27 14:34                         ` [PATCH 6/9] perf, tool: Add parser generator for events parsing Jiri Olsa
2012-01-27 14:34                         ` [PATCH 7/9] perf, tool: Add config options support for event parsing Jiri Olsa
2012-01-27 14:34                         ` [PATCH 8/9] perf, tool: Add perf pmu object to access pmu format definition Jiri Olsa
2012-01-27 14:34                         ` [PATCH 9/9] perf, tool: Add support to specify pmu style event Jiri Olsa
2012-02-13 13:13                         ` [PATCHv4 0/9] perf tool: parser generator for events parsing Jiri Olsa
2012-02-14 16:28                         ` Peter Zijlstra
2012-02-14 16:43                           ` Peter Zijlstra
2012-02-14 20:20                             ` Peter Zijlstra
2012-02-14 20:57                               ` Peter Zijlstra
2012-02-14 21:03                                 ` Peter Zijlstra
2012-02-15  9:24                                   ` Jiri Olsa
2012-02-15 11:18                                     ` Peter Zijlstra
2012-02-15 13:32                                       ` Jiri Olsa
2012-02-15 13:39                                         ` Peter Zijlstra
2012-02-15  9:04                                 ` Jiri Olsa
2012-02-15 11:03                                   ` Peter Zijlstra
2011-12-22 19:32             ` [PATCH 1/3] perf, tool: Add " Vince Weaver
2011-12-19 14:37     ` Jiri Olsa
2011-12-20 10:29     ` [PATCHv2 0/2] perf tool: " Jiri Olsa
2011-12-20 10:29       ` [PATCHv2 1/2] perf, tool: Add " Jiri Olsa
2011-12-20 10:29       ` [PATCHv2 2/2] perf, tool: Add more automated tests for event parsing Jiri Olsa
2011-12-20 17:37   ` [PATCH 1/3] perf, tool: Add parser generator for events parsing Arnaldo Carvalho de Melo
2011-12-21  9:55     ` Jiri Olsa
2011-12-15 15:30 ` [PATCH 2/3] perf, tool: Add new event group management Jiri Olsa
2011-12-20 17:47   ` Arnaldo Carvalho de Melo
2011-12-20 21:20     ` Peter Zijlstra
2011-12-21 11:54       ` Arnaldo Carvalho de Melo
2011-12-15 15:30 ` [PATCH 3/3] perf, tool: Add more automated tests for event parsing Jiri Olsa
2011-12-20 17:38   ` Arnaldo Carvalho de Melo [this message]
2011-12-21  8:47   ` [tip:perf/core] perf test: " tip-bot for 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=20111220173805.GC22107@infradead.org \
    --to=acme@redhat.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=cjashfor@linux.vnet.ibm.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.