We always use skip in combination with exit_code being 0
(KSFT_PASS). This are basic KSFT / KTAP semantics.
Store the right KSFT_* code in exit_code directly.

This makes it easier to support tests reporting other
extended KSFT_* codes like XFAIL / XPASS.

Signed-off-by: Jakub Kicinski <k...@kernel.org>
---
 tools/testing/selftests/kselftest_harness.h | 20 +++++---------------
 tools/testing/selftests/landlock/common.h   |  5 +----
 2 files changed, 6 insertions(+), 19 deletions(-)

diff --git a/tools/testing/selftests/kselftest_harness.h 
b/tools/testing/selftests/kselftest_harness.h
index bbb339642a72..42ec3ca29c4b 100644
--- a/tools/testing/selftests/kselftest_harness.h
+++ b/tools/testing/selftests/kselftest_harness.h
@@ -136,8 +136,7 @@
                fprintf(TH_LOG_STREAM, "#      SKIP      %s\n", \
                        _metadata->results->reason); \
        } \
-       _metadata->exit_code = KSFT_PASS; \
-       _metadata->skip = 1; \
+       _metadata->exit_code = KSFT_SKIP; \
        _metadata->trigger = 0; \
        statement; \
 } while (0)
@@ -389,7 +388,7 @@
                if (setjmp(_metadata->env) == 0) { \
                        fixture_name##_setup(_metadata, &self, variant->data); \
                        /* Let setup failure terminate early. */ \
-                       if (!__test_passed(_metadata) || _metadata->skip) \
+                       if (_metadata->exit_code) \
                                return; \
                        _metadata->setup_completed = true; \
                        fixture_name##_##test_name(_metadata, &self, 
variant->data); \
@@ -834,7 +833,6 @@ struct __test_metadata {
        struct __fixture_metadata *fixture;
        int termsig;
        int exit_code;
-       int skip;       /* did SKIP get used? */
        int trigger; /* extra handler after the evaluation */
        int timeout;    /* seconds to wait for test timeout */
        bool timed_out; /* did this test timeout instead of exiting? */
@@ -945,9 +943,7 @@ void __wait_for_test(struct __test_metadata *t)
                        "# %s: Test terminated by timeout\n", t->name);
        } else if (WIFEXITED(status)) {
                if (WEXITSTATUS(status) == KSFT_SKIP) {
-                       /* SKIP */
-                       t->exit_code = KSFT_PASS;
-                       t->skip = 1;
+                       t->exit_code = WEXITSTATUS(status);
                } else if (t->termsig != -1) {
                        t->exit_code = KSFT_FAIL;
                        fprintf(TH_LOG_STREAM,
@@ -1120,7 +1116,6 @@ void __run_test(struct __fixture_metadata *f,
 
        /* reset test struct */
        t->exit_code = KSFT_PASS;
-       t->skip = 0;
        t->trigger = 0;
        t->no_print = 0;
        memset(t->results->reason, 0, sizeof(t->results->reason));
@@ -1142,19 +1137,14 @@ void __run_test(struct __fixture_metadata *f,
        } else if (t->pid == 0) {
                setpgrp();
                t->fn(t, variant);
-               if (t->skip)
-                       _exit(KSFT_SKIP);
-               if (__test_passed(t))
-                       _exit(KSFT_PASS);
-               /* Something else happened. */
-               _exit(KSFT_FAIL);
+               _exit(t->exit_code);
        } else {
                __wait_for_test(t);
        }
        ksft_print_msg("         %4s  %s\n",
                       __test_passed(t) ? "OK" : "FAIL", test_name);
 
-       if (t->skip)
+       if (t->exit_code == KSFT_SKIP)
                ksft_test_result_skip("%s\n", t->results->reason[0] ?
                                        t->results->reason : "unknown");
        else
diff --git a/tools/testing/selftests/landlock/common.h 
b/tools/testing/selftests/landlock/common.h
index 89f8183bd8f5..56c5b5c5676a 100644
--- a/tools/testing/selftests/landlock/common.h
+++ b/tools/testing/selftests/landlock/common.h
@@ -57,11 +57,8 @@
                } \
                switch (WEXITSTATUS(status)) { \
                case KSFT_PASS: \
-                       _metadata->exit_code = KSFT_PASS; \
-                       break; \
                case KSFT_SKIP: \
-                       _metadata->exit_code = KSFT_PASS; \
-                       _metadata->skip = 1; \
+                       _metadata->exit_code = WEXITSTATUS(status); \
                        break; \
                default: \
                        _metadata->exit_code = KSFT_FAIL; \
-- 
2.43.0


Reply via email to