]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: Format integration-test-wrapper.py
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 23 Nov 2024 11:59:32 +0000 (12:59 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sun, 24 Nov 2024 15:47:20 +0000 (16:47 +0100)
test/integration-test-wrapper.py

index d9c035e99f99f0479d8cfde6061317f8b0b466e1..30b9d8b17270a562cffd9849c910cec5e1b7431e 100755 (executable)
@@ -1,8 +1,7 @@
 #!/usr/bin/python3
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-'''Test wrapper command for driving integration tests.
-'''
+"""Test wrapper command for driving integration tests."""
 
 import argparse
 import json
@@ -13,7 +12,6 @@ import sys
 import textwrap
 from pathlib import Path
 
-
 EMERGENCY_EXIT_DROPIN = """\
 [Unit]
 Wants=emergency-exit.service
@@ -46,34 +44,43 @@ def main():
     parser.add_argument('--slow', action=argparse.BooleanOptionalAction)
     parser.add_argument('--vm', action=argparse.BooleanOptionalAction)
     parser.add_argument('--exit-code', required=True, type=int)
-    parser.add_argument('mkosi_args', nargs="*")
+    parser.add_argument('mkosi_args', nargs='*')
     args = parser.parse_args()
 
-    if not bool(int(os.getenv("SYSTEMD_INTEGRATION_TESTS", "0"))):
-        print(f"SYSTEMD_INTEGRATION_TESTS=1 not found in environment, skipping {args.name}", file=sys.stderr)
+    if not bool(int(os.getenv('SYSTEMD_INTEGRATION_TESTS', '0'))):
+        print(
+            f'SYSTEMD_INTEGRATION_TESTS=1 not found in environment, skipping {args.name}',
+            file=sys.stderr,
+        )
         exit(77)
 
-    if args.slow and not bool(int(os.getenv("SYSTEMD_SLOW_TESTS", "0"))):
-        print(f"SYSTEMD_SLOW_TESTS=1 not found in environment, skipping {args.name}", file=sys.stderr)
+    if args.slow and not bool(int(os.getenv('SYSTEMD_SLOW_TESTS', '0'))):
+        print(
+            f'SYSTEMD_SLOW_TESTS=1 not found in environment, skipping {args.name}',
+            file=sys.stderr,
+        )
         exit(77)
 
-    if args.vm and bool(int(os.getenv("TEST_NO_QEMU", "0"))):
-        print(f"TEST_NO_QEMU=1, skipping {args.name}", file=sys.stderr)
+    if args.vm and bool(int(os.getenv('TEST_NO_QEMU', '0'))):
+        print(f'TEST_NO_QEMU=1, skipping {args.name}', file=sys.stderr)
         exit(77)
 
-    for s in os.getenv("TEST_SKIP", "").split():
+    for s in os.getenv('TEST_SKIP', '').split():
         if s in args.name:
-            print(f"Skipping {args.name} due to TEST_SKIP", file=sys.stderr)
+            print(f'Skipping {args.name} due to TEST_SKIP', file=sys.stderr)
             exit(77)
 
-    keep_journal = os.getenv("TEST_SAVE_JOURNAL", "fail")
-    shell = bool(int(os.getenv("TEST_SHELL", "0")))
+    keep_journal = os.getenv('TEST_SAVE_JOURNAL', 'fail')
+    shell = bool(int(os.getenv('TEST_SHELL', '0')))
 
     if shell and not sys.stderr.isatty():
-        print("--interactive must be passed to meson test to use TEST_SHELL=1", file=sys.stderr)
+        print(
+            '--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 "")
+    name = args.name + (f'-{i}' if (i := os.getenv('MESON_TEST_ITERATION')) else '')
 
     dropin = textwrap.dedent(
         """\
@@ -91,7 +98,7 @@ def main():
             """
         )
 
-    if os.getenv("TEST_MATCH_SUBTEST"):
+    if os.getenv('TEST_MATCH_SUBTEST'):
         dropin += textwrap.dedent(
             f"""
             [Service]
@@ -99,7 +106,7 @@ def main():
             """
         )
 
-    if os.getenv("TEST_MATCH_TESTCASE"):
+    if os.getenv('TEST_MATCH_TESTCASE'):
         dropin += textwrap.dedent(
             f"""
             [Service]
@@ -116,7 +123,7 @@ def main():
             """
         )
 
-        journal_file = (args.meson_build_dir / (f"test/journal/{name}.journal")).absolute()
+        journal_file = (args.meson_build_dir / (f'test/journal/{name}.journal')).absolute()
         journal_file.unlink(missing_ok=True)
     elif not shell:
         dropin += textwrap.dedent(
@@ -136,42 +143,42 @@ def main():
         *(['--forward-journal', journal_file] if journal_file else []),
         *(
             [
-                '--credential',
-                f"systemd.extra-unit.emergency-exit.service={shlex.quote(EMERGENCY_EXIT_SERVICE)}",
-                '--credential',
-                f"systemd.unit-dropin.emergency.target={shlex.quote(EMERGENCY_EXIT_DROPIN)}",
+                '--credential', f'systemd.extra-unit.emergency-exit.service={shlex.quote(EMERGENCY_EXIT_SERVICE)}',  # noqa: E501
+                '--credential', f'systemd.unit-dropin.emergency.target={shlex.quote(EMERGENCY_EXIT_DROPIN)}',
             ]
             if not sys.stderr.isatty()
             else []
         ),
-        '--credential',
-        f"systemd.unit-dropin.{args.unit}={shlex.quote(dropin)}",
+        '--credential', f'systemd.unit-dropin.{args.unit}={shlex.quote(dropin)}',
         '--runtime-network=none',
         '--runtime-scratch=no',
         *args.mkosi_args,
-        '--qemu-firmware', args.firmware,
-        *(['--qemu-kvm', 'no'] if int(os.getenv("TEST_NO_KVM", "0")) else []),
+        '--qemu-firmware',
+        args.firmware,
+        *(['--qemu-kvm', 'no'] if int(os.getenv('TEST_NO_KVM', '0')) else []),
         '--kernel-command-line-extra',
-        ' '.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}"] if not shell else []),
-            'systemd.mask=systemd-networkd-wait-online.service',
-            *(
-                [
-                    "systemd.mask=serial-getty@.service",
-                    "systemd.show_status=error",
-                    "systemd.crash_shell=0",
-                    "systemd.crash_action=poweroff",
-                ]
-                if not sys.stderr.isatty()
-                else []
-            ),
-        ]),
+        ' '.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}'] if not shell else []),
+                'systemd.mask=systemd-networkd-wait-online.service',
+                *(
+                    [
+                        'systemd.mask=serial-getty@.service',
+                        'systemd.show_status=error',
+                        'systemd.crash_shell=0',
+                        'systemd.crash_action=poweroff',
+                    ]
+                    if not sys.stderr.isatty()
+                    else []
+                ),
+            ]
+        ),
         '--credential', f"journal.storage={'persistent' if sys.stderr.isatty() else args.storage}",
         *(['--runtime-build-sources=no'] if not sys.stderr.isatty() else []),
         'qemu' if args.vm or os.getuid() != 0 else 'boot',
-    ]
+    ]  # fmt: skip
 
     result = subprocess.run(cmd)
 
@@ -180,10 +187,15 @@ def main():
         journal_file.unlink(missing_ok=True)
         result = subprocess.run(cmd)
         if args.vm and result.returncode == 247 and args.exit_code != 247:
-            print(f"Test {args.name} failed due to QEMU crash (error 247), ignoring", file=sys.stderr)
+            print(
+                f'Test {args.name} failed due to QEMU crash (error 247), ignoring',
+                file=sys.stderr,
+            )
             exit(77)
 
-    if journal_file and (keep_journal == "0" or (result.returncode in (args.exit_code, 77) and keep_journal == "fail")):
+    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 shell or result.returncode in (args.exit_code, 77):
@@ -192,31 +204,33 @@ def main():
     if journal_file:
         ops = []
 
-        if os.getenv("GITHUB_ACTIONS"):
-            id = os.environ["GITHUB_RUN_ID"]
-            iteration = os.environ["GITHUB_RUN_ATTEMPT"]
+        if os.getenv('GITHUB_ACTIONS'):
+            id = os.environ['GITHUB_RUN_ID']
+            iteration = os.environ['GITHUB_RUN_ATTEMPT']
             j = json.loads(
                 subprocess.run(
                     [
                         args.mkosi,
-                        "--directory", os.fspath(args.meson_source_dir),
-                        "--json",
-                        "summary",
+                        '--directory', os.fspath(args.meson_source_dir),
+                        '--json',
+                        'summary',
                     ],
                     stdout=subprocess.PIPE,
                     text=True,
                 ).stdout
-            )
-            distribution = j["Images"][-1]["Distribution"]
-            release = j["Images"][-1]["Release"]
-            artifact = f"ci-mkosi-{id}-{iteration}-{distribution}-{release}-failed-test-journals"
-            ops += [f"gh run download {id} --name {artifact} -D ci/{artifact}"]
-            journal_file = Path(f"ci/{artifact}/test/journal/{name}.journal")
-
-        ops += [f"journalctl --file {journal_file} --no-hostname -o short-monotonic -u {args.unit} -p info"]
-
-        print("Test failed, relevant logs can be viewed with: \n\n"
-              f"{(' && '.join(ops))}\n", file=sys.stderr)
+            )  # fmt: skip
+            distribution = j['Images'][-1]['Distribution']
+            release = j['Images'][-1]['Release']
+            artifact = f'ci-mkosi-{id}-{iteration}-{distribution}-{release}-failed-test-journals'
+            ops += [f'gh run download {id} --name {artifact} -D ci/{artifact}']
+            journal_file = Path(f'ci/{artifact}/test/journal/{name}.journal')
+
+        ops += [f'journalctl --file {journal_file} --no-hostname -o short-monotonic -u {args.unit} -p info']
+
+        print(
+            "Test failed, relevant logs can be viewed with: \n\n" f"{(' && '.join(ops))}\n",
+            file=sys.stderr,
+        )
 
     # 0 also means we failed so translate that to a non-zero exit code to mark the test as failed.
     exit(result.returncode or 1)