From: Daan De Meyer Date: Mon, 4 Dec 2023 05:52:54 +0000 (+0100) Subject: Suspend stdin capture if --capture=no is specified X-Git-Tag: v20~114^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fdae78fd176ee6f7303d46105878e9c149916acb;p=thirdparty%2Fmkosi.git Suspend stdin capture if --capture=no is specified --- diff --git a/tests/__init__.py b/tests/__init__.py index a031c1705..eb743f70f 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -3,9 +3,11 @@ import os import sys import tempfile -from collections.abc import Sequence +from collections.abc import Iterator, Sequence from types import TracebackType -from typing import Optional +from typing import Any, Optional + +import pytest from mkosi.distributions import Distribution, detect_distribution from mkosi.log import die @@ -95,3 +97,21 @@ class Image: def summary(self, options: Sequence[str] = ()) -> CompletedProcess: return self.mkosi("summary", options, user=INVOKING_USER.uid, group=INVOKING_USER.gid) + + +@pytest.fixture(scope="session", autouse=True) +def suspend_capture_stdin(pytestconfig: Any) -> Iterator[None]: + """ + When --capture=no (or -s) is specified, pytest will still intercept stdin. Let's explicitly make it not capture + stdin when --capture=no is specified so we can debug image boot failures by logging into the emergency shell. + """ + + capmanager: Any = pytestconfig.pluginmanager.getplugin("capturemanager") + + if pytestconfig.getoption("capture") == "no": + capmanager.suspend_global_capture(in_=True) + + yield + + if pytestconfig.getoption("capture") == "no": + capmanager.resume_global_capture()