82 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2021 Facebook */3#include <test_progs.h>4#include "syscall.skel.h"5 6struct args {7 __u64 log_buf;8 __u32 log_size;9 int max_entries;10 int map_fd;11 int prog_fd;12 int btf_fd;13};14 15static void test_syscall_load_prog(void)16{17 static char verifier_log[8192];18 struct args ctx = {19 .max_entries = 1024,20 .log_buf = (uintptr_t) verifier_log,21 .log_size = sizeof(verifier_log),22 };23 LIBBPF_OPTS(bpf_test_run_opts, tattr,24 .ctx_in = &ctx,25 .ctx_size_in = sizeof(ctx),26 );27 struct syscall *skel = NULL;28 __u64 key = 12, value = 0;29 int err, prog_fd;30 31 skel = syscall__open_and_load();32 if (!ASSERT_OK_PTR(skel, "skel_load"))33 goto cleanup;34 35 prog_fd = bpf_program__fd(skel->progs.load_prog);36 err = bpf_prog_test_run_opts(prog_fd, &tattr);37 ASSERT_EQ(err, 0, "err");38 ASSERT_EQ(tattr.retval, 1, "retval");39 ASSERT_GT(ctx.map_fd, 0, "ctx.map_fd");40 ASSERT_GT(ctx.prog_fd, 0, "ctx.prog_fd");41 ASSERT_OK(memcmp(verifier_log, "processed", sizeof("processed") - 1),42 "verifier_log");43 44 err = bpf_map_lookup_elem(ctx.map_fd, &key, &value);45 ASSERT_EQ(err, 0, "map_lookup");46 ASSERT_EQ(value, 34, "map lookup value");47cleanup:48 syscall__destroy(skel);49 if (ctx.prog_fd > 0)50 close(ctx.prog_fd);51 if (ctx.map_fd > 0)52 close(ctx.map_fd);53 if (ctx.btf_fd > 0)54 close(ctx.btf_fd);55}56 57static void test_syscall_update_outer_map(void)58{59 LIBBPF_OPTS(bpf_test_run_opts, opts);60 struct syscall *skel;61 int err, prog_fd;62 63 skel = syscall__open_and_load();64 if (!ASSERT_OK_PTR(skel, "skel_load"))65 goto cleanup;66 67 prog_fd = bpf_program__fd(skel->progs.update_outer_map);68 err = bpf_prog_test_run_opts(prog_fd, &opts);69 ASSERT_EQ(err, 0, "err");70 ASSERT_EQ(opts.retval, 1, "retval");71cleanup:72 syscall__destroy(skel);73}74 75void test_syscall(void)76{77 if (test__start_subtest("load_prog"))78 test_syscall_load_prog();79 if (test__start_subtest("update_outer_map"))80 test_syscall_update_outer_map();81}82