* [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig)
@ 2020-10-15 15:23 Andy Shevchenko
2020-10-15 15:23 ` [PATCH v1 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Andy Shevchenko @ 2020-10-15 15:23 UTC (permalink / raw)
To: Brendan Higgins, linux-kselftest, Shuah Khan, kunit-dev; +Cc: Andy Shevchenko
When --build_dir is provided use it and do not pollute source directory
which even can be mounted over network or read-only.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
tools/testing/kunit/kunit.py | 25 ++++++++++++-------------
tools/testing/kunit/kunit_kernel.py | 24 +++++++++++++++++++-----
2 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py
index ebf5f5763dee..1907bf9aacac 100755
--- a/tools/testing/kunit/kunit.py
+++ b/tools/testing/kunit/kunit.py
@@ -11,7 +11,6 @@ import argparse
import sys
import os
import time
-import shutil
from collections import namedtuple
from enum import Enum, auto
@@ -44,11 +43,6 @@ 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 get_kernel_root_path():
parts = sys.argv[0] if not __file__ else __file__
parts = os.path.realpath(parts).split('tools/testing/kunit')
@@ -61,7 +55,6 @@ def config_tests(linux: kunit_kernel.LinuxSourceTree,
kunit_parser.print_with_timestamp('Configuring KUnit Kernel ...')
config_start = time.time()
- create_default_kunitconfig()
success = linux.build_reconfig(request.build_dir, request.make_options)
config_end = time.time()
if not success:
@@ -262,12 +255,12 @@ def main(argv, linux=None):
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 linux:
linux = kunit_kernel.LinuxSourceTree()
+ linux.create_unitconfig(cli_args.build_dir)
+ linux.read_unitconfig(cli_args.build_dir)
+
request = KunitRequest(cli_args.raw_output,
cli_args.timeout,
cli_args.jobs,
@@ -283,12 +276,12 @@ 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):
- create_default_kunitconfig()
-
if not linux:
linux = kunit_kernel.LinuxSourceTree()
+ linux.create_unitconfig(cli_args.build_dir)
+ linux.read_unitconfig(cli_args.build_dir)
+
request = KunitConfigRequest(cli_args.build_dir,
cli_args.make_options)
result = config_tests(linux, request)
@@ -301,6 +294,9 @@ def main(argv, linux=None):
if not linux:
linux = kunit_kernel.LinuxSourceTree()
+ linux.create_unitconfig(cli_args.build_dir)
+ linux.read_unitconfig(cli_args.build_dir)
+
request = KunitBuildRequest(cli_args.jobs,
cli_args.build_dir,
cli_args.alltests,
@@ -315,6 +311,9 @@ def main(argv, linux=None):
if not linux:
linux = kunit_kernel.LinuxSourceTree()
+ linux.create_unitconfig(cli_args.build_dir)
+ linux.read_unitconfig(cli_args.build_dir)
+
exec_request = KunitExecRequest(cli_args.timeout,
cli_args.build_dir,
cli_args.alltests)
diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
index b557b1e93f98..412dc5e3102b 100644
--- a/tools/testing/kunit/kunit_kernel.py
+++ b/tools/testing/kunit/kunit_kernel.py
@@ -6,10 +6,10 @@
# Author: Felix Guo <felixguoxiuping@gmail.com>
# Author: Brendan Higgins <brendanhiggins@google.com>
-
import logging
import subprocess
import os
+import shutil
import signal
from contextlib import ExitStack
@@ -18,7 +18,8 @@ import kunit_config
import kunit_parser
KCONFIG_PATH = '.config'
-kunitconfig_path = '.kunitconfig'
+KUNITCONFIG_PATH = '.kunitconfig'
+DEFAULT_KUNITCONFIG_PATH = 'arch/um/configs/kunit_defconfig'
BROKEN_ALLCONFIG_PATH = 'tools/testing/kunit/configs/broken_on_uml.config'
class ConfigError(Exception):
@@ -99,19 +100,22 @@ class LinuxSourceTreeOperations(object):
stderr=subprocess.STDOUT)
process.wait(timeout)
-
def get_kconfig_path(build_dir):
kconfig_path = KCONFIG_PATH
if build_dir:
kconfig_path = os.path.join(build_dir, KCONFIG_PATH)
return kconfig_path
+def get_kunitconfig_path(build_dir):
+ kunitconfig_path = KUNITCONFIG_PATH
+ if build_dir:
+ kunitconfig_path = os.path.join(build_dir, KUNITCONFIG_PATH)
+ return kunitconfig_path
+
class LinuxSourceTree(object):
"""Represents a Linux kernel source tree with KUnit tests."""
def __init__(self):
- self._kconfig = kunit_config.Kconfig()
- self._kconfig.read_from_file(kunitconfig_path)
self._ops = LinuxSourceTreeOperations()
signal.signal(signal.SIGINT, self.signal_handler)
@@ -123,6 +127,16 @@ class LinuxSourceTree(object):
return False
return True
+ def create_unitconfig(self, build_dir, defconfig=DEFAULT_KUNITCONFIG_PATH):
+ kunitconfig_path = get_kunitconfig_path(build_dir)
+ if not os.path.exists(kunitconfig_path):
+ shutil.copyfile(defconfig, kunitconfig_path)
+
+ def read_unitconfig(self, build_dir):
+ kunitconfig_path = get_kunitconfig_path(build_dir)
+ self._kconfig = kunit_config.Kconfig()
+ self._kconfig.read_from_file(kunitconfig_path)
+
def validate_config(self, build_dir):
kconfig_path = get_kconfig_path(build_dir)
validated_kconfig = kunit_config.Kconfig()
--
2.28.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v1 2/3] kunit: Do not pollute source directory with generated files (test.log)
2020-10-15 15:23 [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
@ 2020-10-15 15:23 ` Andy Shevchenko
2020-10-23 20:39 ` Brendan Higgins
2020-10-15 15:23 ` [PATCH v1 3/3] kunit: Introduce get_file_path() helper Andy Shevchenko
2020-10-23 20:37 ` [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Brendan Higgins
2 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2020-10-15 15:23 UTC (permalink / raw)
To: Brendan Higgins, linux-kselftest, Shuah Khan, kunit-dev; +Cc: Andy Shevchenko
When --build_dir is provided use it and do not pollute source directory
which even can be mounted over network or read-only.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
tools/testing/kunit/kunit_kernel.py | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
index 412dc5e3102b..3a68dc51d33d 100644
--- a/tools/testing/kunit/kunit_kernel.py
+++ b/tools/testing/kunit/kunit_kernel.py
@@ -21,6 +21,7 @@ KCONFIG_PATH = '.config'
KUNITCONFIG_PATH = '.kunitconfig'
DEFAULT_KUNITCONFIG_PATH = 'arch/um/configs/kunit_defconfig'
BROKEN_ALLCONFIG_PATH = 'tools/testing/kunit/configs/broken_on_uml.config'
+OUTFILE_PATH = 'test.log'
class ConfigError(Exception):
"""Represents an error trying to configure the Linux kernel."""
@@ -89,11 +90,12 @@ class LinuxSourceTreeOperations(object):
except subprocess.CalledProcessError as e:
raise BuildError(e.output.decode())
- def linux_bin(self, params, timeout, build_dir, outfile):
+ def linux_bin(self, params, timeout, build_dir):
"""Runs the Linux UML binary. Must be named 'linux'."""
linux_bin = './linux'
if build_dir:
linux_bin = os.path.join(build_dir, 'linux')
+ outfile = get_outfile_path(build_dir)
with open(outfile, 'w') as output:
process = subprocess.Popen([linux_bin] + params,
stdout=output,
@@ -112,6 +114,12 @@ def get_kunitconfig_path(build_dir):
kunitconfig_path = os.path.join(build_dir, KUNITCONFIG_PATH)
return kunitconfig_path
+def get_outfile_path(build_dir):
+ outfile_path = OUTFILE_PATH
+ if build_dir:
+ outfile_path = os.path.join(build_dir, OUTFILE_PATH)
+ return outfile_path
+
class LinuxSourceTree(object):
"""Represents a Linux kernel source tree with KUnit tests."""
@@ -192,8 +200,8 @@ class LinuxSourceTree(object):
def run_kernel(self, args=[], build_dir='', timeout=None):
args.extend(['mem=1G'])
- outfile = 'test.log'
- self._ops.linux_bin(args, timeout, build_dir, outfile)
+ self._ops.linux_bin(args, timeout, build_dir)
+ outfile = get_outfile_path(build_dir)
subprocess.call(['stty', 'sane'])
with open(outfile, 'r') as file:
for line in file:
--
2.28.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v1 3/3] kunit: Introduce get_file_path() helper
2020-10-15 15:23 [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2020-10-15 15:23 ` [PATCH v1 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
@ 2020-10-15 15:23 ` Andy Shevchenko
2020-10-23 20:41 ` Brendan Higgins
2020-10-23 20:37 ` [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Brendan Higgins
2 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2020-10-15 15:23 UTC (permalink / raw)
To: Brendan Higgins, linux-kselftest, Shuah Khan, kunit-dev; +Cc: Andy Shevchenko
Helper allows to derive file names depending on --build_dir argument.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
tools/testing/kunit/kunit_kernel.py | 24 +++++++++---------------
1 file changed, 9 insertions(+), 15 deletions(-)
diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
index 3a68dc51d33d..1f317bd1ec4f 100644
--- a/tools/testing/kunit/kunit_kernel.py
+++ b/tools/testing/kunit/kunit_kernel.py
@@ -23,6 +23,11 @@ DEFAULT_KUNITCONFIG_PATH = 'arch/um/configs/kunit_defconfig'
BROKEN_ALLCONFIG_PATH = 'tools/testing/kunit/configs/broken_on_uml.config'
OUTFILE_PATH = 'test.log'
+def get_file_path(build_dir, default):
+ if build_dir:
+ default = os.path.join(build_dir, default)
+ return default
+
class ConfigError(Exception):
"""Represents an error trying to configure the Linux kernel."""
@@ -92,9 +97,7 @@ class LinuxSourceTreeOperations(object):
def linux_bin(self, params, timeout, build_dir):
"""Runs the Linux UML binary. Must be named 'linux'."""
- linux_bin = './linux'
- if build_dir:
- linux_bin = os.path.join(build_dir, 'linux')
+ linux_bin = get_file_path(build_dir, 'linux')
outfile = get_outfile_path(build_dir)
with open(outfile, 'w') as output:
process = subprocess.Popen([linux_bin] + params,
@@ -103,22 +106,13 @@ class LinuxSourceTreeOperations(object):
process.wait(timeout)
def get_kconfig_path(build_dir):
- kconfig_path = KCONFIG_PATH
- if build_dir:
- kconfig_path = os.path.join(build_dir, KCONFIG_PATH)
- return kconfig_path
+ return get_file_path(build_dir, KCONFIG_PATH)
def get_kunitconfig_path(build_dir):
- kunitconfig_path = KUNITCONFIG_PATH
- if build_dir:
- kunitconfig_path = os.path.join(build_dir, KUNITCONFIG_PATH)
- return kunitconfig_path
+ return get_file_path(build_dir, KUNITCONFIG_PATH)
def get_outfile_path(build_dir):
- outfile_path = OUTFILE_PATH
- if build_dir:
- outfile_path = os.path.join(build_dir, OUTFILE_PATH)
- return outfile_path
+ return get_file_path(build_dir, OUTFILE_PATH)
class LinuxSourceTree(object):
"""Represents a Linux kernel source tree with KUnit tests."""
--
2.28.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v1 3/3] kunit: Introduce get_file_path() helper
2020-10-15 15:23 ` [PATCH v1 3/3] kunit: Introduce get_file_path() helper Andy Shevchenko
@ 2020-10-23 20:41 ` Brendan Higgins
0 siblings, 0 replies; 6+ messages in thread
From: Brendan Higgins @ 2020-10-23 20:41 UTC (permalink / raw)
To: Andy Shevchenko
Cc: open list:KERNEL SELFTEST FRAMEWORK, Shuah Khan, KUnit Development
On Thu, Oct 15, 2020 at 8:23 AM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> Helper allows to derive file names depending on --build_dir argument.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Tested-by: Brendan Higgins <brendanhiggins@google.com>
Greatly appreciated!
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig)
2020-10-15 15:23 [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2020-10-15 15:23 ` [PATCH v1 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
2020-10-15 15:23 ` [PATCH v1 3/3] kunit: Introduce get_file_path() helper Andy Shevchenko
@ 2020-10-23 20:37 ` Brendan Higgins
2 siblings, 0 replies; 6+ messages in thread
From: Brendan Higgins @ 2020-10-23 20:37 UTC (permalink / raw)
To: Andy Shevchenko
Cc: open list:KERNEL SELFTEST FRAMEWORK, Shuah Khan, KUnit Development
On Thu, Oct 15, 2020 at 8:23 AM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> When --build_dir is provided use it and do not pollute source directory
> which even can be mounted over network or read-only.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Tested-by: Brendan Higgins <brendanhiggins@google.com>
One minor nit below:
> ---
> tools/testing/kunit/kunit.py | 25 ++++++++++++-------------
> tools/testing/kunit/kunit_kernel.py | 24 +++++++++++++++++++-----
> 2 files changed, 31 insertions(+), 18 deletions(-)
>
> diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py
> index ebf5f5763dee..1907bf9aacac 100755
> --- a/tools/testing/kunit/kunit.py
> +++ b/tools/testing/kunit/kunit.py
> @@ -11,7 +11,6 @@ import argparse
> import sys
> import os
> import time
> -import shutil
>
> from collections import namedtuple
> from enum import Enum, auto
> @@ -44,11 +43,6 @@ 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 get_kernel_root_path():
> parts = sys.argv[0] if not __file__ else __file__
> parts = os.path.realpath(parts).split('tools/testing/kunit')
> @@ -61,7 +55,6 @@ def config_tests(linux: kunit_kernel.LinuxSourceTree,
> kunit_parser.print_with_timestamp('Configuring KUnit Kernel ...')
>
> config_start = time.time()
> - create_default_kunitconfig()
> success = linux.build_reconfig(request.build_dir, request.make_options)
> config_end = time.time()
> if not success:
> @@ -262,12 +255,12 @@ def main(argv, linux=None):
> 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 linux:
> linux = kunit_kernel.LinuxSourceTree()
>
> + linux.create_unitconfig(cli_args.build_dir)
> + linux.read_unitconfig(cli_args.build_dir)
> +
> request = KunitRequest(cli_args.raw_output,
> cli_args.timeout,
> cli_args.jobs,
> @@ -283,12 +276,12 @@ 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):
> - create_default_kunitconfig()
> -
> if not linux:
> linux = kunit_kernel.LinuxSourceTree()
>
> + linux.create_unitconfig(cli_args.build_dir)
> + linux.read_unitconfig(cli_args.build_dir)
> +
> request = KunitConfigRequest(cli_args.build_dir,
> cli_args.make_options)
> result = config_tests(linux, request)
> @@ -301,6 +294,9 @@ def main(argv, linux=None):
> if not linux:
> linux = kunit_kernel.LinuxSourceTree()
>
> + linux.create_unitconfig(cli_args.build_dir)
> + linux.read_unitconfig(cli_args.build_dir)
> +
> request = KunitBuildRequest(cli_args.jobs,
> cli_args.build_dir,
> cli_args.alltests,
> @@ -315,6 +311,9 @@ def main(argv, linux=None):
> if not linux:
> linux = kunit_kernel.LinuxSourceTree()
>
> + linux.create_unitconfig(cli_args.build_dir)
> + linux.read_unitconfig(cli_args.build_dir)
> +
> exec_request = KunitExecRequest(cli_args.timeout,
> cli_args.build_dir,
> cli_args.alltests)
> diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
> index b557b1e93f98..412dc5e3102b 100644
> --- a/tools/testing/kunit/kunit_kernel.py
> +++ b/tools/testing/kunit/kunit_kernel.py
> @@ -6,10 +6,10 @@
> # Author: Felix Guo <felixguoxiuping@gmail.com>
> # Author: Brendan Higgins <brendanhiggins@google.com>
>
> -
> import logging
> import subprocess
> import os
> +import shutil
> import signal
>
> from contextlib import ExitStack
> @@ -18,7 +18,8 @@ import kunit_config
> import kunit_parser
>
> KCONFIG_PATH = '.config'
> -kunitconfig_path = '.kunitconfig'
> +KUNITCONFIG_PATH = '.kunitconfig'
> +DEFAULT_KUNITCONFIG_PATH = 'arch/um/configs/kunit_defconfig'
> BROKEN_ALLCONFIG_PATH = 'tools/testing/kunit/configs/broken_on_uml.config'
>
> class ConfigError(Exception):
> @@ -99,19 +100,22 @@ class LinuxSourceTreeOperations(object):
> stderr=subprocess.STDOUT)
> process.wait(timeout)
>
> -
> def get_kconfig_path(build_dir):
> kconfig_path = KCONFIG_PATH
> if build_dir:
> kconfig_path = os.path.join(build_dir, KCONFIG_PATH)
> return kconfig_path
>
> +def get_kunitconfig_path(build_dir):
> + kunitconfig_path = KUNITCONFIG_PATH
> + if build_dir:
> + kunitconfig_path = os.path.join(build_dir, KUNITCONFIG_PATH)
> + return kunitconfig_path
> +
> class LinuxSourceTree(object):
> """Represents a Linux kernel source tree with KUnit tests."""
>
> def __init__(self):
> - self._kconfig = kunit_config.Kconfig()
> - self._kconfig.read_from_file(kunitconfig_path)
> self._ops = LinuxSourceTreeOperations()
> signal.signal(signal.SIGINT, self.signal_handler)
>
> @@ -123,6 +127,16 @@ class LinuxSourceTree(object):
> return False
> return True
>
> + def create_unitconfig(self, build_dir, defconfig=DEFAULT_KUNITCONFIG_PATH):
nit: I think this should be create_kunitconfig() since everything else
refers to it as kunitconfig.
> + kunitconfig_path = get_kunitconfig_path(build_dir)
> + if not os.path.exists(kunitconfig_path):
> + shutil.copyfile(defconfig, kunitconfig_path)
> +
> + def read_unitconfig(self, build_dir):
nit: Same as above: s/read_unitconfig/read_kunitconfig/.
> + kunitconfig_path = get_kunitconfig_path(build_dir)
> + self._kconfig = kunit_config.Kconfig()
> + self._kconfig.read_from_file(kunitconfig_path)
> +
> def validate_config(self, build_dir):
> kconfig_path = get_kconfig_path(build_dir)
> validated_kconfig = kunit_config.Kconfig()
> --
> 2.28.0
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-10-23 20:41 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-15 15:23 [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2020-10-15 15:23 ` [PATCH v1 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
2020-10-23 20:39 ` Brendan Higgins
2020-10-15 15:23 ` [PATCH v1 3/3] kunit: Introduce get_file_path() helper Andy Shevchenko
2020-10-23 20:41 ` Brendan Higgins
2020-10-23 20:37 ` [PATCH v1 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Brendan Higgins
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).