]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
kunit: tool: make `build` subcommand also reconfigure if needed
authorDaniel Latypov <dlatypov@google.com>
Tue, 14 Dec 2021 19:30:10 +0000 (11:30 -0800)
committerShuah Khan <skhan@linuxfoundation.org>
Wed, 15 Dec 2021 18:51:16 +0000 (11:51 -0700)
If I created a kunitconfig file that was incomplete, then
$ ./tools/testing/kunit/kunit.py build --kunitconfig=my_kunitconfig
would silently drop all the options with unmet dependencies!

This is because it doesn't do the config check that `kunit.py config`
does.

So if I want to safely build a kernel for testing, I have to do
$ ./tools/testing/kunit/kunit.py config <flags>
$ ./tools/testing/kunit/kunit.py build <flags, again>

It seems unlikely that any user of kunit.py would want the current
`build` semantics.
So make it effectively do `kunit.py config` + `kunit.py build`.

Signed-off-by: Daniel Latypov <dlatypov@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/testing/kunit/kunit.py
tools/testing/kunit/kunit_tool_test.py

index 417dc2d11f4fae124bf6240ecdea63fd10bbd2cf..f1be7181136928422b752126af74b4116a124341 100755 (executable)
@@ -110,6 +110,14 @@ def build_tests(linux: kunit_kernel.LinuxSourceTree,
                           'built kernel successfully',
                           build_end - build_start)
 
+def config_and_build_tests(linux: kunit_kernel.LinuxSourceTree,
+                          request: KunitBuildRequest) -> KunitResult:
+       config_result = config_tests(linux, request)
+       if config_result.status != KunitStatus.SUCCESS:
+               return config_result
+
+       return build_tests(linux, request)
+
 def _list_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -> List[str]:
        args = ['kunit.action=list']
        if request.kernel_args:
@@ -464,7 +472,7 @@ def main(argv, linux=None):
                                            make_options=cli_args.make_options,
                                            jobs=cli_args.jobs,
                                            alltests=cli_args.alltests)
-               result = build_tests(linux, request)
+               result = config_and_build_tests(linux, request)
                kunit_parser.print_with_timestamp((
                        'Elapsed time: %.3fs\n') % (
                                result.elapsed_time))
index 1f6b177ca5c29e864d2ed62720eef4d00fb4a01f..b80e333a20cb9bc33511063810b8c248f3bb7a96 100755 (executable)
@@ -526,7 +526,7 @@ class KUnitMainTest(unittest.TestCase):
 
        def test_build_passes_args_pass(self):
                kunit.main(['build'], self.linux_source_mock)
-               self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 0)
+               self.assertEqual(self.linux_source_mock.build_reconfig.call_count, 1)
                self.linux_source_mock.build_kernel.assert_called_once_with(False, 8, '.kunit', None)
                self.assertEqual(self.linux_source_mock.run_kernel.call_count, 0)