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 8*50a7cedbSJoanne Koong static const char * const success_tests[] = { 9*50a7cedbSJoanne Koong "test_read_write", 10*50a7cedbSJoanne Koong "test_data_slice", 11*50a7cedbSJoanne Koong "test_ringbuf", 120cf7052aSJoanne Koong }; 130cf7052aSJoanne Koong 140cf7052aSJoanne Koong static void verify_success(const char *prog_name) 150cf7052aSJoanne Koong { 160cf7052aSJoanne Koong struct dynptr_success *skel; 170cf7052aSJoanne Koong struct bpf_program *prog; 180cf7052aSJoanne Koong struct bpf_link *link; 190cf7052aSJoanne Koong 200cf7052aSJoanne Koong skel = dynptr_success__open(); 210cf7052aSJoanne Koong if (!ASSERT_OK_PTR(skel, "dynptr_success__open")) 220cf7052aSJoanne Koong return; 230cf7052aSJoanne Koong 240cf7052aSJoanne Koong skel->bss->pid = getpid(); 250cf7052aSJoanne Koong 260cf7052aSJoanne Koong dynptr_success__load(skel); 270cf7052aSJoanne Koong if (!ASSERT_OK_PTR(skel, "dynptr_success__load")) 280cf7052aSJoanne Koong goto cleanup; 290cf7052aSJoanne Koong 300cf7052aSJoanne Koong prog = bpf_object__find_program_by_name(skel->obj, prog_name); 310cf7052aSJoanne Koong if (!ASSERT_OK_PTR(prog, "bpf_object__find_program_by_name")) 320cf7052aSJoanne Koong goto cleanup; 330cf7052aSJoanne Koong 340cf7052aSJoanne Koong link = bpf_program__attach(prog); 350cf7052aSJoanne Koong if (!ASSERT_OK_PTR(link, "bpf_program__attach")) 360cf7052aSJoanne Koong goto cleanup; 370cf7052aSJoanne Koong 380cf7052aSJoanne Koong usleep(1); 390cf7052aSJoanne Koong 400cf7052aSJoanne Koong ASSERT_EQ(skel->bss->err, 0, "err"); 410cf7052aSJoanne Koong 420cf7052aSJoanne Koong bpf_link__destroy(link); 430cf7052aSJoanne Koong 440cf7052aSJoanne Koong cleanup: 450cf7052aSJoanne Koong dynptr_success__destroy(skel); 460cf7052aSJoanne Koong } 470cf7052aSJoanne Koong 480cf7052aSJoanne Koong void test_dynptr(void) 490cf7052aSJoanne Koong { 500cf7052aSJoanne Koong int i; 510cf7052aSJoanne Koong 52*50a7cedbSJoanne Koong for (i = 0; i < ARRAY_SIZE(success_tests); i++) { 53*50a7cedbSJoanne Koong if (!test__start_subtest(success_tests[i])) 540cf7052aSJoanne Koong continue; 550cf7052aSJoanne Koong 56*50a7cedbSJoanne Koong verify_success(success_tests[i]); 570cf7052aSJoanne Koong } 5826c386ecSAndrii Nakryiko 5926c386ecSAndrii Nakryiko RUN_TESTS(dynptr_fail); 600cf7052aSJoanne Koong } 61