selftests/bpf: test_progs: test__skip
authorStanislav Fomichev <sdf@google.com>
Wed, 21 Aug 2019 23:44:24 +0000 (16:44 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 27 Aug 2019 22:35:40 +0000 (00:35 +0200)
Export test__skip() to indicate skipped tests and use it in
test_send_signal_nmi().

Cc: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/testing/selftests/bpf/prog_tests/send_signal.c
tools/testing/selftests/bpf/test_progs.c
tools/testing/selftests/bpf/test_progs.h

index 1575f0a1f58659752e848848fe23e475daa16c9d..40c2c5efdd3e9723538c54732661799bd4bc9acc 100644 (file)
@@ -204,6 +204,7 @@ static int test_send_signal_nmi(void)
                if (errno == ENOENT) {
                        printf("%s:SKIP:no PERF_COUNT_HW_CPU_CYCLES\n",
                               __func__);
+                       test__skip();
                        return 0;
                }
                /* Let the test fail with a more informative message */
index 12895d03d58b0d5f7e0f0e40d95e85577dab2840..e545dfb558720024d978e6aa7e14e0c035057371 100644 (file)
@@ -17,6 +17,7 @@ struct prog_test_def {
        bool force_log;
        int pass_cnt;
        int error_cnt;
+       int skip_cnt;
        bool tested;
 
        const char *subtest_name;
@@ -56,6 +57,14 @@ static void dump_test_log(const struct prog_test_def *test, bool failed)
        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()
 {
        struct prog_test_def *test = env.test;
@@ -65,6 +74,7 @@ void test__end_subtest()
                env.fail_cnt++;
        else
                env.sub_succ_cnt++;
+       skip_account();
 
        dump_test_log(test, sub_error_cnt);
 
@@ -105,6 +115,11 @@ void test__force_log() {
        env.test->force_log = true;
 }
 
+void test__skip(void)
+{
+       env.test->skip_cnt++;
+}
+
 struct ipv4_packet pkt_v4 = {
        .eth.h_proto = __bpf_constant_htons(ETH_P_IP),
        .iph.ihl = 5,
@@ -510,6 +525,7 @@ int main(int argc, char **argv)
                        env.fail_cnt++;
                else
                        env.succ_cnt++;
+               skip_account();
 
                dump_test_log(test, test->error_cnt);
 
@@ -518,8 +534,8 @@ int main(int argc, char **argv)
                        test->error_cnt ? "FAIL" : "OK");
        }
        stdio_restore();
-       printf("Summary: %d/%d PASSED, %d FAILED\n",
-              env.succ_cnt, env.sub_succ_cnt, env.fail_cnt);
+       printf("Summary: %d/%d PASSED, %d SKIPPED, %d FAILED\n",
+              env.succ_cnt, env.sub_succ_cnt, env.skip_cnt, env.fail_cnt);
 
        free(env.test_selector.num_set);
        free(env.subtest_selector.num_set);
index 37d427f5a1e5c68a62e8d71f95b79905e96acace..9defd35cb6c0651eb426f9d04dbf30a07e78a60a 100644 (file)
@@ -64,6 +64,7 @@ struct test_env {
        int succ_cnt; /* successful tests */
        int sub_succ_cnt; /* successful sub-tests */
        int fail_cnt; /* total failed tests + sub-tests */
+       int skip_cnt; /* skipped tests */
 };
 
 extern int error_cnt;
@@ -72,6 +73,7 @@ extern struct test_env env;
 
 extern void test__force_log();
 extern bool test__start_subtest(const char *name);
+extern void test__skip(void);
 
 #define MAGIC_BYTES 123