mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 14:48:06 +00:00
selftest/bpf: centralize libbpf logging management for test_progs
Make test_progs test runner own libbpf logging. Also introduce two levels of verbosity: -v and -vv. First one will be used in subsequent patches to enable test log output always. Second one increases verbosity level of libbpf logging further to include debug output as well. Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
e87fd8bae4
commit
329e38f76c
3 changed files with 38 additions and 12 deletions
|
@ -70,10 +70,11 @@ void test_bpf_verif_scale(void)
|
|||
const char *cg_sysctl[] = {
|
||||
"./test_sysctl_loop1.o", "./test_sysctl_loop2.o",
|
||||
};
|
||||
libbpf_print_fn_t old_print_fn = NULL;
|
||||
int err, i;
|
||||
|
||||
if (verifier_stats)
|
||||
libbpf_set_print(libbpf_debug_print);
|
||||
old_print_fn = libbpf_set_print(libbpf_debug_print);
|
||||
|
||||
err = check_load("./loop3.o", BPF_PROG_TYPE_RAW_TRACEPOINT);
|
||||
printf("test_scale:loop3:%s\n", err ? (error_cnt--, "OK") : "FAIL");
|
||||
|
@ -97,4 +98,7 @@ void test_bpf_verif_scale(void)
|
|||
|
||||
err = check_load("./test_seg6_loop.o", BPF_PROG_TYPE_LWT_SEG6LOCAL);
|
||||
printf("test_scale:test_seg6_loop:%s\n", err ? "FAIL" : "OK");
|
||||
|
||||
if (verifier_stats)
|
||||
libbpf_set_print(old_print_fn);
|
||||
}
|
||||
|
|
|
@ -1,15 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <test_progs.h>
|
||||
|
||||
static int libbpf_debug_print(enum libbpf_print_level level,
|
||||
const char *format, va_list args)
|
||||
{
|
||||
if (level == LIBBPF_DEBUG)
|
||||
return 0;
|
||||
|
||||
return vfprintf(stderr, format, args);
|
||||
}
|
||||
|
||||
void test_reference_tracking(void)
|
||||
{
|
||||
const char *file = "./test_sk_lookup_kern.o";
|
||||
|
@ -36,9 +27,11 @@ void test_reference_tracking(void)
|
|||
|
||||
/* Expect verifier failure if test name has 'fail' */
|
||||
if (strstr(title, "fail") != NULL) {
|
||||
libbpf_set_print(NULL);
|
||||
libbpf_print_fn_t old_print_fn;
|
||||
|
||||
old_print_fn = libbpf_set_print(NULL);
|
||||
err = !bpf_program__load(prog, "GPL", 0);
|
||||
libbpf_set_print(libbpf_debug_print);
|
||||
libbpf_set_print(old_print_fn);
|
||||
} else {
|
||||
err = bpf_program__load(prog, "GPL", 0);
|
||||
}
|
||||
|
|
|
@ -186,6 +186,8 @@ enum ARG_KEYS {
|
|||
ARG_TEST_NUM = 'n',
|
||||
ARG_TEST_NAME = 't',
|
||||
ARG_VERIFIER_STATS = 's',
|
||||
|
||||
ARG_VERBOSE = 'v',
|
||||
};
|
||||
|
||||
static const struct argp_option opts[] = {
|
||||
|
@ -195,6 +197,8 @@ static const struct argp_option opts[] = {
|
|||
"Run tests with names containing NAME" },
|
||||
{ "verifier-stats", ARG_VERIFIER_STATS, NULL, 0,
|
||||
"Output verifier statistics", },
|
||||
{ "verbose", ARG_VERBOSE, "LEVEL", OPTION_ARG_OPTIONAL,
|
||||
"Verbose output (use -vv for extra verbose output)" },
|
||||
{},
|
||||
};
|
||||
|
||||
|
@ -202,12 +206,22 @@ struct test_env {
|
|||
int test_num_selector;
|
||||
const char *test_name_selector;
|
||||
bool verifier_stats;
|
||||
bool verbose;
|
||||
bool very_verbose;
|
||||
};
|
||||
|
||||
static struct test_env env = {
|
||||
.test_num_selector = -1,
|
||||
};
|
||||
|
||||
static int libbpf_print_fn(enum libbpf_print_level level,
|
||||
const char *format, va_list args)
|
||||
{
|
||||
if (!env.very_verbose && level == LIBBPF_DEBUG)
|
||||
return 0;
|
||||
return vfprintf(stderr, format, args);
|
||||
}
|
||||
|
||||
static error_t parse_arg(int key, char *arg, struct argp_state *state)
|
||||
{
|
||||
struct test_env *env = state->input;
|
||||
|
@ -229,6 +243,19 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state)
|
|||
case ARG_VERIFIER_STATS:
|
||||
env->verifier_stats = true;
|
||||
break;
|
||||
case ARG_VERBOSE:
|
||||
if (arg) {
|
||||
if (strcmp(arg, "v") == 0) {
|
||||
env->very_verbose = true;
|
||||
} else {
|
||||
fprintf(stderr,
|
||||
"Unrecognized verbosity setting ('%s'), only -v and -vv are supported\n",
|
||||
arg);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
env->verbose = true;
|
||||
break;
|
||||
case ARGP_KEY_ARG:
|
||||
argp_usage(state);
|
||||
break;
|
||||
|
@ -255,6 +282,8 @@ int main(int argc, char **argv)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
libbpf_set_print(libbpf_print_fn);
|
||||
|
||||
srand(time(NULL));
|
||||
|
||||
jit_enabled = is_jit_enabled();
|
||||
|
|
Loading…
Add table
Reference in a new issue