X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=tests%2Funit%2Ftest_event_rule.c;h=e6a55bc49d3c0973ef4b5b9767b27e45d5c106a6;hb=0a23a07d7db04d7e9f1fcf08a5824fccbf2b53da;hp=59e37e9662edfeed08d8e71d75658f1871c9d730;hpb=57739a6b3247c7ded74522906e214eff0d6dc14c;p=lttng-tools.git diff --git a/tests/unit/test_event_rule.c b/tests/unit/test_event_rule.c index 59e37e966..e6a55bc49 100644 --- a/tests/unit/test_event_rule.c +++ b/tests/unit/test_event_rule.c @@ -18,14 +18,18 @@ #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -38,11 +42,11 @@ int lttng_opt_quiet = 1; int lttng_opt_verbose; int lttng_opt_mi; -#define NUM_TESTS 246 +#define NUM_TESTS 278 struct tracepoint_test { enum lttng_domain_type type; - bool support_exclusion; + bool support_name_pattern_exclusion; }; typedef const char *(*log_level_name_getter)(int log_level); @@ -58,7 +62,7 @@ void test_event_rule_tracepoint_by_domain(const struct tracepoint_test *test) const char *pattern="my_event_*"; const char *filter="msg_id == 23 && size >= 2048"; const char *tmp; - const char *exclusions[] = {"my_event_test1", "my_event_test2" ,"my_event_test3"}; + const char *name_pattern_exclusions[] = {"my_event_test1", "my_event_test2" ,"my_event_test3"}; struct lttng_log_level_rule *log_level_rule = NULL; const struct lttng_log_level_rule *log_level_rule_return = NULL; struct lttng_payload payload; @@ -78,9 +82,9 @@ void test_event_rule_tracepoint_by_domain(const struct tracepoint_test *test) ok(status == LTTNG_EVENT_RULE_STATUS_OK, "get tracepoint domain."); ok(domain_type == type, "domain type got %d expected %d.", domain_type, type); - status = lttng_event_rule_tracepoint_set_pattern(tracepoint, pattern); + status = lttng_event_rule_tracepoint_set_name_pattern(tracepoint, pattern); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting pattern."); - status = lttng_event_rule_tracepoint_get_pattern(tracepoint, &tmp); + status = lttng_event_rule_tracepoint_get_name_pattern(tracepoint, &tmp); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting pattern."); ok(!strncmp(pattern, tmp, strlen(pattern)), "pattern is equal."); @@ -100,33 +104,33 @@ void test_event_rule_tracepoint_by_domain(const struct tracepoint_test *test) ok(status == LTTNG_EVENT_RULE_STATUS_OK, "get log level rule."); } - if (test->support_exclusion) { + if (test->support_name_pattern_exclusion) { int i; for (i = 0; i < 3; i++) { - status = lttng_event_rule_tracepoint_add_exclusion(tracepoint, exclusions[i]); - ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting exclusions \"%s\"", exclusions[i]); + status = lttng_event_rule_tracepoint_add_name_pattern_exclusion(tracepoint, name_pattern_exclusions[i]); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting name pattern exclusions \"%s\"", name_pattern_exclusions[i]); } - status = lttng_event_rule_tracepoint_get_exclusions_count(tracepoint, &count); - ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting exclusion count."); + status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(tracepoint, &count); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting name pattern exclusion count."); ok(count == 3, "count is %d/3", count); for (i = 0; i < count; i++) { - status = lttng_event_rule_tracepoint_get_exclusion_at_index(tracepoint, i, &tmp); - ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting exclusion at index %d.", i); - ok(!strncmp(exclusions[i], tmp, strlen(exclusions[i])), "%s == %s.", tmp, exclusions[i]); + status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_at_index(tracepoint, i, &tmp); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting name pattern exclusion at index %d.", i); + ok(!strncmp(name_pattern_exclusions[i], tmp, strlen(name_pattern_exclusions[i])), "%s == %s.", tmp, name_pattern_exclusions[i]); } } else { int i; for (i = 0; i < 3; i++) { - status = lttng_event_rule_tracepoint_add_exclusion(tracepoint, exclusions[i]); - ok(status == LTTNG_EVENT_RULE_STATUS_UNSUPPORTED, "setting exclusions unsupported \"%s\".", exclusions[i]); + status = lttng_event_rule_tracepoint_add_name_pattern_exclusion(tracepoint, name_pattern_exclusions[i]); + ok(status == LTTNG_EVENT_RULE_STATUS_UNSUPPORTED, "setting name pattern exclusions unsupported \"%s\".", name_pattern_exclusions[i]); } - status = lttng_event_rule_tracepoint_get_exclusions_count(tracepoint, &count); - ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting exclusion count."); + status = lttng_event_rule_tracepoint_get_name_pattern_exclusion_count(tracepoint, &count); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting name pattern exclusion count."); ok(count == 0, "count is %d/0", count); } @@ -170,6 +174,149 @@ void test_event_rule_tracepoint(void) } } +static +void test_event_rule_kernel_tracepoint(void) +{ + struct lttng_event_rule *tracepoint = NULL; + struct lttng_event_rule *tracepoint_from_buffer = NULL; + enum lttng_event_rule_status status; + const char *pattern="my_event_*"; + const char *filter="msg_id == 23 && size >= 2048"; + const char *tmp; + struct lttng_payload payload; + + diag("Testing lttng_event_rule_kernel_tracepoint."); + + lttng_payload_init(&payload); + + tracepoint = lttng_event_rule_kernel_tracepoint_create(); + ok(tracepoint, "tracepoint object."); + + status = lttng_event_rule_kernel_tracepoint_set_name_pattern(tracepoint, pattern); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting pattern."); + status = lttng_event_rule_kernel_tracepoint_get_name_pattern(tracepoint, &tmp); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting pattern."); + ok(!strncmp(pattern, tmp, strlen(pattern)), "pattern is equal."); + + status = lttng_event_rule_kernel_tracepoint_set_filter(tracepoint, filter); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting filter."); + status = lttng_event_rule_kernel_tracepoint_get_filter(tracepoint, &tmp); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting filter."); + ok(!strncmp(filter, tmp, strlen(filter)), "filter is equal."); + + ok(lttng_event_rule_serialize(tracepoint, &payload) == 0, "Serializing."); + + { + struct lttng_payload_view view = + lttng_payload_view_from_payload( + &payload, 0, -1); + + ok(lttng_event_rule_create_from_payload( + &view, &tracepoint_from_buffer) > 0, + "Deserializing."); + } + + ok(lttng_event_rule_is_equal(tracepoint, tracepoint_from_buffer), "serialized and from buffer are equal."); + + lttng_payload_reset(&payload); + lttng_event_rule_destroy(tracepoint); + lttng_event_rule_destroy(tracepoint_from_buffer); +} + +static +void test_event_rule_user_tracepoint(void) +{ + int i; + unsigned int count; + struct lttng_event_rule *tracepoint = NULL; + struct lttng_event_rule *tracepoint_from_buffer = NULL; + enum lttng_event_rule_status status; + const char *pattern="my_event_*"; + const char *filter="msg_id == 23 && size >= 2048"; + const char *tmp; + const char *name_pattern_exclusions[] = {"my_event_test1", "my_event_test2" ,"my_event_test3"}; + struct lttng_log_level_rule *log_level_rule = NULL; + const struct lttng_log_level_rule *log_level_rule_return = NULL; + struct lttng_payload payload; + + diag("Testing lttng_event_rule_user_tracepoint."); + + lttng_payload_init(&payload); + + log_level_rule = lttng_log_level_rule_exactly_create(LTTNG_LOGLEVEL_INFO); + assert(log_level_rule); + + tracepoint = lttng_event_rule_user_tracepoint_create(); + ok(tracepoint, "user tracepoint object."); + + status = lttng_event_rule_user_tracepoint_set_name_pattern(tracepoint, pattern); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting pattern."); + status = lttng_event_rule_user_tracepoint_get_name_pattern(tracepoint, &tmp); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting pattern."); + ok(!strncmp(pattern, tmp, strlen(pattern)), "pattern is equal."); + + status = lttng_event_rule_user_tracepoint_set_filter(tracepoint, filter); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting filter."); + status = lttng_event_rule_user_tracepoint_get_filter(tracepoint, &tmp); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting filter."); + ok(!strncmp(filter, tmp, strlen(filter)), "filter is equal."); + + status = lttng_event_rule_user_tracepoint_get_log_level_rule(tracepoint, &log_level_rule_return); + ok(status == LTTNG_EVENT_RULE_STATUS_UNSET, "get unset log level rule."); + + status = lttng_event_rule_user_tracepoint_set_log_level_rule( + tracepoint, log_level_rule); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting log level rule."); + status = lttng_event_rule_user_tracepoint_get_log_level_rule( + tracepoint, &log_level_rule_return); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, "get log level rule."); + + /* Name pattern exclusions */ + for (i = 0; i < 3; i++) { + status = lttng_event_rule_user_tracepoint_add_name_pattern_exclusion( + tracepoint, name_pattern_exclusions[i]); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, + "setting name pattern exclusions \"%s\"", + name_pattern_exclusions[i]); + } + + status = lttng_event_rule_user_tracepoint_get_name_pattern_exclusion_count( + tracepoint, &count); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, + "getting name pattern exclusion count."); + ok(count == 3, "count is %d/3", count); + + for (i = 0; i < count; i++) { + status = lttng_event_rule_user_tracepoint_get_name_pattern_exclusion_at_index( + tracepoint, i, &tmp); + ok(status == LTTNG_EVENT_RULE_STATUS_OK, + "getting name pattern exclusion at index %d.", + i); + ok(!strncmp(name_pattern_exclusions[i], tmp, + strlen(name_pattern_exclusions[i])), + "%s == %s.", tmp, name_pattern_exclusions[i]); + } + + ok(lttng_event_rule_serialize(tracepoint, &payload) == 0, "Serializing."); + + { + struct lttng_payload_view view = + lttng_payload_view_from_payload( + &payload, 0, -1); + + ok(lttng_event_rule_create_from_payload( + &view, &tracepoint_from_buffer) > 0, + "Deserializing."); + } + + ok(lttng_event_rule_is_equal(tracepoint, tracepoint_from_buffer), "serialized and from buffer are equal."); + + lttng_payload_reset(&payload); + lttng_event_rule_destroy(tracepoint); + lttng_event_rule_destroy(tracepoint_from_buffer); + lttng_log_level_rule_destroy(log_level_rule); +} + static void test_event_rule_syscall(void) { struct lttng_event_rule *syscall = NULL; @@ -184,18 +331,18 @@ static void test_event_rule_syscall(void) lttng_payload_init(&payload); - syscall = lttng_event_rule_syscall_create(LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_ENTRY); + syscall = lttng_event_rule_kernel_syscall_create(LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_ENTRY); ok(syscall, "syscall object."); - status = lttng_event_rule_syscall_set_pattern(syscall, pattern); + status = lttng_event_rule_kernel_syscall_set_name_pattern(syscall, pattern); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting pattern."); - status = lttng_event_rule_syscall_get_pattern(syscall, &tmp); + status = lttng_event_rule_kernel_syscall_get_name_pattern(syscall, &tmp); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting pattern."); ok(!strncmp(pattern, tmp, strlen(pattern)), "pattern is equal."); - status = lttng_event_rule_syscall_set_filter(syscall, filter); + status = lttng_event_rule_kernel_syscall_set_filter(syscall, filter); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "setting filter."); - status = lttng_event_rule_syscall_get_filter(syscall, &tmp); + status = lttng_event_rule_kernel_syscall_get_filter(syscall, &tmp); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "getting filter."); ok(!strncmp(filter, tmp, strlen(filter)), "filter is equal."); @@ -255,10 +402,10 @@ static void test_event_rule_userspace_probe(void) lttng_payload_init(&payload); - uprobe = lttng_event_rule_userspace_probe_create(probe_location); + uprobe = lttng_event_rule_kernel_uprobe_create(probe_location); ok(uprobe, "uprobe event rule object creation."); - status = lttng_event_rule_userspace_probe_get_location( + status = lttng_event_rule_kernel_uprobe_get_location( uprobe, &probe_location_tmp); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Getting uprobe event rule location."); @@ -266,10 +413,10 @@ static void test_event_rule_userspace_probe(void) probe_location, probe_location_tmp), "Location is equal."); - status = lttng_event_rule_userspace_probe_set_event_name(uprobe, probe_name); + status = lttng_event_rule_kernel_uprobe_set_event_name(uprobe, probe_name); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Setting uprobe event rule name: %s.", probe_name); - status = lttng_event_rule_userspace_probe_get_event_name(uprobe, &tmp); + status = lttng_event_rule_kernel_uprobe_get_event_name(uprobe, &tmp); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Getting uprobe name."); ok(!strcmp(probe_name, tmp), "Uprobe name are equal."); @@ -313,18 +460,18 @@ static void test_event_rule_kernel_probe_by_location( lttng_payload_init(&payload); - kprobe = lttng_event_rule_kernel_probe_create(location); + kprobe = lttng_event_rule_kernel_kprobe_create(location); ok(kprobe, "kprobe event rule object creation."); - status = lttng_event_rule_kernel_probe_get_location(kprobe, &_location); + status = lttng_event_rule_kernel_kprobe_get_location(kprobe, &_location); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Getting kprobe event rule location."); ok(lttng_kernel_probe_location_is_equal(location, _location), "Locations are equal."); - status = lttng_event_rule_kernel_probe_set_event_name(kprobe, probe_name); + status = lttng_event_rule_kernel_kprobe_set_event_name(kprobe, probe_name); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Setting kprobe event rule name: %s.", probe_name); - status = lttng_event_rule_kernel_probe_get_event_name(kprobe, &tmp); + status = lttng_event_rule_kernel_kprobe_get_event_name(kprobe, &tmp); ok(status == LTTNG_EVENT_RULE_STATUS_OK, "Getting kprobe name."); ok(!strcmp(probe_name, tmp), "kprobe name are equal."); @@ -389,25 +536,6 @@ static void test_set_event_rule_log_level_rules( lttng_log_level_rule_destroy(log_level_rule); } -static void test_event_rule_log_level_kernel(void) -{ - struct lttng_event_rule *kernel_tracepoint_rule; - enum lttng_event_rule_status er_exactly_status, er_as_severe_status; - - diag("Test kernel event rule + log level rule"); - kernel_tracepoint_rule = - lttng_event_rule_tracepoint_create(LTTNG_DOMAIN_KERNEL); - assert(kernel_tracepoint_rule); - - test_set_event_rule_log_level_rules(kernel_tracepoint_rule, 0, &er_exactly_status, &er_as_severe_status); - ok(er_exactly_status == LTTNG_EVENT_RULE_STATUS_UNSUPPORTED, - "Log level rule \"exactly\" rejected by kernel tracepoint event rule (unsupported)"); - ok(er_as_severe_status == LTTNG_EVENT_RULE_STATUS_UNSUPPORTED, - "Log level rule \"at least as severe as\" rejected by kernel tracepoint event rule (unsupported)"); - - lttng_event_rule_destroy(kernel_tracepoint_rule); -} - static void test_event_rule_log_level_generic(const char *domain_name, enum lttng_domain_type domain, log_level_name_getter get_log_level_name, @@ -593,10 +721,11 @@ int main(int argc, const char *argv[]) { plan_tests(NUM_TESTS); test_event_rule_tracepoint(); + test_event_rule_kernel_tracepoint(); + test_event_rule_user_tracepoint(); test_event_rule_syscall(); test_event_rule_userspace_probe(); test_event_rule_kernel_probe(); - test_event_rule_log_level_kernel(); test_event_rule_log_level_ust(); test_event_rule_log_level_jul(); test_event_rule_log_level_log4j();