| 1 | |
| 2 | #include <test_progs.h>
|
| 3 | #include "stacktrace_map.skel.h"
|
| 4 |
|
| 5 | void test_stacktrace_map(void)
|
| 6 | {
|
| 7 | struct stacktrace_map *skel;
|
| 8 | int control_map_fd, stackid_hmap_fd, stackmap_fd, stack_amap_fd;
|
| 9 | int err, stack_trace_len;
|
| 10 | __u32 key, val, stack_id, duration = 0;
|
| 11 | __u64 stack[PERF_MAX_STACK_DEPTH];
|
| 12 |
|
| 13 | skel = stacktrace_map__open_and_load();
|
| 14 | if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
|
| 15 | return;
|
| 16 |
|
| 17 | control_map_fd = bpf_map__fd(skel->maps.control_map);
|
| 18 | stackid_hmap_fd = bpf_map__fd(skel->maps.stackid_hmap);
|
| 19 | stackmap_fd = bpf_map__fd(skel->maps.stackmap);
|
| 20 | stack_amap_fd = bpf_map__fd(skel->maps.stack_amap);
|
| 21 |
|
| 22 | err = stacktrace_map__attach(skel);
|
| 23 | if (!ASSERT_OK(err, "skel_attach"))
|
| 24 | goto out;
|
| 25 |
|
| 26 | sleep(1);
|
| 27 |
|
| 28 |
|
| 29 | key = 0;
|
| 30 | val = 1;
|
| 31 | bpf_map_update_elem(control_map_fd, &key, &val, 0);
|
| 32 |
|
| 33 | |
| 34 | * in stackmap, and vice versa.
|
| 35 |
|
| 36 | err = compare_map_keys(stackid_hmap_fd, stackmap_fd);
|
| 37 | if (CHECK(err, "compare_map_keys stackid_hmap vs. stackmap",
|
| 38 | "err %d errno %d\n", err, errno))
|
| 39 | goto out;
|
| 40 |
|
| 41 | err = compare_map_keys(stackmap_fd, stackid_hmap_fd);
|
| 42 | if (CHECK(err, "compare_map_keys stackmap vs. stackid_hmap",
|
| 43 | "err %d errno %d\n", err, errno))
|
| 44 | goto out;
|
| 45 |
|
| 46 | stack_trace_len = PERF_MAX_STACK_DEPTH * sizeof(__u64);
|
| 47 | err = compare_stack_ips(stackmap_fd, stack_amap_fd, stack_trace_len);
|
| 48 | if (CHECK(err, "compare_stack_ips stackmap vs. stack_amap",
|
| 49 | "err %d errno %d\n", err, errno))
|
| 50 | goto out;
|
| 51 |
|
| 52 | stack_id = skel->bss->stack_id;
|
| 53 | err = bpf_map_lookup_and_delete_elem(stackmap_fd, &stack_id, stack);
|
| 54 | if (!ASSERT_OK(err, "lookup and delete target stack_id"))
|
| 55 | goto out;
|
| 56 |
|
| 57 | err = bpf_map_lookup_elem(stackmap_fd, &stack_id, stack);
|
| 58 | if (!ASSERT_EQ(err, -ENOENT, "lookup deleted stack_id"))
|
| 59 | goto out;
|
| 60 | out:
|
| 61 | stacktrace_map__destroy(skel);
|
| 62 | }
|