1 // SPDX-License-Identifier: GPL-2.0 2 /* Copyright (c) 2022 Facebook */ 3 4 #include <test_progs.h> 5 #include "dynptr_fail.skel.h" 6 #include "dynptr_success.skel.h" 7 8 static struct { 9 const char *prog_name; 10 const char *expected_err_msg; 11 } dynptr_tests[] = { 12 /* success cases */ 13 {"test_read_write", NULL}, 14 {"test_data_slice", NULL}, 15 {"test_ringbuf", NULL}, 16 }; 17 18 static void verify_success(const char *prog_name) 19 { 20 struct dynptr_success *skel; 21 struct bpf_program *prog; 22 struct bpf_link *link; 23 24 skel = dynptr_success__open(); 25 if (!ASSERT_OK_PTR(skel, "dynptr_success__open")) 26 return; 27 28 skel->bss->pid = getpid(); 29 30 dynptr_success__load(skel); 31 if (!ASSERT_OK_PTR(skel, "dynptr_success__load")) 32 goto cleanup; 33 34 prog = bpf_object__find_program_by_name(skel->obj, prog_name); 35 if (!ASSERT_OK_PTR(prog, "bpf_object__find_program_by_name")) 36 goto cleanup; 37 38 link = bpf_program__attach(prog); 39 if (!ASSERT_OK_PTR(link, "bpf_program__attach")) 40 goto cleanup; 41 42 usleep(1); 43 44 ASSERT_EQ(skel->bss->err, 0, "err"); 45 46 bpf_link__destroy(link); 47 48 cleanup: 49 dynptr_success__destroy(skel); 50 } 51 52 void test_dynptr(void) 53 { 54 int i; 55 56 for (i = 0; i < ARRAY_SIZE(dynptr_tests); i++) { 57 if (!test__start_subtest(dynptr_tests[i].prog_name)) 58 continue; 59 60 verify_success(dynptr_tests[i].prog_name); 61 } 62 63 RUN_TESTS(dynptr_fail); 64 } 65