Re: [PATCH bpf-next] selftests/bpf: test_progs option for listing test names

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 30, 2020 at 8:40 AM Jesper Dangaard Brouer
<brouer@xxxxxxxxxx> wrote:
>
> The program test_progs have some very useful ability to specify a list of
> test name substrings for selecting which tests to run.
>
> This patch add the ability to list the selected test names without running
> them. This is practical for seeing which tests gets selected with given
> select arguments (which can also contain a exclude list via --name-blacklist).
>
> This output can also be used by shell-scripts in a for-loop:
>
>  for N in $(./test_progs --list -t xdp); do \
>    ./test_progs -t $N 2>&1 > result_test_${N}.log & \
>  done ; wait
>
> Signed-off-by: Jesper Dangaard Brouer <brouer@xxxxxxxxxx>
> ---
>  tools/testing/selftests/bpf/test_progs.c |   20 ++++++++++++++++++++
>  tools/testing/selftests/bpf/test_progs.h |    1 +
>  2 files changed, 21 insertions(+)
>
> diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c
> index 1aa5360c427f..36abc3d4a8e2 100644
> --- a/tools/testing/selftests/bpf/test_progs.c
> +++ b/tools/testing/selftests/bpf/test_progs.c
> @@ -367,6 +367,7 @@ enum ARG_KEYS {
>         ARG_VERIFIER_STATS = 's',
>         ARG_VERBOSE = 'v',
>         ARG_GET_TEST_CNT = 'c',
> +       ARG_LIST_TEST_NAMES = 'l',
>  };
>
>  static const struct argp_option opts[] = {
> @@ -382,6 +383,8 @@ static const struct argp_option opts[] = {
>           "Verbose output (use -vv or -vvv for progressively verbose output)" },
>         { "count", ARG_GET_TEST_CNT, NULL, 0,
>           "Get number of top-level tests " },
> +       { "list", ARG_LIST_TEST_NAMES, NULL, 0,
> +         "List test names that would run (without running them) " },
>         {},
>  };
>
> @@ -517,6 +520,9 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state)
>         case ARG_GET_TEST_CNT:
>                 env->get_test_cnt = true;
>                 break;
> +       case ARG_LIST_TEST_NAMES:
> +               env->list_test_names = true;
> +               break;
>         case ARGP_KEY_ARG:
>                 argp_usage(state);
>                 break;
> @@ -665,6 +671,12 @@ int main(int argc, char **argv)
>                                 test->test_num, test->test_name))
>                         continue;
>
> +               if (env.list_test_names) {
> +                       fprintf(env.stdout, "%s\n", test->test_name);
> +                       env.succ_cnt++;
> +                       continue;
> +               }
> +
>                 test->run_test();
>                 /* ensure last sub-test is finalized properly */
>                 if (test->subtest_name)
> @@ -688,9 +700,17 @@ int main(int argc, char **argv)
>                         cleanup_cgroup_environment();
>         }
>         stdio_restore();
> +
> +       if (env.list_test_names) {
> +               if (env.succ_cnt == 0)
> +                       env.fail_cnt = 1;
> +               goto out;
> +       }
> +

Why failure if no test matched? Is that to catch bugs in whitelisting?

>         fprintf(stdout, "Summary: %d/%d PASSED, %d SKIPPED, %d FAILED\n",
>                 env.succ_cnt, env.sub_succ_cnt, env.skip_cnt, env.fail_cnt);
>
> +out:
>         free_str_set(&env.test_selector.blacklist);
>         free_str_set(&env.test_selector.whitelist);
>         free(env.test_selector.num_set);
> diff --git a/tools/testing/selftests/bpf/test_progs.h b/tools/testing/selftests/bpf/test_progs.h
> index 0030584619c3..ec31f382e7fd 100644
> --- a/tools/testing/selftests/bpf/test_progs.h
> +++ b/tools/testing/selftests/bpf/test_progs.h
> @@ -67,6 +67,7 @@ struct test_env {
>
>         bool jit_enabled;
>         bool get_test_cnt;
> +       bool list_test_names;
>
>         struct prog_test_def *test;
>         FILE *stdout;
>
>



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux