perf test: Add test case struct.
Add a test case struct mirroring the 'struct kunit_case'. Use the struct with the DEFINE_SUITE macro, where the single test is turned into a test case. Update the helpers in builtin-test to handle test cases. Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: Sohaib Mohamed <sohaib.amhmd@gmail.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Brendan Higgins <brendanhiggins@google.com> Cc: Daniel Latypov <dlatypov@google.com> Cc: David Gow <davidgow@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jin Yao <yao.jin@linux.intel.com> Cc: John Garry <john.garry@huawei.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Clarke <pc@us.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: https://lore.kernel.org/r/20211104064208.3156807-8-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
f832044c8e
Коммит
78244d2e21
|
@ -117,10 +117,19 @@ static struct test_suite **tests[] = {
|
|||
|
||||
static int num_subtests(const struct test_suite *t)
|
||||
{
|
||||
int num;
|
||||
|
||||
if (t->subtest.get_nr)
|
||||
return t->subtest.get_nr();
|
||||
|
||||
return 0;
|
||||
if (!t->test_cases)
|
||||
return 0;
|
||||
|
||||
num = 0;
|
||||
while (t->test_cases[num].name)
|
||||
num++;
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
static bool has_subtests(const struct test_suite *t)
|
||||
|
@ -138,10 +147,13 @@ static const char *skip_reason(const struct test_suite *t, int subtest)
|
|||
|
||||
static const char *test_description(const struct test_suite *t, int subtest)
|
||||
{
|
||||
if (subtest < 0 || !t->subtest.get_desc)
|
||||
return t->desc;
|
||||
if (t->test_cases && subtest >= 0)
|
||||
return t->test_cases[subtest].desc;
|
||||
|
||||
return t->subtest.get_desc(subtest);
|
||||
if (t->subtest.get_desc && subtest >= 0)
|
||||
return t->subtest.get_desc(subtest);
|
||||
|
||||
return t->desc;
|
||||
}
|
||||
|
||||
static bool is_supported(const struct test_suite *t)
|
||||
|
@ -149,9 +161,15 @@ static bool is_supported(const struct test_suite *t)
|
|||
return !t->is_supported || t->is_supported();
|
||||
}
|
||||
|
||||
static test_fnptr test_function(const struct test_suite *t, int subtest __maybe_unused)
|
||||
static test_fnptr test_function(const struct test_suite *t, int subtest)
|
||||
{
|
||||
return t->func;
|
||||
if (t->func)
|
||||
return t->func;
|
||||
|
||||
if (subtest <= 0)
|
||||
return t->test_cases[0].run_case;
|
||||
|
||||
return t->test_cases[subtest].run_case;
|
||||
}
|
||||
|
||||
static bool perf_test__matches(const char *desc, int curr, int argc, const char *argv[])
|
||||
|
|
|
@ -31,6 +31,12 @@ struct test_suite;
|
|||
|
||||
typedef int (*test_fnptr)(struct test_suite *, int);
|
||||
|
||||
struct test_case {
|
||||
const char *name;
|
||||
const char *desc;
|
||||
test_fnptr run_case;
|
||||
};
|
||||
|
||||
struct test_suite {
|
||||
const char *desc;
|
||||
test_fnptr func;
|
||||
|
@ -40,6 +46,7 @@ struct test_suite {
|
|||
const char *(*get_desc)(int subtest);
|
||||
const char *(*skip_reason)(int subtest);
|
||||
} subtest;
|
||||
struct test_case *test_cases;
|
||||
bool (*is_supported)(void);
|
||||
void *priv;
|
||||
};
|
||||
|
@ -47,10 +54,21 @@ struct test_suite {
|
|||
#define DECLARE_SUITE(name) \
|
||||
extern struct test_suite suite__##name;
|
||||
|
||||
#define DEFINE_SUITE(description, name) \
|
||||
struct test_suite suite__##name = { \
|
||||
.desc = description, \
|
||||
.func = test__##name, \
|
||||
#define TEST_CASE(description, _name) \
|
||||
{ \
|
||||
.name = #_name, \
|
||||
.desc = description, \
|
||||
.run_case = test__##_name, \
|
||||
}
|
||||
|
||||
#define DEFINE_SUITE(description, _name) \
|
||||
struct test_case tests__##_name[] = { \
|
||||
TEST_CASE(description, _name), \
|
||||
{ .name = NULL, } \
|
||||
}; \
|
||||
struct test_suite suite__##_name = { \
|
||||
.desc = description, \
|
||||
.test_cases = tests__##_name, \
|
||||
}
|
||||
|
||||
/* Tests */
|
||||
|
|
Загрузка…
Ссылка в новой задаче