0001
0002 #include <test_progs.h>
0003 #include "stacktrace_map_skip.skel.h"
0004
0005 #define TEST_STACK_DEPTH 2
0006
0007 void test_stacktrace_map_skip(void)
0008 {
0009 struct stacktrace_map_skip *skel;
0010 int stackid_hmap_fd, stackmap_fd, stack_amap_fd;
0011 int err, stack_trace_len;
0012
0013 skel = stacktrace_map_skip__open_and_load();
0014 if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
0015 return;
0016
0017
0018 stackid_hmap_fd = bpf_map__fd(skel->maps.stackid_hmap);
0019 if (!ASSERT_GE(stackid_hmap_fd, 0, "stackid_hmap fd"))
0020 goto out;
0021
0022 stackmap_fd = bpf_map__fd(skel->maps.stackmap);
0023 if (!ASSERT_GE(stackmap_fd, 0, "stackmap fd"))
0024 goto out;
0025
0026 stack_amap_fd = bpf_map__fd(skel->maps.stack_amap);
0027 if (!ASSERT_GE(stack_amap_fd, 0, "stack_amap fd"))
0028 goto out;
0029
0030 skel->bss->pid = getpid();
0031
0032 err = stacktrace_map_skip__attach(skel);
0033 if (!ASSERT_OK(err, "skel_attach"))
0034 goto out;
0035
0036
0037 sleep(1);
0038
0039
0040 skel->bss->control = 1;
0041
0042
0043
0044
0045 err = compare_map_keys(stackid_hmap_fd, stackmap_fd);
0046 if (!ASSERT_OK(err, "compare_map_keys stackid_hmap vs. stackmap"))
0047 goto out;
0048
0049 err = compare_map_keys(stackmap_fd, stackid_hmap_fd);
0050 if (!ASSERT_OK(err, "compare_map_keys stackmap vs. stackid_hmap"))
0051 goto out;
0052
0053 stack_trace_len = TEST_STACK_DEPTH * sizeof(__u64);
0054 err = compare_stack_ips(stackmap_fd, stack_amap_fd, stack_trace_len);
0055 if (!ASSERT_OK(err, "compare_stack_ips stackmap vs. stack_amap"))
0056 goto out;
0057
0058 if (!ASSERT_EQ(skel->bss->failed, 0, "skip_failed"))
0059 goto out;
0060
0061 out:
0062 stacktrace_map_skip__destroy(skel);
0063 }