1*49e0263aSFeng Zhou // SPDX-License-Identifier: GPL-2.0
2*49e0263aSFeng Zhou /* Copyright (c) 2023 Bytedance */
3*49e0263aSFeng Zhou 
4*49e0263aSFeng Zhou #include <sys/syscall.h>
5*49e0263aSFeng Zhou #include <test_progs.h>
6*49e0263aSFeng Zhou #include <cgroup_helpers.h>
7*49e0263aSFeng Zhou #include "test_task_under_cgroup.skel.h"
8*49e0263aSFeng Zhou 
9*49e0263aSFeng Zhou #define FOO	"/foo"
10*49e0263aSFeng Zhou 
test_task_under_cgroup(void)11*49e0263aSFeng Zhou void test_task_under_cgroup(void)
12*49e0263aSFeng Zhou {
13*49e0263aSFeng Zhou 	struct test_task_under_cgroup *skel;
14*49e0263aSFeng Zhou 	int ret, foo;
15*49e0263aSFeng Zhou 	pid_t pid;
16*49e0263aSFeng Zhou 
17*49e0263aSFeng Zhou 	foo = test__join_cgroup(FOO);
18*49e0263aSFeng Zhou 	if (!ASSERT_OK(foo < 0, "cgroup_join_foo"))
19*49e0263aSFeng Zhou 		return;
20*49e0263aSFeng Zhou 
21*49e0263aSFeng Zhou 	skel = test_task_under_cgroup__open();
22*49e0263aSFeng Zhou 	if (!ASSERT_OK_PTR(skel, "test_task_under_cgroup__open"))
23*49e0263aSFeng Zhou 		goto cleanup;
24*49e0263aSFeng Zhou 
25*49e0263aSFeng Zhou 	skel->rodata->local_pid = getpid();
26*49e0263aSFeng Zhou 	skel->bss->remote_pid = getpid();
27*49e0263aSFeng Zhou 	skel->rodata->cgid = get_cgroup_id(FOO);
28*49e0263aSFeng Zhou 
29*49e0263aSFeng Zhou 	ret = test_task_under_cgroup__load(skel);
30*49e0263aSFeng Zhou 	if (!ASSERT_OK(ret, "test_task_under_cgroup__load"))
31*49e0263aSFeng Zhou 		goto cleanup;
32*49e0263aSFeng Zhou 
33*49e0263aSFeng Zhou 	ret = test_task_under_cgroup__attach(skel);
34*49e0263aSFeng Zhou 	if (!ASSERT_OK(ret, "test_task_under_cgroup__attach"))
35*49e0263aSFeng Zhou 		goto cleanup;
36*49e0263aSFeng Zhou 
37*49e0263aSFeng Zhou 	pid = fork();
38*49e0263aSFeng Zhou 	if (pid == 0)
39*49e0263aSFeng Zhou 		exit(0);
40*49e0263aSFeng Zhou 
41*49e0263aSFeng Zhou 	ret = (pid == -1);
42*49e0263aSFeng Zhou 	if (ASSERT_OK(ret, "fork process"))
43*49e0263aSFeng Zhou 		wait(NULL);
44*49e0263aSFeng Zhou 
45*49e0263aSFeng Zhou 	test_task_under_cgroup__detach(skel);
46*49e0263aSFeng Zhou 
47*49e0263aSFeng Zhou 	ASSERT_NEQ(skel->bss->remote_pid, skel->rodata->local_pid,
48*49e0263aSFeng Zhou 		   "test task_under_cgroup");
49*49e0263aSFeng Zhou 
50*49e0263aSFeng Zhou cleanup:
51*49e0263aSFeng Zhou 	test_task_under_cgroup__destroy(skel);
52*49e0263aSFeng Zhou 	close(foo);
53*49e0263aSFeng Zhou }
54