1 // SPDX-License-Identifier: GPL-2.0
2
3 #include <sys/stat.h>
4 #include <sys/sysmacros.h>
5 #include "test_progs.h"
6 #include "cgroup_helpers.h"
7 #include "get_cgroup_id_kern.skel.h"
8
9 #define TEST_CGROUP "/test-bpf-get-cgroup-id/"
10
test_cgroup_get_current_cgroup_id(void)11 void test_cgroup_get_current_cgroup_id(void)
12 {
13 struct get_cgroup_id_kern *skel;
14 const struct timespec req = {
15 .tv_sec = 0,
16 .tv_nsec = 1,
17 };
18 int cgroup_fd;
19 __u64 ucgid;
20
21 cgroup_fd = cgroup_setup_and_join(TEST_CGROUP);
22 if (!ASSERT_OK_FD(cgroup_fd, "cgroup switch"))
23 return;
24
25 skel = get_cgroup_id_kern__open_and_load();
26 if (!ASSERT_OK_PTR(skel, "load program"))
27 goto cleanup_cgroup;
28
29 if (!ASSERT_OK(get_cgroup_id_kern__attach(skel), "attach bpf program"))
30 goto cleanup_progs;
31
32 skel->bss->expected_pid = getpid();
33 /* trigger the syscall on which is attached the tested prog */
34 if (!ASSERT_OK(syscall(__NR_nanosleep, &req, NULL), "nanosleep"))
35 goto cleanup_progs;
36
37 ucgid = get_cgroup_id(TEST_CGROUP);
38
39 ASSERT_EQ(skel->bss->cg_id, ucgid, "compare cgroup ids");
40
41 cleanup_progs:
42 get_cgroup_id_kern__destroy(skel);
43 cleanup_cgroup:
44 close(cgroup_fd);
45 cleanup_cgroup_environment();
46 }
47