Merge branch 'test_progs-improvements'
Jesper Dangaard Brouer says: ==================== V3: Reorder patches to cause less code churn. The BPF selftest 'test_progs' contains many tests, that cover all the different areas of the kernel where BPF is used. The CI system sees this as one test, which is impractical for identifying what team/engineer is responsible for debugging the problem. This patchset add some options that makes it easier to create a shell for-loop that invoke each (top-level) test avail in test_progs. Then each test FAIL/PASS result can be presented the CI system to have a separate bullet. (For Red Hat use-case in Beaker https://beaker-project.org/) Created a public script[1] that uses these features in an advanced way. Demonstrating howto reduce the number of (top-level) tests by grouping tests together via using the existing test pattern selection feature, and then using the new --list feature combined with exclude (-b) to get a list of remaining test names that was not part of the groups. [1] https://github.com/netoptimizer/prototype-kernel/blob/master/scripts/bpf_selftests_grouping.sh ==================== Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
commit
91f77560e4
|
@ -366,6 +366,8 @@ enum ARG_KEYS {
|
|||
ARG_TEST_NAME_BLACKLIST = 'b',
|
||||
ARG_VERIFIER_STATS = 's',
|
||||
ARG_VERBOSE = 'v',
|
||||
ARG_GET_TEST_CNT = 'c',
|
||||
ARG_LIST_TEST_NAMES = 'l',
|
||||
};
|
||||
|
||||
static const struct argp_option opts[] = {
|
||||
|
@ -379,6 +381,10 @@ static const struct argp_option opts[] = {
|
|||
"Output verifier statistics", },
|
||||
{ "verbose", ARG_VERBOSE, "LEVEL", OPTION_ARG_OPTIONAL,
|
||||
"Verbose output (use -vv or -vvv for progressively verbose output)" },
|
||||
{ "count", ARG_GET_TEST_CNT, NULL, 0,
|
||||
"Get number of selected top-level tests " },
|
||||
{ "list", ARG_LIST_TEST_NAMES, NULL, 0,
|
||||
"List test names that would run (without running them) " },
|
||||
{},
|
||||
};
|
||||
|
||||
|
@ -511,6 +517,12 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state)
|
|||
}
|
||||
}
|
||||
break;
|
||||
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;
|
||||
|
@ -654,6 +666,17 @@ int main(int argc, char **argv)
|
|||
test->test_num, test->test_name))
|
||||
continue;
|
||||
|
||||
if (env.get_test_cnt) {
|
||||
env.succ_cnt++;
|
||||
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)
|
||||
|
@ -677,9 +700,19 @@ int main(int argc, char **argv)
|
|||
cleanup_cgroup_environment();
|
||||
}
|
||||
stdio_restore();
|
||||
|
||||
if (env.get_test_cnt) {
|
||||
printf("%d\n", env.succ_cnt);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (env.list_test_names)
|
||||
goto out;
|
||||
|
||||
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);
|
||||
|
@ -687,5 +720,8 @@ int main(int argc, char **argv)
|
|||
free_str_set(&env.subtest_selector.whitelist);
|
||||
free(env.subtest_selector.num_set);
|
||||
|
||||
if (env.succ_cnt + env.fail_cnt + env.skip_cnt == 0)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
return env.fail_cnt ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -66,6 +66,8 @@ struct test_env {
|
|||
enum verbosity verbosity;
|
||||
|
||||
bool jit_enabled;
|
||||
bool get_test_cnt;
|
||||
bool list_test_names;
|
||||
|
||||
struct prog_test_def *test;
|
||||
FILE *stdout;
|
||||
|
|
Loading…
Reference in New Issue