linux-kselftest-kunit-fixes-5.8-rc4
This kunit fixes update for Linux 5.8-rc4 consists of fixes to build and run-times failures. Also includes troubleshooting tips updates to kunit user documentation. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEPZKym/RZuOCGeA/kCwJExA0NQxwFAl7985cACgkQCwJExA0N QxxFvhAA6Wa+1UMR4VKLZgfc2dL85LeV9tZO714ssIt1rxcgv2dHswsE0nbJmHyM DsfEufqOsvpX7/ic/JqrwIl+iDGrKlV9wo+ZLl+tdt5jVeB6OP6Dr5C3jvD3eZhX zUHxr04QGzQuJnS6gAOIrCa/qBz17duAEij6xj4if/6OAkL2Igb3PGFzhpjVKqJL TLY5UJ80D+QHJ7o8FWsaB8bNDMu7gmOBgfMb1qGB60cFppE+regoQRtkZefLap26 MixOFgRD5DyNoGqTZzJqSn7IZxvERoHfxKchzpAUHsNn9tI0r15X016Wcgf2+B+T 2eyRJDkTP3dt4oFuML4CXeQvZOgrcZNIWeVFmBK9NcmRg0WDnWPzCE2Mm+lnZD8e 0fefiaLBZw5+ztaz24S/M3mTpZQru8N2FDgLJmpLcPulIuDYpm4tB2PkBc0AmF35 6gC3WDa6cw1qbbDgN83xd9VdlACBe2fYzenhZCqDzgE1zGquORkhuAQYZfdGrixi ojpn7IKN+JeufiFZuu1xOJeAojIZ4JU42FxM0S1PSXf9deqICzfa1LSOWEaL+V4G GaPq/nnMhtY2rMGFAQXyCP4YQe2XQU/Jt1SOdFA/UZ1W+oYXwjOlSVo9xpjJV/6y 4TAQ7Yg8S87CUbffYpBLw3Xkg8E0L9ih+E+UOineMcUiu6yxA2Q= =XeG4 -----END PGP SIGNATURE----- Merge tag 'linux-kselftest-kunit-fixes-5.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest Pull kunit fixes from Shuah Khan "Fixes for build and run-times failures. Also includes troubleshooting tips updates to kunit user documentation" * tag 'linux-kselftest-kunit-fixes-5.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest: Documentation: kunit: Add some troubleshooting tips to the FAQ kunit: kunit_tool: Fix invalid result when build fails kunit: show error if kunit results are not present kunit: kunit_config: Fix parsing of CONFIG options with space
This commit is contained in:
		
						commit
						55844741a1
					
				| @ -61,3 +61,43 @@ test, or an end-to-end test. | ||||
|   kernel by installing a production configuration of the kernel on production | ||||
|   hardware with a production userspace and then trying to exercise some behavior | ||||
|   that depends on interactions between the hardware, the kernel, and userspace. | ||||
| 
 | ||||
| KUnit isn't working, what should I do? | ||||
| ====================================== | ||||
| 
 | ||||
| Unfortunately, there are a number of things which can break, but here are some | ||||
| things to try. | ||||
| 
 | ||||
| 1. Try running ``./tools/testing/kunit/kunit.py run`` with the ``--raw_output`` | ||||
|    parameter. This might show details or error messages hidden by the kunit_tool | ||||
|    parser. | ||||
| 2. Instead of running ``kunit.py run``, try running ``kunit.py config``, | ||||
|    ``kunit.py build``, and ``kunit.py exec`` independently. This can help track | ||||
|    down where an issue is occurring. (If you think the parser is at fault, you | ||||
|    can run it manually against stdin or a file with ``kunit.py parse``.) | ||||
| 3. Running the UML kernel directly can often reveal issues or error messages | ||||
|    kunit_tool ignores. This should be as simple as running ``./vmlinux`` after | ||||
|    building the UML kernel (e.g., by using ``kunit.py build``). Note that UML | ||||
|    has some unusual requirements (such as the host having a tmpfs filesystem | ||||
|    mounted), and has had issues in the past when built statically and the host | ||||
|    has KASLR enabled. (On older host kernels, you may need to run ``setarch | ||||
|    `uname -m` -R ./vmlinux`` to disable KASLR.) | ||||
| 4. Make sure the kernel .config has ``CONFIG_KUNIT=y`` and at least one test | ||||
|    (e.g. ``CONFIG_KUNIT_EXAMPLE_TEST=y``). kunit_tool will keep its .config | ||||
|    around, so you can see what config was used after running ``kunit.py run``. | ||||
|    It also preserves any config changes you might make, so you can | ||||
|    enable/disable things with ``make ARCH=um menuconfig`` or similar, and then | ||||
|    re-run kunit_tool. | ||||
| 5. Try to run ``make ARCH=um defconfig`` before running ``kunit.py run``. This | ||||
|    may help clean up any residual config items which could be causing problems. | ||||
| 6. Finally, try running KUnit outside UML. KUnit and KUnit tests can run be | ||||
|    built into any kernel, or can be built as a module and loaded at runtime. | ||||
|    Doing so should allow you to determine if UML is causing the issue you're | ||||
|    seeing. When tests are built-in, they will execute when the kernel boots, and | ||||
|    modules will automatically execute associated tests when loaded. Test results | ||||
|    can be collected from ``/sys/kernel/debug/kunit/<test suite>/results``, and | ||||
|    can be parsed with ``kunit.py parse``. For more details, see "KUnit on | ||||
|    non-UML architectures" in :doc:`usage`. | ||||
| 
 | ||||
