kunit: Do not pollute source directory with generated files (.kunitconfig)

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>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
Andy Shevchenko 2020-10-26 18:59:25 +02:00 коммит произвёл Shuah Khan
Родитель b7e0b983ff
Коммит fcdb0bc08c
2 изменённых файлов: 31 добавлений и 18 удалений

Просмотреть файл

@ -11,7 +11,6 @@ import argparse
import sys import sys
import os import os
import time import time
import shutil
from collections import namedtuple from collections import namedtuple
from enum import Enum, auto from enum import Enum, auto
@ -44,11 +43,6 @@ class KunitStatus(Enum):
BUILD_FAILURE = auto() BUILD_FAILURE = auto()
TEST_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(): def get_kernel_root_path():
parts = sys.argv[0] if not __file__ else __file__ parts = sys.argv[0] if not __file__ else __file__
parts = os.path.realpath(parts).split('tools/testing/kunit') 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 ...') kunit_parser.print_with_timestamp('Configuring KUnit Kernel ...')
config_start = time.time() config_start = time.time()
create_default_kunitconfig()
success = linux.build_reconfig(request.build_dir, request.make_options) success = linux.build_reconfig(request.build_dir, request.make_options)
config_end = time.time() config_end = time.time()
if not success: if not success:
@ -262,12 +255,12 @@ def main(argv, linux=None):
if not os.path.exists(cli_args.build_dir): if not os.path.exists(cli_args.build_dir):
os.mkdir(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: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree()
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,
cli_args.jobs, cli_args.jobs,
@ -283,12 +276,12 @@ def main(argv, linux=None):
not os.path.exists(cli_args.build_dir)): not os.path.exists(cli_args.build_dir)):
os.mkdir(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: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree()
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)
result = config_tests(linux, request) result = config_tests(linux, request)
@ -301,6 +294,9 @@ def main(argv, linux=None):
if not linux: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree()
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,
cli_args.alltests, cli_args.alltests,
@ -315,6 +311,9 @@ def main(argv, linux=None):
if not linux: if not linux:
linux = kunit_kernel.LinuxSourceTree() linux = kunit_kernel.LinuxSourceTree()
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,
cli_args.alltests) cli_args.alltests)

Просмотреть файл

@ -6,10 +6,10 @@
# Author: Felix Guo <felixguoxiuping@gmail.com> # Author: Felix Guo <felixguoxiuping@gmail.com>
# Author: Brendan Higgins <brendanhiggins@google.com> # Author: Brendan Higgins <brendanhiggins@google.com>
import logging import logging
import subprocess import subprocess
import os import os
import shutil
import signal import signal
from contextlib import ExitStack from contextlib import ExitStack
@ -18,7 +18,8 @@ import kunit_config
import kunit_parser import kunit_parser
KCONFIG_PATH = '.config' 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' BROKEN_ALLCONFIG_PATH = 'tools/testing/kunit/configs/broken_on_uml.config'
class ConfigError(Exception): class ConfigError(Exception):
@ -99,19 +100,22 @@ class LinuxSourceTreeOperations(object):
stderr=subprocess.STDOUT) stderr=subprocess.STDOUT)
process.wait(timeout) process.wait(timeout)
def get_kconfig_path(build_dir): def get_kconfig_path(build_dir):
kconfig_path = KCONFIG_PATH kconfig_path = KCONFIG_PATH
if build_dir: if build_dir:
kconfig_path = os.path.join(build_dir, KCONFIG_PATH) kconfig_path = os.path.join(build_dir, KCONFIG_PATH)
return 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): class LinuxSourceTree(object):
"""Represents a Linux kernel source tree with KUnit tests.""" """Represents a Linux kernel source tree with KUnit tests."""
def __init__(self): def __init__(self):
self._kconfig = kunit_config.Kconfig()
self._kconfig.read_from_file(kunitconfig_path)
self._ops = LinuxSourceTreeOperations() self._ops = LinuxSourceTreeOperations()
signal.signal(signal.SIGINT, self.signal_handler) signal.signal(signal.SIGINT, self.signal_handler)
@ -123,6 +127,16 @@ class LinuxSourceTree(object):
return False return False
return True 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): def validate_config(self, build_dir):
kconfig_path = get_kconfig_path(build_dir) kconfig_path = get_kconfig_path(build_dir)
validated_kconfig = kunit_config.Kconfig() validated_kconfig = kunit_config.Kconfig()