72 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */3#include <test_progs.h>4#include <sys/mman.h>5#include <network_helpers.h>6#include <sys/user.h>7#ifndef PAGE_SIZE /* on some archs it comes in sys/user.h */8#include <unistd.h>9#define PAGE_SIZE getpagesize()10#endif11 12#include "bpf_arena_list.h"13#include "arena_list.skel.h"14 15struct elem {16 struct arena_list_node node;17 __u64 value;18};19 20static int list_sum(struct arena_list_head *head)21{22 struct elem __arena *n;23 int sum = 0;24 25 list_for_each_entry(n, head, node)26 sum += n->value;27 return sum;28}29 30static void test_arena_list_add_del(int cnt)31{32 LIBBPF_OPTS(bpf_test_run_opts, opts);33 struct arena_list *skel;34 int expected_sum = (u64)cnt * (cnt - 1) / 2;35 int ret, sum;36 37 skel = arena_list__open_and_load();38 if (!ASSERT_OK_PTR(skel, "arena_list__open_and_load"))39 return;40 41 skel->bss->cnt = cnt;42 ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.arena_list_add), &opts);43 ASSERT_OK(ret, "ret_add");44 ASSERT_OK(opts.retval, "retval");45 if (skel->bss->skip) {46 printf("%s:SKIP:compiler doesn't support arena_cast\n", __func__);47 test__skip();48 goto out;49 }50 sum = list_sum(skel->bss->list_head);51 ASSERT_EQ(sum, expected_sum, "sum of elems");52 ASSERT_EQ(skel->arena->arena_sum, expected_sum, "__arena sum of elems");53 ASSERT_EQ(skel->arena->test_val, cnt + 1, "num of elems");54 55 ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.arena_list_del), &opts);56 ASSERT_OK(ret, "ret_del");57 sum = list_sum(skel->bss->list_head);58 ASSERT_EQ(sum, 0, "sum of list elems after del");59 ASSERT_EQ(skel->bss->list_sum, expected_sum, "sum of list elems computed by prog");60 ASSERT_EQ(skel->arena->arena_sum, expected_sum, "__arena sum of elems");61out:62 arena_list__destroy(skel);63}64 65void test_arena_list(void)66{67 if (test__start_subtest("arena_list_1"))68 test_arena_list_add_del(1);69 if (test__start_subtest("arena_list_1000"))70 test_arena_list_add_del(1000);71}72