Skip to content

Commit 2b8fdbb

Browse files
dlatypovshuahkh
authored andcommitted
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: Daniel Latypov <dlatypov@google.com> Reviewed-by: Brendan Higgins <brendanhiggins@google.com> Tested-by: Brendan Higgins <brendanhiggins@google.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
1 parent 81c6030 commit 2b8fdbb

2 files changed

Lines changed: 17 additions & 28 deletions

File tree

tools/testing/kunit/kunit.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -256,10 +256,7 @@ def main(argv, linux=None):
256256
os.mkdir(cli_args.build_dir)
257257

258258
if not linux:
259-
linux = kunit_kernel.LinuxSourceTree()
260-
261-
linux.create_kunitconfig(cli_args.build_dir)
262-
linux.read_kunitconfig(cli_args.build_dir)
259+
linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
263260

264261
request = KunitRequest(cli_args.raw_output,
265262
cli_args.timeout,
@@ -277,10 +274,7 @@ def main(argv, linux=None):
277274
os.mkdir(cli_args.build_dir)
278275

279276
if not linux:
280-
linux = kunit_kernel.LinuxSourceTree()
281-
282-
linux.create_kunitconfig(cli_args.build_dir)
283-
linux.read_kunitconfig(cli_args.build_dir)
277+
linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
284278

285279
request = KunitConfigRequest(cli_args.build_dir,
286280
cli_args.make_options)
@@ -292,10 +286,7 @@ def main(argv, linux=None):
292286
sys.exit(1)
293287
elif cli_args.subcommand == 'build':
294288
if not linux:
295-
linux = kunit_kernel.LinuxSourceTree()
296-
297-
linux.create_kunitconfig(cli_args.build_dir)
298-
linux.read_kunitconfig(cli_args.build_dir)
289+
linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
299290

300291
request = KunitBuildRequest(cli_args.jobs,
301292
cli_args.build_dir,
@@ -309,10 +300,7 @@ def main(argv, linux=None):
309300
sys.exit(1)
310301
elif cli_args.subcommand == 'exec':
311302
if not linux:
312-
linux = kunit_kernel.LinuxSourceTree()
313-
314-
linux.create_kunitconfig(cli_args.build_dir)
315-
linux.read_kunitconfig(cli_args.build_dir)
303+
linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
316304

317305
exec_request = KunitExecRequest(cli_args.timeout,
318306
cli_args.build_dir,

tools/testing/kunit/kunit_kernel.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,28 +123,29 @@ def get_outfile_path(build_dir) -> str:
123123
class LinuxSourceTree(object):
124124
"""Represents a Linux kernel source tree with KUnit tests."""
125125

126-
def __init__(self) -> None:
127-
self._ops = LinuxSourceTreeOperations()
126+
def __init__(self, build_dir: str, load_config=True, defconfig=DEFAULT_KUNITCONFIG_PATH) -> None:
128127
signal.signal(signal.SIGINT, self.signal_handler)
129128

130-
def clean(self) -> bool:
131-
try:
132-
self._ops.make_mrproper()
133-
except ConfigError as e:
134-
logging.error(e)
135-
return False
136-
return True
129+
self._ops = LinuxSourceTreeOperations()
130+
131+
if not load_config:
132+
return
137133

138-
def create_kunitconfig(self, build_dir, defconfig=DEFAULT_KUNITCONFIG_PATH) -> None:
139134
kunitconfig_path = get_kunitconfig_path(build_dir)
140135
if not os.path.exists(kunitconfig_path):
141136
shutil.copyfile(defconfig, kunitconfig_path)
142137

143-
def read_kunitconfig(self, build_dir) -> None:
144-
kunitconfig_path = get_kunitconfig_path(build_dir)
145138
self._kconfig = kunit_config.Kconfig()
146139
self._kconfig.read_from_file(kunitconfig_path)
147140

141+
def clean(self) -> bool:
142+
try:
143+
self._ops.make_mrproper()
144+
except ConfigError as e:
145+
logging.error(e)
146+
return False
147+
return True
148+
148149
def validate_config(self, build_dir) -> bool:
149150
kconfig_path = get_kconfig_path(build_dir)
150151
validated_kconfig = kunit_config.Kconfig()

0 commit comments

Comments
 (0)