mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
selftests/bpf: Skip tests whose objects were not built
When both run_test and run_serial_test are NULL (because the corresponding .test.o was not compiled), mark the test as not built instead of fatally aborting. Report these tests as "SKIP (not built)" in per-test output and include them in the skip count so they remain visible in CI results and JSON output. The summary line shows the not-built count when nonzero: Summary: 50/55 PASSED, 5 SKIPPED (3 not built), 0 FAILED Tests filtered out by -t/-n remain invisible as before; only genuinely unbuilt tests are surfaced. Signed-off-by: Ricardo B. Marlière <rbm@suse.com> Link: https://lore.kernel.org/r/20260602-selftests-bpf_misconfig-v12-7-27f898b3ba26@suse.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
9c4de137a9
commit
aeb73a9f30
|
|
@ -165,6 +165,8 @@ struct prog_test_def {
|
|||
void (*run_test)(void);
|
||||
void (*run_serial_test)(void);
|
||||
bool should_run;
|
||||
bool not_built;
|
||||
bool selected;
|
||||
bool need_cgroup_cleanup;
|
||||
bool should_tmon;
|
||||
};
|
||||
|
|
@ -372,6 +374,8 @@ static void print_test_result(const struct prog_test_def *test, const struct tes
|
|||
fprintf(env.stdout_saved, "#%-*d %s:", TEST_NUM_WIDTH, test->test_num, test->test_name);
|
||||
if (test_state->error_cnt)
|
||||
fprintf(env.stdout_saved, "FAIL");
|
||||
else if (test->not_built)
|
||||
fprintf(env.stdout_saved, "SKIP (not built)");
|
||||
else if (!skipped_cnt)
|
||||
fprintf(env.stdout_saved, "OK");
|
||||
else if (skipped_cnt == subtests_cnt || !subtests_cnt)
|
||||
|
|
@ -1641,6 +1645,7 @@ static void calculate_summary_and_print_errors(struct test_env *env)
|
|||
json_writer_t *w = NULL;
|
||||
|
||||
for (i = 0; i < prog_test_cnt; i++) {
|
||||
struct prog_test_def *test = &prog_test_defs[i];
|
||||
struct test_state *state = &test_states[i];
|
||||
|
||||
if (!state->tested)
|
||||
|
|
@ -1651,7 +1656,7 @@ static void calculate_summary_and_print_errors(struct test_env *env)
|
|||
|
||||
if (state->error_cnt)
|
||||
fail_cnt++;
|
||||
else
|
||||
else if (!test->not_built)
|
||||
succ_cnt++;
|
||||
}
|
||||
|
||||
|
|
@ -1700,8 +1705,13 @@ static void calculate_summary_and_print_errors(struct test_env *env)
|
|||
if (env->json)
|
||||
fclose(env->json);
|
||||
|
||||
printf("Summary: %d/%d PASSED, %d SKIPPED, %d FAILED\n",
|
||||
succ_cnt, sub_succ_cnt, skip_cnt, fail_cnt);
|
||||
if (env->not_built_cnt)
|
||||
printf("Summary: %d/%d PASSED, %d SKIPPED (%d not built), %d FAILED\n",
|
||||
succ_cnt, sub_succ_cnt, skip_cnt, env->not_built_cnt,
|
||||
fail_cnt);
|
||||
else
|
||||
printf("Summary: %d/%d PASSED, %d SKIPPED, %d FAILED\n",
|
||||
succ_cnt, sub_succ_cnt, skip_cnt, fail_cnt);
|
||||
|
||||
env->succ_cnt = succ_cnt;
|
||||
env->sub_succ_cnt = sub_succ_cnt;
|
||||
|
|
@ -1772,6 +1782,19 @@ static void server_main(void)
|
|||
run_one_test(i);
|
||||
}
|
||||
|
||||
/* mark not-built tests as skipped */
|
||||
for (int i = 0; i < prog_test_cnt; i++) {
|
||||
struct prog_test_def *test = &prog_test_defs[i];
|
||||
struct test_state *state = &test_states[i];
|
||||
|
||||
if (test->not_built && test->selected) {
|
||||
state->tested = true;
|
||||
state->skip_cnt = 1;
|
||||
env.not_built_cnt++;
|
||||
print_test_result(test, state);
|
||||
}
|
||||
}
|
||||
|
||||
/* generate summary */
|
||||
fflush(stderr);
|
||||
fflush(stdout);
|
||||
|
|
@ -2046,15 +2069,20 @@ int main(int argc, char **argv)
|
|||
struct prog_test_def *test = &prog_test_defs[i];
|
||||
|
||||
test->test_num = i + 1;
|
||||
test->should_run = should_run(&env.test_selector,
|
||||
test->test_num, test->test_name);
|
||||
test->selected = should_run(&env.test_selector,
|
||||
test->test_num, test->test_name);
|
||||
test->should_run = test->selected;
|
||||
|
||||
if ((test->run_test == NULL && test->run_serial_test == NULL) ||
|
||||
(test->run_test != NULL && test->run_serial_test != NULL)) {
|
||||
if (test->run_test && test->run_serial_test) {
|
||||
fprintf(stderr, "Test %d:%s must have either test_%s() or serial_test_%sl() defined.\n",
|
||||
test->test_num, test->test_name, test->test_name, test->test_name);
|
||||
exit(EXIT_ERR_SETUP_INFRA);
|
||||
}
|
||||
if (!test->run_test && !test->run_serial_test) {
|
||||
test->not_built = true;
|
||||
test->should_run = false;
|
||||
continue;
|
||||
}
|
||||
if (test->should_run)
|
||||
test->should_tmon = should_tmon(&env.tmon_selector, test->test_name);
|
||||
}
|
||||
|
|
@ -2106,9 +2134,18 @@ int main(int argc, char **argv)
|
|||
|
||||
for (i = 0; i < prog_test_cnt; i++) {
|
||||
struct prog_test_def *test = &prog_test_defs[i];
|
||||
struct test_state *state = &test_states[i];
|
||||
|
||||
if (!test->should_run)
|
||||
if (!test->should_run) {
|
||||
if (test->not_built && test->selected &&
|
||||
!env.get_test_cnt && !env.list_test_names) {
|
||||
state->tested = true;
|
||||
state->skip_cnt = 1;
|
||||
env.not_built_cnt++;
|
||||
print_test_result(test, state);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (env.get_test_cnt) {
|
||||
env.succ_cnt++;
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@ struct test_env {
|
|||
int sub_succ_cnt; /* successful sub-tests */
|
||||
int fail_cnt; /* total failed tests + sub-tests */
|
||||
int skip_cnt; /* skipped tests */
|
||||
int not_built_cnt; /* tests not built */
|
||||
|
||||
int saved_netns_fd;
|
||||
int workers; /* number of worker process */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user