Commit 521b619a authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'linux-kselftest-kunit-fixes-5.10-rc3' of...

Merge tag 'linux-kselftest-kunit-fixes-5.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest

Pull Kunit fixes from Shuah Khan:
 "Several kunit_tool and documentation fixes"

* tag 'linux-kselftest-kunit-fixes-5.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
  kunit: tools: fix kunit_tool tests for parsing test plans
  Documentation: kunit: Update Kconfig parts for KUNIT's module support
  kunit: test: fix remaining kernel-doc warnings
  kunit: Don't fail test suites if one of them is empty
  kunit: Fix kunit.py --raw_output option
parents 3249fe45 0d0d2451
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ Now add the following to ``drivers/misc/Kconfig``:

	config MISC_EXAMPLE_TEST
		bool "Test for my example"
		depends on MISC_EXAMPLE && KUNIT
		depends on MISC_EXAMPLE && KUNIT=y

and the following to ``drivers/misc/Makefile``:

+5 −0
Original line number Diff line number Diff line
@@ -561,6 +561,11 @@ Once the kernel is built and installed, a simple

...will run the tests.

.. note::
   Note that you should make sure your test depends on ``KUNIT=y`` in Kconfig
   if the test does not support module build.  Otherwise, it will trigger
   compile errors if ``CONFIG_KUNIT`` is ``m``.

Writing new tests for other architectures
-----------------------------------------

+8 −8
Original line number Diff line number Diff line
@@ -252,13 +252,14 @@ static inline int kunit_run_all_tests(void)
}
#endif /* IS_BUILTIN(CONFIG_KUNIT) */

#ifdef MODULE
/**
 * kunit_test_suites() - used to register one or more &struct kunit_suite
 *			 with KUnit.
 * kunit_test_suites_for_module() - used to register one or more
 *			 &struct kunit_suite with KUnit.
 *
 * @suites_list...: a statically allocated list of &struct kunit_suite.
 * @__suites: a statically allocated list of &struct kunit_suite.
 *
 * Registers @suites_list with the test framework. See &struct kunit_suite for
 * Registers @__suites with the test framework. See &struct kunit_suite for
 * more information.
 *
 * If a test suite is built-in, module_init() gets translated into
@@ -267,7 +268,6 @@ static inline int kunit_run_all_tests(void)
 * module_{init|exit} functions for the builtin case when registering
 * suites via kunit_test_suites() below.
 */
#ifdef MODULE
#define kunit_test_suites_for_module(__suites)				\
	static int __init kunit_test_suites_init(void)			\
	{								\
@@ -294,7 +294,7 @@ static inline int kunit_run_all_tests(void)
 * kunit_test_suites() - used to register one or more &struct kunit_suite
 *			 with KUnit.
 *
 * @suites: a statically allocated list of &struct kunit_suite.
 * @__suites: a statically allocated list of &struct kunit_suite.
 *
 * Registers @suites with the test framework. See &struct kunit_suite for
 * more information.
@@ -308,10 +308,10 @@ static inline int kunit_run_all_tests(void)
 * module.
 *
 */
#define kunit_test_suites(...)						\
#define kunit_test_suites(__suites...)						\
	__kunit_test_suites(__UNIQUE_ID(array),				\
			    __UNIQUE_ID(suites),			\
			    __VA_ARGS__)
			    ##__suites)

#define kunit_test_suite(suite)	kunit_test_suites(&suite)

+1 −2
Original line number Diff line number Diff line
@@ -66,7 +66,6 @@ def isolate_kunit_output(kernel_output):
def raw_output(kernel_output):
	for line in kernel_output:
		print(line)
		yield line

DIVIDER = '=' * 60

@@ -242,7 +241,7 @@ def parse_test_suite(lines: List[str], expected_suite_index: int) -> TestSuite:
		return None
	test_suite.name = name
	expected_test_case_num = parse_subtest_plan(lines)
	if not expected_test_case_num:
	if expected_test_case_num is None:
		return None
	while expected_test_case_num > 0:
		test_case = parse_test_case(lines)
+25 −7
Original line number Diff line number Diff line
@@ -179,7 +179,7 @@ class KUnitParserTest(unittest.TestCase):
		print_mock = mock.patch('builtins.print').start()
		result = kunit_parser.parse_run_tests(
			kunit_parser.isolate_kunit_output(file.readlines()))
		print_mock.assert_any_call(StrContains("no kunit output detected"))
		print_mock.assert_any_call(StrContains('no tests run!'))
		print_mock.stop()
		file.close()

@@ -198,6 +198,9 @@ class KUnitParserTest(unittest.TestCase):
			'test_data/test_config_printk_time.log')
		with open(prefix_log) as file:
			result = kunit_parser.parse_run_tests(file.readlines())
			self.assertEqual(
				kunit_parser.TestStatus.SUCCESS,
				result.status)
			self.assertEqual('kunit-resource-test', result.suites[0].name)

	def test_ignores_multiple_prefixes(self):
@@ -205,6 +208,9 @@ class KUnitParserTest(unittest.TestCase):
			'test_data/test_multiple_prefixes.log')
		with open(prefix_log) as file:
			result = kunit_parser.parse_run_tests(file.readlines())
			self.assertEqual(
				kunit_parser.TestStatus.SUCCESS,
				result.status)
			self.assertEqual('kunit-resource-test', result.suites[0].name)

	def test_prefix_mixed_kernel_output(self):
@@ -212,24 +218,36 @@ class KUnitParserTest(unittest.TestCase):
			'test_data/test_interrupted_tap_output.log')
		with open(mixed_prefix_log) as file:
			result = kunit_parser.parse_run_tests(file.readlines())
			self.assertEqual(
				kunit_parser.TestStatus.SUCCESS,
				result.status)
			self.assertEqual('kunit-resource-test', result.suites[0].name)

	def test_prefix_poundsign(self):
		pound_log = get_absolute_path('test_data/test_pound_sign.log')
		with open(pound_log) as file:
			result = kunit_parser.parse_run_tests(file.readlines())
			self.assertEqual(
				kunit_parser.TestStatus.SUCCESS,
				result.status)
			self.assertEqual('kunit-resource-test', result.suites[0].name)

	def test_kernel_panic_end(self):
		panic_log = get_absolute_path('test_data/test_kernel_panic_interrupt.log')
		with open(panic_log) as file:
			result = kunit_parser.parse_run_tests(file.readlines())
			self.assertEqual(
				kunit_parser.TestStatus.TEST_CRASHED,
				result.status)
			self.assertEqual('kunit-resource-test', result.suites[0].name)

	def test_pound_no_prefix(self):
		pound_log = get_absolute_path('test_data/test_pound_no_prefix.log')
		with open(pound_log) as file:
			result = kunit_parser.parse_run_tests(file.readlines())
			self.assertEqual(
				kunit_parser.TestStatus.SUCCESS,
				result.status)
			self.assertEqual('kunit-resource-test', result.suites[0].name)

class KUnitJsonTest(unittest.TestCase):
Loading