Skip to content

Commit

Permalink
Merge tag 'linux-kselftest-kunit-5.6-rc4' of git://git.kernel.org/pub…
Browse files Browse the repository at this point in the history
…/scm/linux/kernel/git/shuah/linux-kselftest

Pull Kunit fixes from Shuah Khan:
 "This Kselftest kunit update consists of fixes to documentation and
  the run-time tool from Brendan Higgins and Heidi Fahim"

* tag 'linux-kselftest-kunit-5.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
  kunit: run kunit_tool from any directory
  kunit: test: Improve error messages for kunit_tool when kunitconfig is invalid
  Documentation: kunit: fixed sphinx error in code block
  • Loading branch information
torvalds committed Feb 26, 2020
2 parents 2fcc741 + be886ba commit b98cce1
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 12 deletions.
1 change: 1 addition & 0 deletions Documentation/dev-tools/kunit/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,7 @@ options to your ``.config``:
Once the kernel is built and installed, a simple

.. code-block:: bash
modprobe example-test
...will run the tests.
Expand Down
12 changes: 12 additions & 0 deletions tools/testing/kunit/kunit.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@

KunitRequest = namedtuple('KunitRequest', ['raw_output','timeout', 'jobs', 'build_dir', 'defconfig'])

KernelDirectoryPath = sys.argv[0].split('tools/testing/kunit/')[0]

class KunitStatus(Enum):
SUCCESS = auto()
CONFIG_FAILURE = auto()
Expand All @@ -35,6 +37,13 @@ def create_default_kunitconfig():
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')
if len(parts) != 2:
sys.exit(1)
return parts[0]

def run_tests(linux: kunit_kernel.LinuxSourceTree,
request: KunitRequest) -> KunitResult:
config_start = time.time()
Expand Down Expand Up @@ -114,6 +123,9 @@ def main(argv, linux=None):
cli_args = parser.parse_args(argv)

if cli_args.subcommand == 'run':
if get_kernel_root_path():
os.chdir(get_kernel_root_path())

if cli_args.build_dir:
if not os.path.exists(cli_args.build_dir):
os.mkdir(cli_args.build_dir)
Expand Down
28 changes: 16 additions & 12 deletions tools/testing/kunit/kunit_kernel.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,20 @@ def clean(self):
return False
return True

def validate_config(self, build_dir):
kconfig_path = get_kconfig_path(build_dir)
validated_kconfig = kunit_config.Kconfig()
validated_kconfig.read_from_file(kconfig_path)
if not self._kconfig.is_subset_of(validated_kconfig):
invalid = self._kconfig.entries() - validated_kconfig.entries()
message = 'Provided Kconfig is not contained in validated .config. Following fields found in kunitconfig, ' \
'but not in .config: %s' % (
', '.join([str(e) for e in invalid])
)
logging.error(message)
return False
return True

def build_config(self, build_dir):
kconfig_path = get_kconfig_path(build_dir)
if build_dir and not os.path.exists(build_dir):
Expand All @@ -103,12 +117,7 @@ def build_config(self, build_dir):
except ConfigError as e:
logging.error(e)
return False
validated_kconfig = kunit_config.Kconfig()
validated_kconfig.read_from_file(kconfig_path)
if not self._kconfig.is_subset_of(validated_kconfig):
logging.error('Provided Kconfig is not contained in validated .config!')
return False
return True
return self.validate_config(build_dir)

def build_reconfig(self, build_dir):
"""Creates a new .config if it is not a subset of the .kunitconfig."""
Expand All @@ -133,12 +142,7 @@ def build_um_kernel(self, jobs, build_dir):
except (ConfigError, BuildError) as e:
logging.error(e)
return False
used_kconfig = kunit_config.Kconfig()
used_kconfig.read_from_file(get_kconfig_path(build_dir))
if not self._kconfig.is_subset_of(used_kconfig):
logging.error('Provided Kconfig is not contained in final config!')
return False
return True
return self.validate_config(build_dir)

def run_kernel(self, args=[], timeout=None, build_dir=''):
args.extend(['mem=256M'])
Expand Down

0 comments on commit b98cce1

Please sign in to comment.