Commit cd9c21d7 authored by Stanislav Fomichev's avatar Stanislav Fomichev Committed by Daniel Borkmann

selftests/bpf: test_progs: test__skip

Export test__skip() to indicate skipped tests and use it in
test_send_signal_nmi().

Cc: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 08eea4f3
...@@ -204,6 +204,7 @@ static int test_send_signal_nmi(void) ...@@ -204,6 +204,7 @@ static int test_send_signal_nmi(void)
if (errno == ENOENT) { if (errno == ENOENT) {
printf("%s:SKIP:no PERF_COUNT_HW_CPU_CYCLES\n", printf("%s:SKIP:no PERF_COUNT_HW_CPU_CYCLES\n",
__func__); __func__);
test__skip();
return 0; return 0;
} }
/* Let the test fail with a more informative message */ /* Let the test fail with a more informative message */
......
...@@ -17,6 +17,7 @@ struct prog_test_def { ...@@ -17,6 +17,7 @@ struct prog_test_def {
bool force_log; bool force_log;
int pass_cnt; int pass_cnt;
int error_cnt; int error_cnt;
int skip_cnt;
bool tested; bool tested;
const char *subtest_name; const char *subtest_name;
...@@ -56,6 +57,14 @@ static void dump_test_log(const struct prog_test_def *test, bool failed) ...@@ -56,6 +57,14 @@ static void dump_test_log(const struct prog_test_def *test, bool failed)
fseeko(stdout, 0, SEEK_SET); /* rewind */ fseeko(stdout, 0, SEEK_SET); /* rewind */
} }
static void skip_account(void)
{
if (env.test->skip_cnt) {
env.skip_cnt++;
env.test->skip_cnt = 0;
}
}
void test__end_subtest() void test__end_subtest()
{ {
struct prog_test_def *test = env.test; struct prog_test_def *test = env.test;
...@@ -65,6 +74,7 @@ void test__end_subtest() ...@@ -65,6 +74,7 @@ void test__end_subtest()
env.fail_cnt++; env.fail_cnt++;
else else
env.sub_succ_cnt++; env.sub_succ_cnt++;
skip_account();
dump_test_log(test, sub_error_cnt); dump_test_log(test, sub_error_cnt);
...@@ -105,6 +115,11 @@ void test__force_log() { ...@@ -105,6 +115,11 @@ void test__force_log() {
env.test->force_log = true; env.test->force_log = true;
} }
void test__skip(void)
{
env.test->skip_cnt++;
}
struct ipv4_packet pkt_v4 = { struct ipv4_packet pkt_v4 = {
.eth.h_proto = __bpf_constant_htons(ETH_P_IP), .eth.h_proto = __bpf_constant_htons(ETH_P_IP),
.iph.ihl = 5, .iph.ihl = 5,
...@@ -510,6 +525,7 @@ int main(int argc, char **argv) ...@@ -510,6 +525,7 @@ int main(int argc, char **argv)
env.fail_cnt++; env.fail_cnt++;
else else
env.succ_cnt++; env.succ_cnt++;
skip_account();
dump_test_log(test, test->error_cnt); dump_test_log(test, test->error_cnt);
...@@ -518,8 +534,8 @@ int main(int argc, char **argv) ...@@ -518,8 +534,8 @@ int main(int argc, char **argv)
test->error_cnt ? "FAIL" : "OK"); test->error_cnt ? "FAIL" : "OK");
} }
stdio_restore(); stdio_restore();
printf("Summary: %d/%d PASSED, %d FAILED\n", printf("Summary: %d/%d PASSED, %d SKIPPED, %d FAILED\n",
env.succ_cnt, env.sub_succ_cnt, env.fail_cnt); env.succ_cnt, env.sub_succ_cnt, env.skip_cnt, env.fail_cnt);
free(env.test_selector.num_set); free(env.test_selector.num_set);
free(env.subtest_selector.num_set); free(env.subtest_selector.num_set);
......
...@@ -64,6 +64,7 @@ struct test_env { ...@@ -64,6 +64,7 @@ struct test_env {
int succ_cnt; /* successful tests */ int succ_cnt; /* successful tests */
int sub_succ_cnt; /* successful sub-tests */ int sub_succ_cnt; /* successful sub-tests */
int fail_cnt; /* total failed tests + sub-tests */ int fail_cnt; /* total failed tests + sub-tests */
int skip_cnt; /* skipped tests */
}; };
extern int error_cnt; extern int error_cnt;
...@@ -72,6 +73,7 @@ extern struct test_env env; ...@@ -72,6 +73,7 @@ extern struct test_env env;
extern void test__force_log(); extern void test__force_log();
extern bool test__start_subtest(const char *name); extern bool test__start_subtest(const char *name);
extern void test__skip(void);
#define MAGIC_BYTES 123 #define MAGIC_BYTES 123
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment