From: SeongJae Park sjpark@amazon.de
This patchset makes kunit tool to respect '.kunitconfig' under the '--build_dir'.
Revision History ================
From v1
(https://lore.kernel.org/linux-kselftest/20201012102621.32226-2-sjpark@amazon...) - Rebase on master branch of linus' tree (Not a clean rebase) - Add 'Reviewed-by: Brendan Higgins brendanhiggins@google.com' in second patch
SeongJae Park (2): kunit: tool: Respect '.kunitconfig' in 'build_dir' kunit: tool: Mark 'kunittest_config' as constant again
tools/testing/kunit/kunit.py | 28 +++++++++++++++------------- tools/testing/kunit/kunit_kernel.py | 6 +++--- 2 files changed, 18 insertions(+), 16 deletions(-)
From: SeongJae Park sjpark@amazon.de
Commit d43c7fb05765 ("kunit: tool: fix improper treatment of file location") removed 'kunit_kernel.kunitconfig_path' modification for the '--build_dir' argument. As a result, running kunit with '--build_dir' failed with below error message:
Traceback (most recent call last): File "./tools/testing/kunit/kunit.py", line 325, in <module> main(sys.argv[1:]) File "./tools/testing/kunit/kunit.py", line 245, in main linux = kunit_kernel.LinuxSourceTree() File "/home/sjpark/linux/tools/testing/kunit/kunit_kernel.py", line 109, in __init__ self._kconfig.read_from_file(kunitconfig_path) File "/home/sjpark/linux/tools/testing/kunit/kunit_config.py", line 88, in read_from_file with open(path, 'r') as f: FileNotFoundError: [Errno 2] No such file or directory: '.kunitconfig'
The error removed after commit 82206a0c06cc ("kunit: tool: handle when .kunit exists but .kunitconfig does not"). However, it was not the intention of the commit. It hides the error by ignoring the '.kunitconfig' in the '--build_dir'.
This commit makes the tool to respect '.kunitconfig' in '--build_dir' again, while respecting the constantness of 'kunit_kernel.kunitconfig_path', as modifying the variable makes the 'kunit_tool_test.py' fails
Fixes: d43c7fb05765 ("kunit: tool: fix improper treatment of file location") Signed-off-by: SeongJae Park sjpark@amazon.de --- tools/testing/kunit/kunit.py | 26 ++++++++++++++------------ tools/testing/kunit/kunit_kernel.py | 4 ++-- 2 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py index ebf5f5763dee..8bee2a5fee27 100755 --- a/tools/testing/kunit/kunit.py +++ b/tools/testing/kunit/kunit.py @@ -44,10 +44,10 @@ class KunitStatus(Enum): BUILD_FAILURE = auto() TEST_FAILURE = auto()
-def create_default_kunitconfig(): - if not os.path.exists(kunit_kernel.kunitconfig_path): - shutil.copyfile('arch/um/configs/kunit_defconfig', - kunit_kernel.kunitconfig_path) +def create_default_kunitconfig(build_dir=''): + kunitconfig = os.path.join(build_dir, kunit_kernel.kunitconfig_path) + if not os.path.exists(kunitconfig): + shutil.copyfile('arch/um/configs/kunit_defconfig', kunitconfig)
def get_kernel_root_path(): parts = sys.argv[0] if not __file__ else __file__ @@ -61,7 +61,7 @@ def config_tests(linux: kunit_kernel.LinuxSourceTree, kunit_parser.print_with_timestamp('Configuring KUnit Kernel ...')
config_start = time.time() - create_default_kunitconfig() + create_default_kunitconfig(request.build_dir) success = linux.build_reconfig(request.build_dir, request.make_options) config_end = time.time() if not success: @@ -258,15 +258,17 @@ def main(argv, linux=None): if get_kernel_root_path(): os.chdir(get_kernel_root_path())
+ kunitconfig_path = os.path.join(cli_args.build_dir, + kunit_kernel.kunitconfig_path) if cli_args.subcommand == 'run': if not os.path.exists(cli_args.build_dir): os.mkdir(cli_args.build_dir)
- if not os.path.exists(kunit_kernel.kunitconfig_path): - create_default_kunitconfig() + if not os.path.exists(kunitconfig_path): + create_default_kunitconfig(cli_args.build_dir)
if not linux: - linux = kunit_kernel.LinuxSourceTree() + linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
request = KunitRequest(cli_args.raw_output, cli_args.timeout, @@ -284,10 +286,10 @@ def main(argv, linux=None): os.mkdir(cli_args.build_dir)
if not os.path.exists(kunit_kernel.kunitconfig_path): - create_default_kunitconfig() + create_default_kunitconfig(cli_args.build_dir)
if not linux: - linux = kunit_kernel.LinuxSourceTree() + linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
request = KunitConfigRequest(cli_args.build_dir, cli_args.make_options) @@ -299,7 +301,7 @@ def main(argv, linux=None): sys.exit(1) elif cli_args.subcommand == 'build': if not linux: - linux = kunit_kernel.LinuxSourceTree() + linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
request = KunitBuildRequest(cli_args.jobs, cli_args.build_dir, @@ -313,7 +315,7 @@ def main(argv, linux=None): sys.exit(1) elif cli_args.subcommand == 'exec': if not linux: - linux = kunit_kernel.LinuxSourceTree() + linux = kunit_kernel.LinuxSourceTree(cli_args.build_dir)
exec_request = KunitExecRequest(cli_args.timeout, cli_args.build_dir, diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py index b557b1e93f98..7dd4268665a8 100644 --- a/tools/testing/kunit/kunit_kernel.py +++ b/tools/testing/kunit/kunit_kernel.py @@ -109,9 +109,9 @@ def get_kconfig_path(build_dir): class LinuxSourceTree(object): """Represents a Linux kernel source tree with KUnit tests."""
- def __init__(self): + def __init__(self, build_dir): self._kconfig = kunit_config.Kconfig() - self._kconfig.read_from_file(kunitconfig_path) + self._kconfig.read_from_file(os.path.join(build_dir, kunitconfig_path)) self._ops = LinuxSourceTreeOperations() signal.signal(signal.SIGINT, self.signal_handler)
From: SeongJae Park sjpark@amazon.de
'kunit_kernel.kunittest_config' was constant at first, and therefore it used UPPER_SNAKE_CASE naming convention that usually means it is constant in Python world. But, commit e3212513a8f0 ("kunit: Create default config in '--build_dir'") made it modifiable to fix a use case of the tool and thus the naming also changed to lower_snake_case. However, this resulted in a confusion. As a result, some successing changes made the tool unittest fail, and a fix[1] of it again incurred the '--build_dir' use case failure.
As the previous commit fixed the '--build_dir' use case without modifying the variable again, this commit marks the variable as constant again with UPPER_SNAKE_CASE, to reduce future confusions.
[1] Commit d43c7fb05765 ("kunit: tool: fix improper treatment of file location")
Signed-off-by: SeongJae Park sjpark@amazon.de Reviewed-by: Brendan Higgins brendanhiggins@google.com --- tools/testing/kunit/kunit.py | 6 +++--- tools/testing/kunit/kunit_kernel.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py index 8bee2a5fee27..26046875adb2 100755 --- a/tools/testing/kunit/kunit.py +++ b/tools/testing/kunit/kunit.py @@ -45,7 +45,7 @@ class KunitStatus(Enum): TEST_FAILURE = auto()
def create_default_kunitconfig(build_dir=''): - kunitconfig = os.path.join(build_dir, kunit_kernel.kunitconfig_path) + kunitconfig = os.path.join(build_dir, kunit_kernel.KUNITCONFIG_PATH) if not os.path.exists(kunitconfig): shutil.copyfile('arch/um/configs/kunit_defconfig', kunitconfig)
@@ -259,7 +259,7 @@ def main(argv, linux=None): os.chdir(get_kernel_root_path())
kunitconfig_path = os.path.join(cli_args.build_dir, - kunit_kernel.kunitconfig_path) + kunit_kernel.KUNITCONFIG_PATH) if cli_args.subcommand == 'run': if not os.path.exists(cli_args.build_dir): os.mkdir(cli_args.build_dir) @@ -285,7 +285,7 @@ def main(argv, linux=None): not os.path.exists(cli_args.build_dir)): os.mkdir(cli_args.build_dir)
- if not os.path.exists(kunit_kernel.kunitconfig_path): + if not os.path.exists(kunitconfig_path): create_default_kunitconfig(cli_args.build_dir)
if not linux: diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py index 7dd4268665a8..f4bc9568bbce 100644 --- a/tools/testing/kunit/kunit_kernel.py +++ b/tools/testing/kunit/kunit_kernel.py @@ -18,7 +18,7 @@ import kunit_config import kunit_parser
KCONFIG_PATH = '.config' -kunitconfig_path = '.kunitconfig' +KUNITCONFIG_PATH = '.kunitconfig' BROKEN_ALLCONFIG_PATH = 'tools/testing/kunit/configs/broken_on_uml.config'
class ConfigError(Exception): @@ -111,7 +111,7 @@ class LinuxSourceTree(object):
def __init__(self, build_dir): self._kconfig = kunit_config.Kconfig() - self._kconfig.read_from_file(os.path.join(build_dir, kunitconfig_path)) + self._kconfig.read_from_file(os.path.join(build_dir, KUNITCONFIG_PATH)) self._ops = LinuxSourceTreeOperations() signal.signal(signal.SIGINT, self.signal_handler)
linux-kselftest-mirror@lists.linaro.org