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:

committed by
Alexei Starovoitov

parent
e87fd8bae4
commit
329e38f76c
@@ -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();
|
||||
|
Reference in New Issue
Block a user