Commit 2b8fdbbf authored by Daniel Latypov's avatar Daniel Latypov Committed by Shuah Khan

kunit: tool: move kunitconfig parsing into __init__, make it optional

LinuxSourceTree will unceremoniously crash if the user doesn't call
read_kunitconfig() first in a number of functions.

And currently every place we create an instance, the caller also calls
create_kunitconfig() and read_kunitconfig().
Move these instead into __init__() so they can't be forgotten and to
reduce copy-paste.

The https://github.com/google/pytype type-checker complained that
_config wasn't initialized. With this, kunit_tool now type checks
under both pytype and mypy.

Add an optional boolean that can be used to disable this for use cases
in the future where we might not need/want to load the config.
Signed-off-by: default avatarDaniel Latypov <dlatypov@google.com>
Reviewed-by: default avatarBrendan Higgins <brendanhiggins@google.com>
Tested-by: default avatarBrendan Higgins <brendanhiggins@google.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 81c60306
...@@ -256,10 +256,7 @@ def main(argv, linux=None): ...@@ -256,10 +256,7 @@ def main(argv, linux=None):
os.mkdir(cli_args.build_dir) os.mkdir(cli_args.build_dir)
if not linux: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
linux.create_kunitconfig(cli_args.build_dir)
linux.read_kunitconfig(cli_args.build_dir)
request = KunitRequest(cli_args.raw_output, request = KunitRequest(cli_args.raw_output,
cli_args.timeout, cli_args.timeout,
...@@ -277,10 +274,7 @@ def main(argv, linux=None): ...@@ -277,10 +274,7 @@ def main(argv, linux=None):
os.mkdir(cli_args.build_dir) os.mkdir(cli_args.build_dir)
if not linux: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
linux.create_kunitconfig(cli_args.build_dir)
linux.read_kunitconfig(cli_args.build_dir)
request = KunitConfigRequest(cli_args.build_dir, request = KunitConfigRequest(cli_args.build_dir,
cli_args.make_options) cli_args.make_options)
...@@ -292,10 +286,7 @@ def main(argv, linux=None): ...@@ -292,10 +286,7 @@ def main(argv, linux=None):
sys.exit(1) sys.exit(1)
elif cli_args.subcommand == 'build': elif cli_args.subcommand == 'build':
if not linux: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
linux.create_kunitconfig(cli_args.build_dir)
linux.read_kunitconfig(cli_args.build_dir)
request = KunitBuildRequest(cli_args.jobs, request = KunitBuildRequest(cli_args.jobs,
cli_args.build_dir, cli_args.build_dir,
...@@ -309,10 +300,7 @@ def main(argv, linux=None): ...@@ -309,10 +300,7 @@ def main(argv, linux=None):
sys.exit(1) sys.exit(1)
elif cli_args.subcommand == 'exec': elif cli_args.subcommand == 'exec':
if not linux: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
linux.create_kunitconfig(cli_args.build_dir)
linux.read_kunitconfig(cli_args.build_dir)
exec_request = KunitExecRequest(cli_args.timeout, exec_request = KunitExecRequest(cli_args.timeout,
cli_args.build_dir, cli_args.build_dir,
......
...@@ -123,28 +123,29 @@ def get_outfile_path(build_dir) -> str: ...@@ -123,28 +123,29 @@ def get_outfile_path(build_dir) -> str:
class LinuxSourceTree(object): class LinuxSourceTree(object):
"""Represents a Linux kernel source tree with KUnit tests.""" """Represents a Linux kernel source tree with KUnit tests."""
def __init__(self) -> None: def __init__(self, build_dir: str, load_config=True, defconfig=DEFAULT_KUNITCONFIG_PATH) -> None:
self._ops = LinuxSourceTreeOperations()
signal.signal(signal.SIGINT, self.signal_handler) signal.signal(signal.SIGINT, self.signal_handler)
def clean(self) -> bool: self._ops = LinuxSourceTreeOperations()
try:
self._ops.make_mrproper() if not load_config:
except ConfigError as e: return
logging.error(e)
return False
return True
def create_kunitconfig(self, build_dir, defconfig=DEFAULT_KUNITCONFIG_PATH) -> None:
kunitconfig_path = get_kunitconfig_path(build_dir) kunitconfig_path = get_kunitconfig_path(build_dir)
if not os.path.exists(kunitconfig_path): if not os.path.exists(kunitconfig_path):
shutil.copyfile(defconfig, kunitconfig_path) shutil.copyfile(defconfig, kunitconfig_path)
def read_kunitconfig(self, build_dir) -> None:
kunitconfig_path = get_kunitconfig_path(build_dir)
self._kconfig = kunit_config.Kconfig() self._kconfig = kunit_config.Kconfig()
self._kconfig.read_from_file(kunitconfig_path) self._kconfig.read_from_file(kunitconfig_path)
def clean(self) -> bool:
try:
self._ops.make_mrproper()
except ConfigError as e:
logging.error(e)
return False
return True
def validate_config(self, build_dir) -> bool: def validate_config(self, build_dir) -> bool:
kconfig_path = get_kconfig_path(build_dir) kconfig_path = get_kconfig_path(build_dir)
validated_kconfig = kunit_config.Kconfig() validated_kconfig = kunit_config.Kconfig()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment