10cf7052aSJoanne Koong // SPDX-License-Identifier: GPL-2.0 20cf7052aSJoanne Koong /* Copyright (c) 2022 Facebook */ 30cf7052aSJoanne Koong 40cf7052aSJoanne Koong #include <test_progs.h> 50cf7052aSJoanne Koong #include "dynptr_fail.skel.h" 60cf7052aSJoanne Koong #include "dynptr_success.skel.h" 70cf7052aSJoanne Koong 80cf7052aSJoanne Koong static struct { 90cf7052aSJoanne Koong const char *prog_name; 100cf7052aSJoanne Koong const char *expected_err_msg; 110cf7052aSJoanne Koong } dynptr_tests[] = { 120cf7052aSJoanne Koong /* success cases */ 130cf7052aSJoanne Koong {"test_read_write", NULL}, 140cf7052aSJoanne Koong {"test_data_slice", NULL}, 150cf7052aSJoanne Koong {"test_ringbuf", NULL}, 160cf7052aSJoanne Koong }; 170cf7052aSJoanne Koong 180cf7052aSJoanne Koong static void verify_success(const char *prog_name) 190cf7052aSJoanne Koong { 200cf7052aSJoanne Koong struct dynptr_success *skel; 210cf7052aSJoanne Koong struct bpf_program *prog; 220cf7052aSJoanne Koong struct bpf_link *link; 230cf7052aSJoanne Koong 240cf7052aSJoanne Koong skel = dynptr_success__open(); 250cf7052aSJoanne Koong if (!ASSERT_OK_PTR(skel, "dynptr_success__open")) 260cf7052aSJoanne Koong return; 270cf7052aSJoanne Koong 280cf7052aSJoanne Koong skel->bss->pid = getpid(); 290cf7052aSJoanne Koong 300cf7052aSJoanne Koong dynptr_success__load(skel); 310cf7052aSJoanne Koong if (!ASSERT_OK_PTR(skel, "dynptr_success__load")) 320cf7052aSJoanne Koong goto cleanup; 330cf7052aSJoanne Koong 340cf7052aSJoanne Koong prog = bpf_object__find_program_by_name(skel->obj, prog_name); 350cf7052aSJoanne Koong if (!ASSERT_OK_PTR(prog, "bpf_object__find_program_by_name")) 360cf7052aSJoanne Koong goto cleanup; 370cf7052aSJoanne Koong 380cf7052aSJoanne Koong link = bpf_program__attach(prog); 390cf7052aSJoanne Koong if (!ASSERT_OK_PTR(link, "bpf_program__attach")) 400cf7052aSJoanne Koong goto cleanup; 410cf7052aSJoanne Koong 420cf7052aSJoanne Koong usleep(1); 430cf7052aSJoanne Koong 440cf7052aSJoanne Koong ASSERT_EQ(skel->bss->err, 0, "err"); 450cf7052aSJoanne Koong 460cf7052aSJoanne Koong bpf_link__destroy(link); 470cf7052aSJoanne Koong 480cf7052aSJoanne Koong cleanup: 490cf7052aSJoanne Koong dynptr_success__destroy(skel); 500cf7052aSJoanne Koong } 510cf7052aSJoanne Koong 520cf7052aSJoanne Koong void test_dynptr(void) 530cf7052aSJoanne Koong { 540cf7052aSJoanne Koong int i; 550cf7052aSJoanne Koong 560cf7052aSJoanne Koong for (i = 0; i < ARRAY_SIZE(dynptr_tests); i++) { 570cf7052aSJoanne Koong if (!test__start_subtest(dynptr_tests[i].prog_name)) 580cf7052aSJoanne Koong continue; 590cf7052aSJoanne Koong 600cf7052aSJoanne Koong verify_success(dynptr_tests[i].prog_name); 610cf7052aSJoanne Koong } 62*26c386ecSAndrii Nakryiko 63*26c386ecSAndrii Nakryiko RUN_TESTS(dynptr_fail); 640cf7052aSJoanne Koong } 65