]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Suspend stdin capture if --capture=no is specified
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 4 Dec 2023 05:52:54 +0000 (06:52 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 5 Dec 2023 12:46:22 +0000 (13:46 +0100)
tests/__init__.py

index a031c17055ecb7ad2b5e04e0ff05f7ba9247d59c..eb743f70f9b8436ae3fd8e07f197e9ef01bc3e6e 100644 (file)
@@ -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()