selftests/bpf: test_progs: add test__join_cgroup helper
test__join_cgroup() combines the following operations that usually go hand in hand and returns cgroup fd: * setup cgroup environment (make sure cgroupfs is mounted) * mkdir cgroup * join cgroup It also marks a test as a "cgroup cleanup needed" and removes cgroup state after the test is done. Signed-off-by: Stanislav Fomichev <sdf@google.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
618916a4bf
commit
88dadc6327
@ -2,6 +2,7 @@
|
||||
/* Copyright (c) 2017 Facebook
|
||||
*/
|
||||
#include "test_progs.h"
|
||||
#include "cgroup_helpers.h"
|
||||
#include "bpf_rlimit.h"
|
||||
#include <argp.h>
|
||||
#include <string.h>
|
||||
@ -17,6 +18,7 @@ struct prog_test_def {
|
||||
int error_cnt;
|
||||
int skip_cnt;
|
||||
bool tested;
|
||||
bool need_cgroup_cleanup;
|
||||
|
||||
const char *subtest_name;
|
||||
int subtest_num;
|
||||
@ -122,6 +124,39 @@ void test__fail(void)
|
||||
env.test->error_cnt++;
|
||||
}
|
||||
|
||||
int test__join_cgroup(const char *path)
|
||||
{
|
||||
int fd;
|
||||
|
||||
if (!env.test->need_cgroup_cleanup) {
|
||||
if (setup_cgroup_environment()) {
|
||||
fprintf(stderr,
|
||||
"#%d %s: Failed to setup cgroup environment\n",
|
||||
env.test->test_num, env.test->test_name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
env.test->need_cgroup_cleanup = true;
|
||||
}
|
||||
|
||||
fd = create_and_get_cgroup(path);
|
||||
if (fd < 0) {
|
||||
fprintf(stderr,
|
||||
"#%d %s: Failed to create cgroup '%s' (errno=%d)\n",
|
||||
env.test->test_num, env.test->test_name, path, errno);
|
||||
return fd;
|
||||
}
|
||||
|
||||
if (join_cgroup(path)) {
|
||||
fprintf(stderr,
|
||||
"#%d %s: Failed to join cgroup '%s' (errno=%d)\n",
|
||||
env.test->test_num, env.test->test_name, path, errno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
struct ipv4_packet pkt_v4 = {
|
||||
.eth.h_proto = __bpf_constant_htons(ETH_P_IP),
|
||||
.iph.ihl = 5,
|
||||
@ -530,6 +565,9 @@ int main(int argc, char **argv)
|
||||
fprintf(env.stdout, "#%d %s:%s\n",
|
||||
test->test_num, test->test_name,
|
||||
test->error_cnt ? "FAIL" : "OK");
|
||||
|
||||
if (test->need_cgroup_cleanup)
|
||||
cleanup_cgroup_environment();
|
||||
}
|
||||
stdio_restore();
|
||||
printf("Summary: %d/%d PASSED, %d SKIPPED, %d FAILED\n",
|
||||
|
Reference in New Issue
Block a user