Messages in this thread | | | Date | Wed, 20 Oct 2021 14:45:24 +0200 | From | Jiri Olsa <> | Subject | Re: [PATCH v2 11/22] perf test: Convert watch point tests to test cases. |
| |
On Wed, Oct 13, 2021 at 10:45:53AM -0700, Ian Rogers wrote: > Use null terminated array of test cases rather than the previous sub > test functions. > > Signed-off-by: Ian Rogers <irogers@google.com> > --- > tools/perf/tests/wp.c | 128 ++++++++++-------------------------------- > 1 file changed, 30 insertions(+), 98 deletions(-) > > diff --git a/tools/perf/tests/wp.c b/tools/perf/tests/wp.c > index 904bdf2dcf81..2c0513257b15 100644 > --- a/tools/perf/tests/wp.c > +++ b/tools/perf/tests/wp.c > @@ -62,8 +62,12 @@ static int __event(int wp_type, void *wp_addr, unsigned long wp_len) > return fd; > } > > -static int wp_ro_test(void) > +static int test__wp_ro(struct test_suite *test __maybe_unused, > + int subtest __maybe_unused) > { > +#if defined(__s390x__) || defined(__x86_64__) || defined(__i386__) > + return TEST_SKIP; > +#else > int fd; > unsigned long tmp, tmp1 = rand(); > > @@ -79,10 +83,15 @@ static int wp_ro_test(void) > > close(fd); > return 0; > +#endif > } > > -static int wp_wo_test(void) > +static int test__wp_wo(struct test_suite *test __maybe_unused, > + int subtest __maybe_unused) > { > +#if defined(__s390x__) > + return TEST_SKIP; > +#else > int fd; > unsigned long tmp, tmp1 = rand(); > > @@ -98,10 +107,15 @@ static int wp_wo_test(void) > > close(fd); > return 0; > +#endif > } > > -static int wp_rw_test(void) > +static int test__wp_rw(struct test_suite *test __maybe_unused, > + int subtest __maybe_unused) > { > +#if defined(__s390x__) > + return TEST_SKIP; > +#else > int fd; > unsigned long tmp, tmp1 = rand(); > > @@ -118,10 +132,15 @@ static int wp_rw_test(void) > > close(fd); > return 0; > +#endif > } > > -static int wp_modify_test(void) > +static int test__wp_modify(struct test_suite *test __maybe_unused, > + int subtest __maybe_unused) > { > +#if defined(__s390x__) > + return TEST_SKIP; > +#else > int fd, ret; > unsigned long tmp = rand(); > struct perf_event_attr new_attr; > @@ -163,105 +182,18 @@ static int wp_modify_test(void) > > close(fd); > return 0; > -} > - > -static bool wp_ro_supported(void) > -{ > -#if defined (__x86_64__) || defined (__i386__) > - return false; > -#else > - return true; > -#endif > -} > - > -static const char *wp_ro_skip_msg(void) > -{ > -#if defined (__x86_64__) || defined (__i386__) > - return "missing hardware support"; > -#else > - return NULL; > #endif > } > > -static struct { > - const char *desc; > - int (*target_func)(void); > - bool (*is_supported)(void); > - const char *(*skip_msg)(void); > -} wp_testcase_table[] = { > - { > - .desc = "Read Only Watchpoint", > - .target_func = &wp_ro_test, > - .is_supported = &wp_ro_supported, > - .skip_msg = &wp_ro_skip_msg, > - }, > - { > - .desc = "Write Only Watchpoint", > - .target_func = &wp_wo_test, > - }, > - { > - .desc = "Read / Write Watchpoint", > - .target_func = &wp_rw_test, > - }, > - { > - .desc = "Modify Watchpoint", > - .target_func = &wp_modify_test, > - }, > +static struct test_case wp_tests[] = { > + TEST_CASE_REASON("Read Only Watchpoint", wp_ro, "missing hardware support"), > + TEST_CASE_REASON("Write Only Watchpoint", wp_wo, "missing hardware support"), > + TEST_CASE_REASON("Read / Write Watchpoint", wp_rw, "missing hardware support"), > + TEST_CASE_REASON("Modify Watchpoint", wp_modify, "missing hardware support"), > + { .name = NULL, } > }; > > -static int test__wp_subtest_get_nr(void) > -{ > - return (int)ARRAY_SIZE(wp_testcase_table); > -} > - > -static const char *test__wp_subtest_get_desc(int i) > -{ > - if (i < 0 || i >= (int)ARRAY_SIZE(wp_testcase_table)) > - return NULL; > - return wp_testcase_table[i].desc; > -} > - > -static const char *test__wp_subtest_skip_reason(int i) > -{ > - if (i < 0 || i >= (int)ARRAY_SIZE(wp_testcase_table)) > - return NULL; > - if (!wp_testcase_table[i].skip_msg) > - return NULL; > - return wp_testcase_table[i].skip_msg(); > -} > - > -static int test__wp(struct test_suite *test __maybe_unused, int i) > -{ > - if (i < 0 || i >= (int)ARRAY_SIZE(wp_testcase_table)) > - return TEST_FAIL; > - > - if (wp_testcase_table[i].is_supported && > - !wp_testcase_table[i].is_supported()) > - return TEST_SKIP; > - > - return !wp_testcase_table[i].target_func() ? TEST_OK : TEST_FAIL; > -} > - > -/* The s390 so far does not have support for > - * instruction breakpoint using the perf_event_open() system call. > - */ > -static bool test__wp_is_supported(void) > -{ > -#if defined(__s390x__) > - return false; > -#else > - return true; > -#endif > -} > - > struct test_suite suite__wp = { > .desc = "Watchpoint", > - .func = test__wp, > - .is_supported = test__wp_is_supported,
hm, why do we get rid of this callback and instead use #ifdef 3 times above?
jirka
> - .subtest = { > - .skip_if_fail = false, > - .get_nr = test__wp_subtest_get_nr, > - .get_desc = test__wp_subtest_get_desc, > - .skip_reason = test__wp_subtest_skip_reason, > - }, > + .test_cases = wp_tests, > }; > -- > 2.33.0.882.g93a45727a2-goog >
| |