Unit tests for dynamic events are extended to test the newly introduced tracefs_dynevent_get_event() API. Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@xxxxxxxxx> --- Documentation/libtracefs-dynevents.txt | 5 ++- utest/tracefs-utest.c | 58 +++++++++++++++++--------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/Documentation/libtracefs-dynevents.txt b/Documentation/libtracefs-dynevents.txt index 7de06be..bd18f5b 100644 --- a/Documentation/libtracefs-dynevents.txt +++ b/Documentation/libtracefs-dynevents.txt @@ -71,8 +71,9 @@ freed with free(3) if they are set. The *tracefs_dynevent_get_event*() function returns tep event, describing the given dynamic event. If the dynamic event is newly created and not yet loaded in the @tep, the dynamic event system is -rescanned for any new events. The returned pointer to tep event is controlled by @tep and must not -be freed. +rescanned for any new events. If the dynamic event is deleted from the system, any subsequent calls +to *tracefs_dynevent_get_event*() may return a tep event, as the deletion is not detected by the API. +The returned pointer to tep event is controlled by @tep and must not be freed. RETURN VALUE ------------ diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c index 3a01f38..c555b06 100644 --- a/utest/tracefs-utest.c +++ b/utest/tracefs-utest.c @@ -567,9 +567,10 @@ struct probe_test { static bool check_probes(struct probe_test *probes, int count, struct tracefs_dynevent **devents, bool in_system, - struct tracefs_instance *instance) + struct tracefs_instance *instance, struct tep_handle *tep) { enum tracefs_dynevent_type type; + struct tep_event *tevent; char *ename; char *address; char *event; @@ -615,6 +616,15 @@ static bool check_probes(struct probe_test *probes, int count, CU_TEST(ret != 0); } + if (in_system) { + tevent = tracefs_dynevent_get_event(tep, devents[i]); + CU_TEST(tevent != NULL); + if (tevent) { + CU_TEST(strcmp(tevent->name, event) == 0); + CU_TEST(strcmp(tevent->system, system) == 0); + } + } + found++; break; } @@ -649,10 +659,14 @@ static void test_kprobes_instance(struct tracefs_instance *instance) struct tracefs_dynevent **dkretprobe; struct tracefs_dynevent **dkprobe; struct tracefs_dynevent **devents; + struct tep_handle *tep; char *tmp; int ret; int i; + tep = tep_alloc(); + CU_TEST(tep != NULL); + dkprobe = calloc(kprobe_count + 1, sizeof(*dkprobe)); dkretprobe = calloc(kretprobe_count + 1, sizeof(*dkretprobe)); @@ -676,7 +690,7 @@ static void test_kprobes_instance(struct tracefs_instance *instance) } dkprobe[i] = NULL; get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); - CU_TEST(check_probes(ktests, kprobe_count, dkprobe, false, instance)); + CU_TEST(check_probes(ktests, kprobe_count, dkprobe, false, instance, tep)); for (i = 0; i < kretprobe_count; i++) { dkretprobe[i] = tracefs_kretprobe_alloc(kretests[i].system, kretests[i].event, @@ -685,15 +699,15 @@ static void test_kprobes_instance(struct tracefs_instance *instance) } dkretprobe[i] = NULL; get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); - CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance)); + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)); for (i = 0; i < kprobe_count; i++) { CU_TEST(tracefs_dynevent_create(dkprobe[i]) == 0); } devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, kprobe_count); - CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance)); - CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance)); + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; @@ -702,8 +716,8 @@ static void test_kprobes_instance(struct tracefs_instance *instance) } devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, kprobe_count + kretprobe_count); - CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance)); - CU_TEST(check_probes(kretests, kretprobe_count, devents, true, instance)); + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); + CU_TEST(check_probes(kretests, kretprobe_count, devents, true, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; @@ -712,8 +726,8 @@ static void test_kprobes_instance(struct tracefs_instance *instance) } devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, kprobe_count); - CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance)); - CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance)); + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; @@ -721,8 +735,8 @@ static void test_kprobes_instance(struct tracefs_instance *instance) CU_TEST(tracefs_dynevent_destroy(dkprobe[i], false) == 0); } get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); - CU_TEST(check_probes(ktests, kprobe_count, dkprobe, false, instance)); - CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance)); + CU_TEST(check_probes(ktests, kprobe_count, dkprobe, false, instance, tep)); + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; @@ -743,7 +757,7 @@ static void test_kprobes_instance(struct tracefs_instance *instance) } devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, kprobe_count); - CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance)); + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; @@ -754,19 +768,19 @@ static void test_kprobes_instance(struct tracefs_instance *instance) } devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE, kprobe_count); - CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance)); + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; devents = get_dynevents_check(TRACEFS_DYNEVENT_KRETPROBE, kretprobe_count); - CU_TEST(check_probes(kretests, kretprobe_count, devents, true, instance)); + CU_TEST(check_probes(kretests, kretprobe_count, devents, true, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, kprobe_count + kretprobe_count); - CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance)); - CU_TEST(check_probes(kretests, kretprobe_count, devents, true, instance)); + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); + CU_TEST(check_probes(kretests, kretprobe_count, devents, true, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; @@ -775,6 +789,7 @@ static void test_kprobes_instance(struct tracefs_instance *instance) get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); free(dkretprobe); free(dkprobe); + tep_free(tep); } static void test_kprobes(void) @@ -793,11 +808,15 @@ static void test_eprobes_instance(struct tracefs_instance *instance) int count = sizeof(etests) / sizeof((etests)[0]); struct tracefs_dynevent **deprobes; struct tracefs_dynevent **devents; + struct tep_handle *tep; char *tsys, *tevent; char *tmp, *sav; int ret; int i; + tep = tep_alloc(); + CU_TEST(tep != NULL); + deprobes = calloc(count + 1, sizeof(*deprobes)); /* Invalid parameters */ @@ -821,14 +840,14 @@ static void test_eprobes_instance(struct tracefs_instance *instance) deprobes[i] = NULL; get_dynevents_check(TRACEFS_DYNEVENT_EPROBE, 0); - CU_TEST(check_probes(etests, count, deprobes, false, instance)); + CU_TEST(check_probes(etests, count, deprobes, false, instance, tep)); for (i = 0; i < count; i++) { CU_TEST(tracefs_dynevent_create(deprobes[i]) == 0); } devents = get_dynevents_check(TRACEFS_DYNEVENT_EPROBE, count); - CU_TEST(check_probes(etests, count, devents, true, instance)); + CU_TEST(check_probes(etests, count, devents, true, instance, tep)); tracefs_dynevent_list_free(devents); devents = NULL; @@ -836,12 +855,13 @@ static void test_eprobes_instance(struct tracefs_instance *instance) CU_TEST(tracefs_dynevent_destroy(deprobes[i], false) == 0); } get_dynevents_check(TRACEFS_DYNEVENT_EPROBE, 0); - CU_TEST(check_probes(etests, count, deprobes, false, instance)); + CU_TEST(check_probes(etests, count, deprobes, false, instance, tep)); for (i = 0; i < count; i++) tracefs_dynevent_free(deprobes[i]); free(deprobes); + tep_free(tep); } static void test_eprobes(void) -- 2.33.1
![]() |