add pre-defined KUnit test suite and test case that asserts both
`debug_locks` and `TAINT_WARN` prior to running any (user) KUnit tests.
This asserts integrity before tests are run.

Signed-off-by: Malte Wechter <[email protected]>
---
 lib/kunit/executor.c |  8 +++++++-
 lib/kunit/test.c     | 30 ++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c
index b0f8a41d61d36..0db67fe7f09f9 100644
--- a/lib/kunit/executor.c
+++ b/lib/kunit/executor.c
@@ -290,9 +290,15 @@ void kunit_exec_run_tests(struct kunit_suite_set 
*suite_set, bool builtin)
        size_t num_suites = suite_set->end - suite_set->start;
        bool autorun = kunit_autorun();
 
+       #ifdef CONFIG_KUNIT_EXTRA_ASSERTS
+       size_t num_suites_plus_extra = num_suites+1;
+       #else
+       size_t num_suites_plus_extra = num_suites;
+       #endif
+
        if (autorun && (builtin || num_suites)) {
                pr_info("KTAP version 1\n");
-               pr_info("1..%zu\n", num_suites);
+               pr_info("1..%zu\n", num_suites_plus_extra);
        }
 
        __kunit_test_suites_init(suite_set->start, num_suites, autorun);
diff --git a/lib/kunit/test.c b/lib/kunit/test.c
index 99773e000e1b7..e64c6d1575280 100644
--- a/lib/kunit/test.c
+++ b/lib/kunit/test.c
@@ -835,6 +835,30 @@ bool kunit_enabled(void)
        return enable_param;
 }
 
+#ifdef CONFIG_KUNIT_EXTRA_ASSERTS
+#define DEBUG_LOCKS_OK 1
+#define TAINT_WARN_OK 0
+
+static void pre_kunit_assert(struct kunit *test)
+{
+       KUNIT_EXPECT_EQ_MSG(test, debug_locks, DEBUG_LOCKS_OK,
+               "debug_locks are off before any test ran");
+       KUNIT_EXPECT_EQ_MSG(test, test_taint(TAINT_WARN), TAINT_WARN_OK,
+               "kernel already TAINT_WARN tainted before any test ran");
+}
+
+static struct kunit_case pre_kunit_assert_cases[] = {
+       KUNIT_CASE(pre_kunit_assert),
+       {}
+};
+
+static struct kunit_suite pre_kunit_assert_clean_state_suite = {
+       .name = "pre_kunit_extra_asserts",
+       .test_cases = pre_kunit_assert_cases,
+};
+
+#endif /* CONFIG_RUST_KUNIT_EXTRA_ASSERTS */
+
 int __kunit_test_suites_init(struct kunit_suite * const * const suites, int 
num_suites,
                             bool run_tests)
 {
@@ -857,6 +881,12 @@ int __kunit_test_suites_init(struct kunit_suite * const * 
const suites, int num_
        }
        static_branch_inc(&kunit_running);
 
+       #ifdef CONFIG_KUNIT_EXTRA_ASSERTS
+       kunit_init_suite(&pre_kunit_assert_clean_state_suite);
+       if (run_tests)
+               kunit_run_tests(&pre_kunit_assert_clean_state_suite);
+       #endif
+
        for (i = 0; i < num_suites; i++) {
                kunit_init_suite(suites[i]);
                if (run_tests)

-- 
2.51.2


Reply via email to