Skip to content

Commit

Permalink
iotests: explicitly pass source/build dir to 'check' command
Browse files Browse the repository at this point in the history
The 'check' script has some rather dubious logic whereby it assumes
that if invoked as a symlink, then it is running from a separate
source tree and build tree, otherwise it assumes the current working
directory is a combined source and build tree.

This doesn't work if you want to invoke the 'check' script using
its full source tree path while still using a split source and build
tree layout. This would be a typical situation with meson if you ask
it to find the 'check' script path using files('check').

Rather than trying to make the logic more magical, add support for
explicitly passing the dirs using --source-dir and --build-dir. If
either is omitted the current logic is maintained.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Acked-by: Hanna Czenczek <hreitz@redhat.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20230303160727.3977246-2-berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230315174331.2959-19-alex.bennee@linaro.org>
  • Loading branch information
berrange authored and stsquad committed Mar 22, 2023
1 parent 85b9834 commit 0c8076b
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
25 changes: 23 additions & 2 deletions tests/qemu-iotests/check
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,23 @@ from findtests import TestFinder
from testenv import TestEnv
from testrunner import TestRunner

def get_default_path(follow_link=False):
"""
Try to automagically figure out the path we are running from.
"""
# called from the build tree?
if os.path.islink(sys.argv[0]):
if follow_link:
return os.path.dirname(os.readlink(sys.argv[0]))
else:
return os.path.dirname(os.path.abspath(sys.argv[0]))
else: # or source tree?
return os.getcwd()

def make_argparser() -> argparse.ArgumentParser:
p = argparse.ArgumentParser(description="Test run options")
p = argparse.ArgumentParser(
description="Test run options",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

p.add_argument('-n', '--dry-run', action='store_true',
help='show me, do not run tests')
Expand Down Expand Up @@ -113,14 +127,21 @@ def make_argparser() -> argparse.ArgumentParser:
'middle of the process.')
g_sel.add_argument('tests', metavar='TEST_FILES', nargs='*',
help='tests to run, or "--" followed by a command')
g_sel.add_argument('--build-dir', default=get_default_path(),
help='Path to iotests build directory')
g_sel.add_argument('--source-dir',
default=get_default_path(follow_link=True),
help='Path to iotests build directory')

return p


if __name__ == '__main__':
args = make_argparser().parse_args()

env = TestEnv(imgfmt=args.imgfmt, imgproto=args.imgproto,
env = TestEnv(source_dir=args.source_dir,
build_dir=args.build_dir,
imgfmt=args.imgfmt, imgproto=args.imgproto,
aiomode=args.aiomode, cachemode=args.cachemode,
imgopts=args.imgopts, misalign=args.misalign,
debug=args.debug, valgrind=args.valgrind,
Expand Down
13 changes: 4 additions & 9 deletions tests/qemu-iotests/testenv.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ def root(*names: str) -> str:
if not isxfile(b):
sys.exit('Not executable: ' + b)

def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
def __init__(self, source_dir: str, build_dir: str,
imgfmt: str, imgproto: str, aiomode: str,
cachemode: Optional[str] = None,
imgopts: Optional[str] = None,
misalign: bool = False,
Expand Down Expand Up @@ -211,14 +212,8 @@ def __init__(self, imgfmt: str, imgproto: str, aiomode: str,
# which are needed to initialize some environment variables. They are
# used by init_*() functions as well.

if os.path.islink(sys.argv[0]):
# called from the build tree
self.source_iotests = os.path.dirname(os.readlink(sys.argv[0]))
self.build_iotests = os.path.dirname(os.path.abspath(sys.argv[0]))
else:
# called from the source tree
self.source_iotests = os.getcwd()
self.build_iotests = self.source_iotests
self.source_iotests = source_dir
self.build_iotests = build_dir

self.build_root = os.path.join(self.build_iotests, '..', '..')

Expand Down

0 comments on commit 0c8076b

Please sign in to comment.