bpf/selftests: fold test_current_pid_tgid_new_ns into test_progs.
Subsystems (5)
PATCH v11 1/1 bpf/selftests: fold test_current_pid_tgid_new_ns into test_progs.
Currently tests for bpf_get_ns_current_pid_tgid() are outside test_progs. This change folds test cases into test_progs.
Changes from v10:
- Code style fixes.
- Remove redundant code.
--- tools/testing/selftests/bpf/.gitignore | 1 - tools/testing/selftests/bpf/Makefile | 3 +- .../bpf/prog_tests/ns_current_pid_tgid.c | 118 ++++++------- .../bpf/progs/test_ns_current_pid_tgid.c | 28 +-- .../bpf/test_current_pid_tgid_new_ns.c | 160 ------------------ 5 files changed, 69 insertions(+), 241 deletions(-) delete mode 100644 tools/testing/selftests/bpf/test_current_pid_tgid_new_ns.c
tools/testing/selftests/bpf/.gitignore +0 -1
@@ -26,7 +26,6 @@ test_tcpnotify_user test_libbpf test_tcp_check_syncookie_user test_sysctl -test_current_pid_tgid_new_ns xdping test_cpp *.skel.h
tools/testing/selftests/bpf/Makefile +1 -2
@@ -35,8 +35,7 @@ TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test test_sock test_sockmap get_cgroup_id_user test_socket_cookie \ test_cgroup_storage \ test_netcnt test_tcpnotify_user test_sysctl \ - test_progs-no_alu32 \ - test_current_pid_tgid_new_ns + test_progs-no_alu32 # Also test bpf-gcc, if present ifneq ($(BPF_GCC),)
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +59 -59
144 lines not on this page · raw message
tools/testing/selftests/bpf/progs/test_ns_current_pid_tgid.c +9 -19
@@ -5,31 +5,21 @@#include <stdint.h> #include <bpf/bpf_helpers.h> -static volatile struct { -__u64 dev; -__u64 ino; -__u64 pid_tgid; -__u64 user_pid_tgid; -} res; +__u64 user_pid =0 ; +__u64 user_tgid =0 ; +__u64 dev =0 ; +__u64 ino =0 ; -SEC("raw_tracepoint/sys_enter") -int trace (void *ctx) +SEC("tracepoint/syscalls/sys_enter_nanosleep") +int handler (const void *ctx) { -__u64 ns_pid_tgid, expected_pid;struct bpf_pidns_info nsdata; -__u32 key =0 ; -if (bpf_get_ns_current_pid_tgid (res.dev, res.ino, &nsdata, -sizeof (struct bpf_pidns_info ))) +if (bpf_get_ns_current_pid_tgid (dev, ino, &nsdata,sizeof (struct bpf_pidns_info )))return 0 ; - ns_pid_tgid = (__u64 )nsdata.tgid <<32 | nsdata.pid; - expected_pid = res.user_pid_tgid; - -if (expected_pid != ns_pid_tgid) -return 0 ; - - res.pid_tgid = ns_pid_tgid; + user_pid = nsdata.pid; + user_tgid = nsdata.tgid;return 0 ; }
tools/testing/selftests/bpf/test_current_pid_tgid_new_ns.c deleted +0 -160
160 lines not on this page · raw message
Signature · 1 line
2.20.1
Quoted 19 lines · Carlos Neira
Currently tests for
bpf_get_ns_current_pid_tgid()are outsidetest_progs. This change folds test cases intotest_progs.Changes from v10:
- Code style fixes.
- Remove redundant code.Signed-off-by Carlos Neira <[email protected]>--- tools/testing/selftests/bpf/.gitignore | 1 - tools/testing/selftests/bpf/Makefile | 3 +- .../bpf/prog_tests/ns_current_pid_tgid.c | 118 ++++++------- .../bpf/progs/test_ns_current_pid_tgid.c | 28 +-- .../bpf/test_current_pid_tgid_new_ns.c | 160 ------------------ 5 files changed, 69 insertions(+), 241 deletions(-) delete mode 100644 tools/testing/selftests/bpf/test_current_pid_tgid_new_ns.c
[...]
Quoted 17 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +5
-10-void test_ns_current_pid_tgid (void ) +static int test_current_pid_tgid (void *args) { -const char *probe_name ="raw_tracepoint/sys_enter" ; -const char *file ="test_ns_current_pid_tgid.o" ; -int err, key =0 , duration =0 ; -struct bpf_link *link =NULL ; -struct bpf_program *prog; -struct bpf_map *bss_map; -struct bpf_object *obj; -struct bss bss; +struct test_ns_current_pid_tgid__bss *bss; +struct test_ns_current_pid_tgid *skel; +int err =0 , duration =0 ; +pid_t tgid, pid;struct stat st; -__u64 id;
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c line 29
Quoted 10 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +2
-6- - obj =bpf_object__open_file (file,NULL ); -if (CHECK (IS_ERR (obj),"obj_open" ,"err %ld\n" ,PTR_ERR (obj))) -return ; - err =bpf_object__load (obj); -if (CHECK (err,"obj_load" ,"err %d errno %d\n" , err, errno)) + skel =test_ns_current_pid_tgid__open_and_load (); +if (CHECK (!skel,"skel_open_load" ,"failed to load skeleton\n" )) goto cleanup;
err will be 0 here, and test failure won't be detected (if it happens in a child process), right? please check all the other cases. It might be better to assign err = -1 at the beginning and just assign err = 0 after all tests succeeded, right before the clean up.
Quoted 7 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +2
-3- bss_map =bpf_object__find_map_by_name (obj,"test_ns_.bss" ); -if (CHECK (!bss_map,"find_bss_map" ,"failed\n" )) - goto cleanup; + pid =syscall (SYS_gettid); + tgid =getpid ();
[...]
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c line 76
Quoted 8 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +5
-3-cleanup: -bpf_link__destroy (link); -bpf_object__close (obj); +if (CHECK (waitpid (cpid, &wstatus,0 ) ==-1 ,"waitpid" ,strerror (errno))) +exit (EXIT_FAILURE ); + +if (CHECK (WEXITSTATUS (wstatus) !=0 ,"newns_pidtgid" ,"failed" )) +exit (EXIT_FAILURE );
this exit will happen in the parent process, which is test_progs test runner itself, right? Which will prematurely stop all of the remaining tests to run. I.e., you can't just exit(), you need to just return and let test_progs keep running.
Quoted 9 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +8
-0+} + +void test_ns_current_pid_tgid (void ) +{ +if (test__start_subtest ("ns_current_pid_tgid_root_ns" )) +test_current_pid_tgid (NULL ); +if (test__start_subtest ("ns_current_pid_tgid_new_ns" )) +test_ns_current_pid_tgid_new_ns (); }
[...]