1 // SPDX-License-Identifier: LGPL-2.1 OR BSD-2-Clause 2 /* Copyright (c) 2026 Meta Platforms, Inc. and affiliates. */ 3 #include <test_progs.h> 4 #include <unistd.h> 5 6 #include <libarena/common.h> 7 #include <libarena/asan.h> 8 #include <libarena/buddy.h> 9 #include <libarena/userspace.h> 10 11 #include "libarena/libarena.skel.h" 12 13 static void run_libarena_test(struct libarena *skel, struct bpf_program *prog, 14 const char *name) 15 { 16 int ret; 17 18 if (!strstr(name, "test_buddy")) { 19 ret = libarena_run_prog(bpf_program__fd(skel->progs.arena_buddy_reset)); 20 if (!ASSERT_OK(ret, "arena_buddy_reset")) 21 return; 22 } 23 24 ret = libarena_run_prog(bpf_program__fd(prog)); 25 26 ASSERT_OK(ret, name); 27 28 } 29 30 void test_libarena(void) 31 { 32 struct arena_alloc_reserve_args args; 33 struct libarena *skel; 34 struct bpf_program *prog; 35 int ret; 36 37 skel = libarena__open_and_load(); 38 if (!ASSERT_OK_PTR(skel, "open_and_load")) 39 return; 40 41 ret = libarena__attach(skel); 42 if (!ASSERT_OK(ret, "attach")) 43 goto out; 44 45 args.nr_pages = ARENA_RESERVE_PAGES_DFL; 46 47 ret = libarena_run_prog_args(bpf_program__fd(skel->progs.arena_alloc_reserve), 48 &args, sizeof(args)); 49 if (!ASSERT_OK(ret, "arena_alloc_reserve")) 50 goto out; 51 52 bpf_object__for_each_program(prog, skel->obj) { 53 const char *name = bpf_program__name(prog); 54 55 if (!libarena_is_test_prog(name)) 56 continue; 57 58 if (!test__start_subtest(name)) 59 continue; 60 61 run_libarena_test(skel, prog, name); 62 } 63 64 out: 65 libarena__destroy(skel); 66 } 67