| If none of the above tricks help, you are always welcome to email any issues to | ||||
| kunit-dev@googlegroups.com. | ||||
|  | ||||
| @ -82,7 +82,9 @@ def build_tests(linux: kunit_kernel.LinuxSourceTree, | ||||
| 					request.make_options) | ||||
| 	build_end = time.time() | ||||
| 	if not success: | ||||
| 		return KunitResult(KunitStatus.BUILD_FAILURE, 'could not build kernel') | ||||
| 		return KunitResult(KunitStatus.BUILD_FAILURE, | ||||
| 				   'could not build kernel', | ||||
| 				   build_end - build_start) | ||||
| 	if not success: | ||||
| 		return KunitResult(KunitStatus.BUILD_FAILURE, | ||||
| 				   'could not build kernel', | ||||
|  | ||||
| @ -10,7 +10,7 @@ import collections | ||||
| import re | ||||
| 
 | ||||
| CONFIG_IS_NOT_SET_PATTERN = r'^# CONFIG_(\w+) is not set$' | ||||
| CONFIG_PATTERN = r'^CONFIG_(\w+)=(\S+)$' | ||||
| CONFIG_PATTERN = r'^CONFIG_(\w+)=(\S+|".*")$' | ||||
| 
 | ||||
| KconfigEntryBase = collections.namedtuple('KconfigEntry', ['name', 'value']) | ||||
| 
 | ||||
|  | ||||
| @ -265,11 +265,9 @@ def bubble_up_suite_errors(test_suite_list: List[TestSuite]) -> TestStatus: | ||||
| 	return bubble_up_errors(lambda x: x.status, test_suite_list) | ||||
| 
 | ||||
| def parse_test_result(lines: List[str]) -> TestResult: | ||||
| 	if not lines: | ||||
| 		return TestResult(TestStatus.NO_TESTS, [], lines) | ||||
| 	consume_non_diagnositic(lines) | ||||
| 	if not parse_tap_header(lines): | ||||
| 		return None | ||||
| 	if not lines or not parse_tap_header(lines): | ||||
| 		return TestResult(TestStatus.NO_TESTS, [], lines) | ||||
| 	test_suites = [] | ||||
| 	test_suite = parse_test_suite(lines) | ||||
| 	while test_suite: | ||||
| @ -282,6 +280,8 @@ def parse_run_tests(kernel_output) -> TestResult: | ||||
| 	failed_tests = 0 | ||||
| 	crashed_tests = 0 | ||||
| 	test_result = parse_test_result(list(isolate_kunit_output(kernel_output))) | ||||
| 	if test_result.status == TestStatus.NO_TESTS: | ||||
| 		print_with_timestamp(red('[ERROR] ') + 'no kunit output detected') | ||||
| 	for test_suite in test_result.suites: | ||||
| 		if test_suite.status == TestStatus.SUCCESS: | ||||
| 			print_suite_divider(green('[PASSED] ') + test_suite.name) | ||||
|  | ||||
| @ -170,6 +170,17 @@ class KUnitParserTest(unittest.TestCase): | ||||
| 			result.status) | ||||
| 		file.close() | ||||
| 
 | ||||
| 	def test_no_kunit_output(self): | ||||
| 		crash_log = get_absolute_path( | ||||
| 			'test_data/test_insufficient_memory.log') | ||||
| 		file = open(crash_log) | ||||
| 		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.stop() | ||||
| 		file.close() | ||||
| 
 | ||||
| 	def test_crashed_test(self): | ||||
| 		crashed_log = get_absolute_path( | ||||
| 			'test_data/test_is_test_passed-crash.log') | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user