Skip to content

Commit

Permalink
qemu-iotests: let "check" spawn an arbitrary test command
Browse files Browse the repository at this point in the history
Right now there is no easy way for "check" to print a reproducer command.
Because such a reproducer command line would be huge, we can instead teach
check to start a command of our choice.  This can be for example a Python
unit test with arguments to only run a specific subtest.

Move the trailing empty line to print_env(), since it always looks better
and one caller was not adding it.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Tested-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Message-Id: <20210323181928.311862-5-pbonzini@redhat.com>
Message-Id: <20210503110110.476887-5-pbonzini@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
  • Loading branch information
bonzini authored and XanClic committed May 14, 2021
1 parent c64430d commit 480b75e
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
19 changes: 18 additions & 1 deletion tests/qemu-iotests/check
Expand Up @@ -19,6 +19,9 @@
import os
import sys
import argparse
import shutil
from pathlib import Path

from findtests import TestFinder
from testenv import TestEnv
from testrunner import TestRunner
Expand Down Expand Up @@ -100,7 +103,7 @@ def make_argparser() -> argparse.ArgumentParser:
'rerun failed ./check command, starting from the '
'middle of the process.')
g_sel.add_argument('tests', metavar='TEST_FILES', nargs='*',
help='tests to run')
help='tests to run, or "--" followed by a command')

return p

Expand All @@ -113,6 +116,20 @@ if __name__ == '__main__':
imgopts=args.imgopts, misalign=args.misalign,
debug=args.debug, valgrind=args.valgrind)

if len(sys.argv) > 1 and sys.argv[-len(args.tests)-1] == '--':
if not args.tests:
sys.exit("missing command after '--'")
cmd = args.tests
env.print_env()
exec_pathstr = shutil.which(cmd[0])
if exec_pathstr is None:
sys.exit('command not found: ' + cmd[0])
exec_path = Path(exec_pathstr).resolve()
cmd[0] = str(exec_path)
full_env = env.prepare_subprocess(cmd)
os.chdir(exec_path.parent)
os.execve(cmd[0], cmd, full_env)

testfinder = TestFinder(test_dir=env.source_iotests)

groups = args.groups.split(',') if args.groups else None
Expand Down
3 changes: 2 additions & 1 deletion tests/qemu-iotests/testenv.py
Expand Up @@ -284,7 +284,8 @@ def print_env(self) -> None:
PLATFORM -- {platform}
TEST_DIR -- {TEST_DIR}
SOCK_DIR -- {SOCK_DIR}
SOCKET_SCM_HELPER -- {SOCKET_SCM_HELPER}"""
SOCKET_SCM_HELPER -- {SOCKET_SCM_HELPER}
"""

args = collections.defaultdict(str, self.get_env())

Expand Down
1 change: 0 additions & 1 deletion tests/qemu-iotests/testrunner.py
Expand Up @@ -316,7 +316,6 @@ def run_tests(self, tests: List[str]) -> bool:

if not self.makecheck:
self.env.print_env()
print()

test_field_width = max(len(os.path.basename(t)) for t in tests) + 2

Expand Down

0 comments on commit 480b75e

Please sign in to comment.