aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2023-03-15 17:43:22 +0000
committerAlex Bennée <alex.bennee@linaro.org>2023-03-22 15:08:26 +0000
commit5ba7db0938c8b8e6e457b9aab8c6c625913d773f (patch)
tree405d3ae69ee9cc28d6052df4a9f387b694cd6c0d /tests
parentcb845eaa88eb266c5023af06989e94d95c712871 (diff)
downloadqemu-5ba7db0938c8b8e6e457b9aab8c6c625913d773f.zip
qemu-5ba7db0938c8b8e6e457b9aab8c6c625913d773f.tar.gz
qemu-5ba7db0938c8b8e6e457b9aab8c6c625913d773f.tar.bz2
iotests: always use a unique sub-directory per test
The current test runner is only safe against parallel execution within a single instance of the 'check' process, and only if -j is given a value greater than 2. This prevents running multiple copies of the 'check' process for different test scenarios. This change switches the output / socket directories to always include the test name, image format and image protocol. This should allow full parallelism of all distinct test scenarios. eg running both qcow2 and raw tests at the same time, or both file and nbd tests at the same time. It would be possible to allow for parallelism of the same test scenario by including the pid, but that would potentially let many directories accumulate over time on failures, so is not done. 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-7-berrange@redhat.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230315174331.2959-24-alex.bennee@linaro.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/qemu-iotests/testrunner.py20
1 files changed, 10 insertions, 10 deletions
diff --git a/tests/qemu-iotests/testrunner.py b/tests/qemu-iotests/testrunner.py
index 81519ed..7b32227 100644
--- a/tests/qemu-iotests/testrunner.py
+++ b/tests/qemu-iotests/testrunner.py
@@ -228,13 +228,11 @@ class TestRunner(ContextManager['TestRunner']):
return f'{test}.out'
- def do_run_test(self, test: str, mp: bool) -> TestResult:
+ def do_run_test(self, test: str) -> TestResult:
"""
Run one test
:param test: test file path
- :param mp: if true, we are in a multiprocessing environment, use
- personal subdirectories for test run
Note: this method may be called from subprocess, so it does not
change ``self`` object in any way!
@@ -257,12 +255,14 @@ class TestRunner(ContextManager['TestRunner']):
args = [str(f_test.resolve())]
env = self.env.prepare_subprocess(args)
- if mp:
- # Split test directories, so that tests running in parallel don't
- # break each other.
- for d in ['TEST_DIR', 'SOCK_DIR']:
- env[d] = os.path.join(env[d], f_test.name)
- Path(env[d]).mkdir(parents=True, exist_ok=True)
+
+ # Split test directories, so that tests running in parallel don't
+ # break each other.
+ for d in ['TEST_DIR', 'SOCK_DIR']:
+ env[d] = os.path.join(
+ env[d],
+ f"{self.env.imgfmt}-{self.env.imgproto}-{f_test.name}")
+ Path(env[d]).mkdir(parents=True, exist_ok=True)
test_dir = env['TEST_DIR']
f_bad = Path(test_dir, f_test.name + '.out.bad')
@@ -347,7 +347,7 @@ class TestRunner(ContextManager['TestRunner']):
testname = os.path.basename(test)
print(f'# running {self.env.imgfmt} {testname}')
- res = self.do_run_test(test, mp)
+ res = self.do_run_test(test)
end = datetime.datetime.now().strftime('%H:%M:%S')
self.test_print_one_line(test=test,