| 1 | |
| 2 |
|
| 3 | #include <test_progs.h>
|
| 4 | #include "recursion.skel.h"
|
| 5 |
|
| 6 | void test_recursion(void)
|
| 7 | {
|
| 8 | struct bpf_prog_info prog_info = {};
|
| 9 | __u32 prog_info_len = sizeof(prog_info);
|
| 10 | struct recursion *skel;
|
| 11 | int key = 0;
|
| 12 | int err;
|
| 13 |
|
| 14 | skel = recursion__open_and_load();
|
| 15 | if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
|
| 16 | return;
|
| 17 |
|
| 18 | err = recursion__attach(skel);
|
| 19 | if (!ASSERT_OK(err, "skel_attach"))
|
| 20 | goto out;
|
| 21 |
|
| 22 | ASSERT_EQ(skel->bss->pass1, 0, "pass1 == 0");
|
| 23 | bpf_map_delete_elem(bpf_map__fd(skel->maps.hash1), &key);
|
| 24 | ASSERT_EQ(skel->bss->pass1, 1, "pass1 == 1");
|
| 25 | bpf_map_delete_elem(bpf_map__fd(skel->maps.hash1), &key);
|
| 26 | ASSERT_EQ(skel->bss->pass1, 2, "pass1 == 2");
|
| 27 |
|
| 28 | ASSERT_EQ(skel->bss->pass2, 0, "pass2 == 0");
|
| 29 | bpf_map_delete_elem(bpf_map__fd(skel->maps.hash2), &key);
|
| 30 | ASSERT_EQ(skel->bss->pass2, 1, "pass2 == 1");
|
| 31 | bpf_map_delete_elem(bpf_map__fd(skel->maps.hash2), &key);
|
| 32 | ASSERT_EQ(skel->bss->pass2, 2, "pass2 == 2");
|
| 33 |
|
| 34 | err = bpf_prog_get_info_by_fd(bpf_program__fd(skel->progs.on_delete),
|
| 35 | &prog_info, &prog_info_len);
|
| 36 | if (!ASSERT_OK(err, "get_prog_info"))
|
| 37 | goto out;
|
| 38 | ASSERT_EQ(prog_info.recursion_misses, 2, "recursion_misses");
|
| 39 | out:
|
| 40 | recursion__destroy(skel);
|
| 41 | }
|