aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2023-03-15 17:43:21 +0000
committerAlex Bennée <alex.bennee@linaro.org>2023-03-22 15:08:26 +0000
commitcb845eaa88eb266c5023af06989e94d95c712871 (patch)
tree27f4291a80912df0d5fb6779b812cb54a4bc7cdb
parent6e5792a1f6ecc155fc977e3813e75fc8ede478ab (diff)
downloadqemu-cb845eaa88eb266c5023af06989e94d95c712871.zip
qemu-cb845eaa88eb266c5023af06989e94d95c712871.tar.gz
qemu-cb845eaa88eb266c5023af06989e94d95c712871.tar.bz2
iotests: connect stdin to /dev/null when running tests
Currently the tests have their stdin inherited from the test harness, meaning they are connected to a TTY. The QEMU processes spawned by certain tests, however, modify TTY settings and if the test exits abnormally the settings might not be restored. The python test harness thus has some logic which will capture the initial TTY settings and restore them once all tests are finished. This does not, however, take into account the possibility of many copies of the 'check' program running in parallel. With parallel execution, a later invokation may save the TTY state that QEMU has already modified, and thus restore bad state leaving the TTY non-functional. None of the I/O tests shnould actually be interactive requiring user input and so they should not require a TTY at all. To avoid this while TTY save/restore complexity we can connect the test stdin to /dev/null instead. 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-6-berrange@redhat.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230315174331.2959-23-alex.bennee@linaro.org>
-rw-r--r--tests/qemu-iotests/testrunner.py22
1 files changed, 2 insertions, 20 deletions
diff --git a/tests/qemu-iotests/testrunner.py b/tests/qemu-iotests/testrunner.py
index e734800..81519ed 100644
--- a/tests/qemu-iotests/testrunner.py
+++ b/tests/qemu-iotests/testrunner.py
@@ -24,12 +24,10 @@ import difflib
import subprocess
import contextlib
import json
-import termios
import shutil
import sys
from multiprocessing import Pool
-from contextlib import contextmanager
-from typing import List, Optional, Iterator, Any, Sequence, Dict, \
+from typing import List, Optional, Any, Sequence, Dict, \
ContextManager
from testenv import TestEnv
@@ -56,22 +54,6 @@ def file_diff(file1: str, file2: str) -> List[str]:
return res
-# We want to save current tty settings during test run,
-# since an aborting qemu call may leave things screwed up.
-@contextmanager
-def savetty() -> Iterator[None]:
- isterm = sys.stdin.isatty()
- if isterm:
- fd = sys.stdin.fileno()
- attr = termios.tcgetattr(fd)
-
- try:
- yield
- finally:
- if isterm:
- termios.tcsetattr(fd, termios.TCSADRAIN, attr)
-
-
class LastElapsedTime(ContextManager['LastElapsedTime']):
""" Cache for elapsed time for tests, to show it during new test run
@@ -169,7 +151,6 @@ class TestRunner(ContextManager['TestRunner']):
self._stack = contextlib.ExitStack()
self._stack.enter_context(self.env)
self._stack.enter_context(self.last_elapsed)
- self._stack.enter_context(savetty())
return self
def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
@@ -294,6 +275,7 @@ class TestRunner(ContextManager['TestRunner']):
t0 = time.time()
with f_bad.open('w', encoding="utf-8") as f:
with subprocess.Popen(args, cwd=str(f_test.parent), env=env,
+ stdin=subprocess.DEVNULL,
stdout=f, stderr=subprocess.STDOUT) as proc:
try:
proc.wait()