[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/23] iotests: Write test output to TEST_DIR
From: |
Hanna Reitz |
Subject: |
[PULL 07/23] iotests: Write test output to TEST_DIR |
Date: |
Mon, 7 Mar 2022 11:35:33 +0100 |
Drop the use of OUTPUT_DIR (test/qemu-iotests under the build
directory), and instead write test output files (.out.bad, .notrun, and
.casenotrun) to TEST_DIR.
With this, the same test can be run concurrently without the separate
instances interfering, because they will need separate TEST_DIRs anyway.
Running the same test separately is useful when running the iotests with
various format/protocol combinations in parallel, or when you just want
to aggressively exercise a single test (e.g. when it fails only
sporadically).
Putting this output into TEST_DIR means that it will stick around for
inspection after the test run is done (though running the same test in
the same TEST_DIR will overwrite it, just as it used to be); but given
that TEST_DIR is a scratch directory, it should be clear that users can
delete all of its content at any point. (And if TEST_DIR is on tmpfs,
it will just disappear on shutdown.) Contrarily, alternative approaches
that would put these output files into OUTPUT_DIR with some prefix to
differentiate between separate test runs might easily lead to cluttering
OUTPUT_DIR.
(This change means OUTPUT_DIR is no longer written to by the iotests, so
we can drop its usage altogether.)
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20220221172909.762858-1-hreitz@redhat.com>
[hreitz: Simplified `Path(os.path.join(x, y))` to `Path(x, y)`, as
suggested by Vladimir; and rebased on 9086c7639822b6
("tests/qemu-iotests: Rework the checks and spots using GNU
sed")]
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
tests/qemu-iotests/common.rc | 6 +++---
tests/qemu-iotests/iotests.py | 5 ++---
tests/qemu-iotests/testenv.py | 5 +----
tests/qemu-iotests/testrunner.py | 14 ++++++++------
4 files changed, 14 insertions(+), 16 deletions(-)
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 3bfd94c2e0..227e0a5be9 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -20,7 +20,7 @@
# bail out, setting up .notrun file
_notrun()
{
- echo "$*" >"$OUTPUT_DIR/$seq.notrun"
+ echo "$*" >"$TEST_DIR/$seq.notrun"
echo "$seq not run: $*"
status=0
exit
@@ -739,14 +739,14 @@ _img_info()
#
_casenotrun()
{
- echo " [case not run] $*" >>"$OUTPUT_DIR/$seq.casenotrun"
+ echo " [case not run] $*" >>"$TEST_DIR/$seq.casenotrun"
}
# just plain bail out
#
_fail()
{
- echo "$*" | tee -a "$OUTPUT_DIR/$seq.full"
+ echo "$*" | tee -a "$TEST_DIR/$seq.full"
echo "(see $seq.full for details)"
status=1
exit 1
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 6027780180..aff1b5d305 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -85,7 +85,6 @@
imgfmt = os.environ.get('IMGFMT', 'raw')
imgproto = os.environ.get('IMGPROTO', 'file')
-output_dir = os.environ.get('OUTPUT_DIR', '.')
try:
test_dir = os.environ['TEST_DIR']
@@ -1239,7 +1238,7 @@ def notrun(reason):
# Each test in qemu-iotests has a number ("seq")
seq = os.path.basename(sys.argv[0])
- with open('%s/%s.notrun' % (output_dir, seq), 'w', encoding='utf-8') \
+ with open('%s/%s.notrun' % (test_dir, seq), 'w', encoding='utf-8') \
as outfile:
outfile.write(reason + '\n')
logger.warning("%s not run: %s", seq, reason)
@@ -1254,7 +1253,7 @@ def case_notrun(reason):
# Each test in qemu-iotests has a number ("seq")
seq = os.path.basename(sys.argv[0])
- with open('%s/%s.casenotrun' % (output_dir, seq), 'a', encoding='utf-8') \
+ with open('%s/%s.casenotrun' % (test_dir, seq), 'a', encoding='utf-8') \
as outfile:
outfile.write(' [case not run] ' + reason + '\n')
diff --git a/tests/qemu-iotests/testenv.py b/tests/qemu-iotests/testenv.py
index 0f32897fe8..b11e943c8a 100644
--- a/tests/qemu-iotests/testenv.py
+++ b/tests/qemu-iotests/testenv.py
@@ -66,7 +66,7 @@ class TestEnv(ContextManager['TestEnv']):
# pylint: disable=too-many-instance-attributes
env_variables = ['PYTHONPATH', 'TEST_DIR', 'SOCK_DIR', 'SAMPLE_IMG_DIR',
- 'OUTPUT_DIR', 'PYTHON', 'QEMU_PROG', 'QEMU_IMG_PROG',
+ 'PYTHON', 'QEMU_PROG', 'QEMU_IMG_PROG',
'QEMU_IO_PROG', 'QEMU_NBD_PROG', 'QSD_PROG',
'QEMU_OPTIONS', 'QEMU_IMG_OPTIONS',
'QEMU_IO_OPTIONS', 'QEMU_IO_OPTIONS_NO_FMT',
@@ -106,7 +106,6 @@ def init_directories(self) -> None:
TEST_DIR
SOCK_DIR
SAMPLE_IMG_DIR
- OUTPUT_DIR
"""
# Path where qemu goodies live in this source tree.
@@ -134,8 +133,6 @@ def init_directories(self) -> None:
os.path.join(self.source_iotests,
'sample_images'))
- self.output_dir = os.getcwd() # OUTPUT_DIR
-
def init_binaries(self) -> None:
"""Init binary path variables:
PYTHON (for bash tests)
diff --git a/tests/qemu-iotests/testrunner.py b/tests/qemu-iotests/testrunner.py
index 0c7dc34a9e..41083ff9c6 100644
--- a/tests/qemu-iotests/testrunner.py
+++ b/tests/qemu-iotests/testrunner.py
@@ -259,9 +259,6 @@ def do_run_test(self, test: str, mp: bool) -> TestResult:
"""
f_test = Path(test)
- f_bad = Path(f_test.name + '.out.bad')
- f_notrun = Path(f_test.name + '.notrun')
- f_casenotrun = Path(f_test.name + '.casenotrun')
f_reference = Path(self.find_reference(test))
if not f_test.exists():
@@ -276,9 +273,6 @@ def do_run_test(self, test: str, mp: bool) -> TestResult:
description='No qualified output '
f'(expected {f_reference})')
- for p in (f_bad, f_notrun, f_casenotrun):
- silent_unlink(p)
-
args = [str(f_test.resolve())]
env = self.env.prepare_subprocess(args)
if mp:
@@ -288,6 +282,14 @@ def do_run_test(self, test: str, mp: bool) -> TestResult:
env[d] = os.path.join(env[d], 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')
+ f_notrun = Path(test_dir, f_test.name + '.notrun')
+ f_casenotrun = Path(test_dir, f_test.name + '.casenotrun')
+
+ for p in (f_notrun, f_casenotrun):
+ silent_unlink(p)
+
t0 = time.time()
with f_bad.open('w', encoding="utf-8") as f:
with subprocess.Popen(args, cwd=str(f_test.parent), env=env,
--
2.34.1
- [PULL 00/23] Block patches, Hanna Reitz, 2022/03/07
- [PULL 04/23] block: fix preallocate filter: don't do unaligned preallocate requests, Hanna Reitz, 2022/03/07
- [PULL 02/23] block/curl.c: Set error message string if curl_init_state() fails, Hanna Reitz, 2022/03/07
- [PULL 01/23] ide: Increment BB in-flight counter for TRIM BH, Hanna Reitz, 2022/03/07
- [PULL 03/23] block/curl.c: Check error return from curl_easy_setopt(), Hanna Reitz, 2022/03/07
- [PULL 05/23] tests/qemu-iotests/040: Skip TestCommitWithFilters without 'throttle', Hanna Reitz, 2022/03/07
- [PULL 07/23] iotests: Write test output to TEST_DIR,
Hanna Reitz <=
- [PULL 10/23] block/block-copy: block_copy_state_new(): add bitmap parameter, Hanna Reitz, 2022/03/07
- [PULL 11/23] block/copy-before-write: add bitmap open parameter, Hanna Reitz, 2022/03/07
- [PULL 12/23] block/block-copy: add block_copy_reset(), Hanna Reitz, 2022/03/07
- [PULL 06/23] tests/qemu-iotests/testrunner: Quote "case not run" lines in TAP mode, Hanna Reitz, 2022/03/07
- [PULL 16/23] block/reqlist: add reqlist_wait_all(), Hanna Reitz, 2022/03/07
- [PULL 14/23] block/reqlist: reqlist_find_conflict(): use ranges_overlap(), Hanna Reitz, 2022/03/07
- [PULL 09/23] block/dirty-bitmap: bdrv_merge_dirty_bitmap(): add return value, Hanna Reitz, 2022/03/07
- [PULL 19/23] block: copy-before-write: realize snapshot-access API, Hanna Reitz, 2022/03/07
- [PULL 13/23] block: intoduce reqlist, Hanna Reitz, 2022/03/07
- [PULL 15/23] block/dirty-bitmap: introduce bdrv_dirty_bitmap_status(), Hanna Reitz, 2022/03/07