aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2023-03-15 17:43:17 +0000
committerAlex Bennée <alex.bennee@linaro.org>2023-03-22 15:08:26 +0000
commit0c8076b024cd55c8b59323f3aa7c88481436eb3a (patch)
tree13534785ba615e43d5e33ea3c64c7d6b359c42d2
parent85b983485be712e3bf74d2352cbd451cb1163c21 (diff)
downloadqemu-0c8076b024cd55c8b59323f3aa7c88481436eb3a.zip
qemu-0c8076b024cd55c8b59323f3aa7c88481436eb3a.tar.gz
qemu-0c8076b024cd55c8b59323f3aa7c88481436eb3a.tar.bz2
iotests: explicitly pass source/build dir to 'check' command
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>
-rwxr-xr-xtests/qemu-iotests/check25
-rw-r--r--tests/qemu-iotests/testenv.py13
2 files changed, 27 insertions, 11 deletions
diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
index 9bdda13..da7e8a8 100755
--- a/tests/qemu-iotests/check
+++ b/tests/qemu-iotests/check
@@ -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')
@@ -113,6 +127,11 @@ 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
@@ -120,7 +139,9 @@ def make_argparser() -> argparse.ArgumentParser:
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,
diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py
index a864c74..aa9d735 100644
--- a/tests/qemu-iotests/testenv.py
+++ b/tests/qemu-iotests/testenv.py
@@ -170,7 +170,8 @@ class TestEnv(ContextManager['TestEnv']):
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,
@@ -211,14 +212,8 @@ class TestEnv(ContextManager['TestEnv']):
# 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, '..', '..')