* [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig)
@ 2020-10-26 16:59 Andy Shevchenko
2020-10-26 16:59 ` [PATCH v2 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Andy Shevchenko @ 2020-10-26 16:59 UTC (permalink / raw)
To: linux-kselftest, Shuah Khan, kunit-dev, SeongJae Park
Cc: Andy Shevchenko, Brendan Higgins
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>
---
v2: renamed *_uniconfig -> *_kunitconfig (Brendan), added tags (Brendan)
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..8cfeee98097f 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_kunitconfig(cli_args.build_dir)
+ linux.read_kunitconfig(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_kunitconfig(cli_args.build_dir)
+ linux.read_kunitconfig(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_kunitconfig(cli_args.build_dir)
+ linux.read_kunitconfig(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_kunitconfig(cli_args.build_dir)
+ linux.read_kunitconfig(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..633a2efcfdbd 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_kunitconfig(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_kunitconfig(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] 10+ messages in thread
* [PATCH v2 2/3] kunit: Do not pollute source directory with generated files (test.log)
2020-10-26 16:59 [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
@ 2020-10-26 16:59 ` Andy Shevchenko
2020-10-26 16:59 ` [PATCH v2 3/3] kunit: Introduce get_file_path() helper Andy Shevchenko
2020-10-30 19:50 ` [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2020-10-26 16:59 UTC (permalink / raw)
To: linux-kselftest, Shuah Khan, kunit-dev, SeongJae Park
Cc: Andy Shevchenko, Brendan Higgins
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>
---
v2: added tags (Brendan)
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 633a2efcfdbd..b4768fa03ce0 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] 10+ messages in thread
* [PATCH v2 3/3] kunit: Introduce get_file_path() helper
2020-10-26 16:59 [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2020-10-26 16:59 ` [PATCH v2 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
@ 2020-10-26 16:59 ` Andy Shevchenko
[not found] ` <20201028092915.8053-1-sjpark@amazon.com>
2020-10-30 19:50 ` [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2020-10-26 16:59 UTC (permalink / raw)
To: linux-kselftest, Shuah Khan, kunit-dev, SeongJae Park
Cc: Andy Shevchenko, Brendan Higgins
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>
---
v2: added tags (Brendan)
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 b4768fa03ce0..7e3f7f9aac96 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] 10+ messages in thread
* Re: [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig)
2020-10-26 16:59 [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2020-10-26 16:59 ` [PATCH v2 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
2020-10-26 16:59 ` [PATCH v2 3/3] kunit: Introduce get_file_path() helper Andy Shevchenko
@ 2020-10-30 19:50 ` Andy Shevchenko
2 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2020-10-30 19:50 UTC (permalink / raw)
To: linux-kselftest, Shuah Khan, kunit-dev, SeongJae Park; +Cc: Brendan Higgins
On Mon, Oct 26, 2020 at 06:59:25PM +0200, Andy Shevchenko wrote:
> When --build_dir is provided use it and do not pollute source directory
> which even can be mounted over network or read-only.
Can we get this applied?
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
> Tested-by: Brendan Higgins <brendanhiggins@google.com>
> ---
> v2: renamed *_uniconfig -> *_kunitconfig (Brendan), added tags (Brendan)
> 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..8cfeee98097f 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_kunitconfig(cli_args.build_dir)
> + linux.read_kunitconfig(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_kunitconfig(cli_args.build_dir)
> + linux.read_kunitconfig(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_kunitconfig(cli_args.build_dir)
> + linux.read_kunitconfig(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_kunitconfig(cli_args.build_dir)
> + linux.read_kunitconfig(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..633a2efcfdbd 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_kunitconfig(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_kunitconfig(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
>
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-11-11 17:18 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-26 16:59 [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
2020-10-26 16:59 ` [PATCH v2 2/3] kunit: Do not pollute source directory with generated files (test.log) Andy Shevchenko
2020-10-26 16:59 ` [PATCH v2 3/3] kunit: Introduce get_file_path() helper Andy Shevchenko
[not found] ` <20201028092915.8053-1-sjpark@amazon.com>
2020-11-03 11:25 ` Andy Shevchenko
2020-11-05 16:35 ` Brendan Higgins
2020-11-05 17:28 ` Andy Shevchenko
2020-11-05 17:56 ` Shuah Khan
2020-11-10 21:15 ` Shuah Khan
2020-11-11 17:19 ` Andy Shevchenko
2020-10-30 19:50 ` [PATCH v2 1/3] kunit: Do not pollute source directory with generated files (.kunitconfig) Andy Shevchenko
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.