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 Zhouvoid 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