// SPDX-License-Identifier: GPL-2.0 #include #include #include "trace.h" struct parse_event_string_test_case { const char *input; const char *match, *sub, *event, *mod, *filter; }; static const struct parse_event_string_test_case parse_event_string_test_cases[] = { { "", .match = "", }, { "*:event", .event = "event", }, { ":event", .event = "event", }, { "sub:*", .sub = "sub", }, { "sub:", .sub = "sub", }, { "sub:event", .sub = "sub", .event = "event", }, { "sub:event:filter:filter", .sub = "sub", .event = "event", .filter = "filter", }, { "match", .match = "match", }, { ":mod:module", .mod = "module", }, { "sub:event:mod:module", .sub = "sub", .event = "event", .mod = "module", }, { "sub:event:mod:module:filter:filter", .sub = "sub", .event = "event", .mod = "module", .filter = "filter", }, { "sub:event:mod:module:filter:unexpected-filter", .sub = "sub", .event = "event", .mod = "module:filter:unexpected-filter", }, }; static void parse_event_string_test_desc(const struct parse_event_string_test_case *params, char *desc) { snprintf(desc, KUNIT_PARAM_DESC_SIZE, "'%s'", params->input); } KUNIT_ARRAY_PARAM(parse_event_string, parse_event_string_test_cases, parse_event_string_test_desc); #define EXPECT_NULL_OR_STR_EQ(test, left, right) \ ({ \ if ((left) != NULL) \ KUNIT_EXPECT_STREQ(test, (left), (right)); \ else \ KUNIT_EXPECT_NULL(test, (right)); \ }) static void parse_event_string(struct kunit *test) { const struct parse_event_string_test_case *params = test->param_value; char *input, *match, *sub, *event, *mod, *filter; input = kunit_kstrdup(test, params->input, GFP_KERNEL); if (!input) kunit_skip(test, "ENOMEM"); ftrace_parse_event_string(input, &match, &sub, &event, &mod, params->filter, &filter); EXPECT_NULL_OR_STR_EQ(test, match, params->match); EXPECT_NULL_OR_STR_EQ(test, sub, params->sub); EXPECT_NULL_OR_STR_EQ(test, event, params->event); EXPECT_NULL_OR_STR_EQ(test, mod, params->mod); EXPECT_NULL_OR_STR_EQ(test, filter, params->filter); } static struct kunit_case trace_events_test_cases[] = { KUNIT_CASE_PARAM(parse_event_string, parse_event_string_gen_params), {} }; static struct kunit_suite trace_events_test_suite = { .name = "trace-events", .test_cases = trace_events_test_cases, }; kunit_test_suite(trace_events_test_suite); MODULE_DESCRIPTION("KUnit test for the event tracing implementation"); MODULE_LICENSE("GPL"); MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");