kunit: test: Move fault tests behind KUNIT_FAULT_TEST Kconfig option
authorDavid Gow <davidgow@google.com>
Tue, 23 Apr 2024 09:08:06 +0000 (17:08 +0800)
committerShuah Khan <skhan@linuxfoundation.org>
Mon, 6 May 2024 20:22:02 +0000 (14:22 -0600)
The NULL dereference tests in kunit_fault deliberately trigger a kernel
BUG(), and therefore print the associated stack trace, even when the
test passes. This is both annoying (as it bloats the test output), and
can confuse some test harnesses, which assume any BUG() is a failure.

Allow these tests to be specifically disabled (without disabling all
of KUnit's other tests), by placing them behind the
CONFIG_KUNIT_FAULT_TEST Kconfig option. This is enabled by default, but
can be set to 'n' to disable the test. An empty 'kunit_fault' suite is
left behind, which will automatically be marked 'skipped'.

As the fault tests already were disabled under UML (as they weren't
compatible with its fault handling), we can simply adapt those
conditions, and add a dependency on !UML for our new option.

Suggested-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/all/928249cc-e027-4f7f-b43f-502f99a1ea63@roeck-us.net/
Fixes: 82b0beff3497 ("kunit: Add tests for fault")
Signed-off-by: David Gow <davidgow@google.com>
Reviewed-by: Mickaël Salaün <mic@digikod.net>
Reviewed-by: Rae Moar <rmoar@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
lib/kunit/Kconfig
lib/kunit/kunit-test.c

index 68a6daec0aef1891f5aba358ba35b9fed2ea50da..34d7242d526dcd40cc1dadc1aa66591ad950dbc2 100644 (file)
@@ -24,6 +24,17 @@ config KUNIT_DEBUGFS
          test suite, which allow users to see results of the last test suite
          run that occurred.
 
+config KUNIT_FAULT_TEST
+       bool "Enable KUnit tests which print BUG stacktraces"
+       depends on KUNIT_TEST
+       depends on !UML
+       default y
+       help
+         Enables fault handling tests for the KUnit framework. These tests may
+         trigger a kernel BUG(), and the associated stack trace, even when they
+         pass. If this conflicts with your test infrastrcture (or is confusing
+         or annoying), they can be disabled by setting this to N.
+
 config KUNIT_TEST
        tristate "KUnit test for KUnit" if !KUNIT_ALL_TESTS
        default KUNIT_ALL_TESTS
index 0fdca5fffaecd198a60d21c6d0d74d88da794c5c..e3412e0ca3993b89ea3069f9f179dccaab8d49c3 100644 (file)
@@ -109,7 +109,7 @@ static struct kunit_suite kunit_try_catch_test_suite = {
        .test_cases = kunit_try_catch_test_cases,
 };
 
-#ifndef CONFIG_UML
+#if IS_ENABLED(CONFIG_KUNIT_FAULT_TEST)
 
 static void kunit_test_null_dereference(void *data)
 {
@@ -136,12 +136,12 @@ static void kunit_test_fault_null_dereference(struct kunit *test)
        KUNIT_EXPECT_TRUE(test, ctx->function_called);
 }
 
-#endif /* !CONFIG_UML */
+#endif /* CONFIG_KUNIT_FAULT_TEST */
 
 static struct kunit_case kunit_fault_test_cases[] = {
-#ifndef CONFIG_UML
+#if IS_ENABLED(CONFIG_KUNIT_FAULT_TEST)
        KUNIT_CASE(kunit_test_fault_null_dereference),
-#endif /* !CONFIG_UML */
+#endif /* CONFIG_KUNIT_FAULT_TEST */
        {}
 };