]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: Implement TEST_SHELL for mkosi based test runner
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 2 Aug 2024 13:46:41 +0000 (15:46 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 5 Aug 2024 13:00:24 +0000 (15:00 +0200)
TEST_SHELL can be used to get a shell in the integration test
environment without actually immediately starting the test.

test/integration-test-wrapper.py

index 596761aa89df78fa5c5803d9a7f3ee46bd3e171a..783c05f90bfb61f6aa5252adee18927918a39ab6 100755 (executable)
@@ -62,20 +62,30 @@ def main():
         exit(77)
 
     keep_journal = os.getenv("TEST_SAVE_JOURNAL", "fail")
+    shell = bool(int(os.getenv("TEST_SHELL", "0")))
+
+    if shell and not sys.stderr.isatty():
+        print(f"--interactive must be passed to meson test to use TEST_SHELL=1", file=sys.stderr)
+        exit(1)
 
     name = args.name + (f"-{i}" if (i := os.getenv("MESON_TEST_ITERATION")) else "")
 
     dropin = textwrap.dedent(
         """\
-        [Unit]
-        SuccessAction=exit
-        SuccessActionExitStatus=123
-
         [Service]
         StandardOutput=journal+console
         """
     )
 
+    if not shell:
+        dropin += textwrap.dedent(
+            f"""
+            [Unit]
+            SuccessAction=exit
+            SuccessActionExitStatus=123
+            """
+        )
+
     if os.getenv("TEST_MATCH_SUBTEST"):
         dropin += textwrap.dedent(
             f"""
@@ -92,6 +102,7 @@ def main():
             """
         )
 
+    journal_file = None
     if not sys.stderr.isatty():
         dropin += textwrap.dedent(
             """
@@ -102,14 +113,13 @@ def main():
 
         journal_file = (args.meson_build_dir / (f"test/journal/{name}.journal")).absolute()
         journal_file.unlink(missing_ok=True)
-    else:
+    elif not shell:
         dropin += textwrap.dedent(
             """
             [Unit]
             Wants=multi-user.target
             """
         )
-        journal_file = None
 
     cmd = [
         args.mkosi,
@@ -140,7 +150,7 @@ def main():
         ' '.join([
             'systemd.hostname=H',
             f"SYSTEMD_UNIT_PATH=/usr/lib/systemd/tests/testdata/{args.name}.units:/usr/lib/systemd/tests/testdata/units:",
-            f"systemd.unit={args.unit}",
+            *([f"systemd.unit={args.unit}"] if not shell else []),
             'systemd.mask=systemd-networkd-wait-online.service',
             *(
                 [
@@ -163,8 +173,8 @@ def main():
     if journal_file and (keep_journal == "0" or (result.returncode in (args.exit_code, 77) and keep_journal == "fail")):
         journal_file.unlink(missing_ok=True)
 
-    if result.returncode in (args.exit_code, 77):
-        exit(0 if result.returncode == args.exit_code else 77)
+    if shell or result.returncode in (args.exit_code, 77):
+        exit(0 if shell or result.returncode == args.exit_code else 77)
 
     if journal_file:
         ops = []