]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: Enable TEST-69-SHUTDOWN for mkosi
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 16 May 2024 10:28:51 +0000 (12:28 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 16 May 2024 16:21:32 +0000 (18:21 +0200)
In mkosi, we run the test inside the VM instead of outside. To simplify
the implementation we drop the reboot part and only verify that we can
schedule and cancel shutdowns and that the wall messages are sent as
expected.

mkosi.images/system/mkosi.conf.d/10-arch/mkosi.conf
mkosi.images/system/mkosi.conf.d/10-centos-fedora/mkosi.conf
mkosi.images/system/mkosi.conf.d/10-debian-ubuntu/mkosi.conf
mkosi.images/system/mkosi.conf.d/10-opensuse/mkosi.conf
test/TEST-69-SHUTDOWN/TEST-69-SHUTDOWN.service
test/TEST-69-SHUTDOWN/meson.build
test/units/TEST-69-SHUTDOWN.py [new file with mode: 0755]

index b8a1bc08b4daf6023d1e4764d50a4193889b04e6..942db4cb967c922cb30cdf18b33cf887082d8f8e 100644 (file)
@@ -41,6 +41,7 @@ Packages=
         polkit
         procps-ng
         psmisc
+        python-pexpect
         python-psutil
         quota-tools
         sbsigntools
index be47b1e63500e4c4e7da94246e85c27035528871..26b45e8e9c76dd047df54de9130f94c9fa1dcbf8 100644 (file)
@@ -53,6 +53,7 @@ Packages=
         policycoreutils
         polkit
         procps-ng
+        python3-pexpect
         quota
         rpm
         rpm-build
index a9cdd9e883cd7921213c26e66399a4cd168bee0c..7e870ace870fe9a765a7770250ad18627576c30c 100644 (file)
@@ -64,6 +64,7 @@ Packages=
         policykit-1
         procps
         psmisc
+        python3-pexpect
         python3-psutil
         quota
         sbsigntool
index 78208db9c6b313aeedcf444257303bc90f2f3926..5491c28339afa2213cfe7bed86a8c1791780faed 100644 (file)
@@ -60,6 +60,7 @@ Packages=
         procps4
         psmisc
         python3-pefile
+        python3-pexpect
         python3-psutil
         quota
         rpm-build
index 5ff28426981f7a13135a3bdb9e3b1e5a548fca16..1467f7152aa0ee5a6f714b39872ca64a91455d69 100644 (file)
@@ -5,6 +5,8 @@ Wants=basic.target multi-user.target
 After=basic.target
 Before=getty-pre.target
 
+ConditionPathExists=/usr/bin/python3
+
 [Service]
 Type=oneshot
-ExecStart=true
+ExecStart=/usr/lib/systemd/tests/testdata/units/TEST-69-SHUTDOWN.py
index ab4a38b13e142f9992a6620cb875266c957d86fa..75c0446872b620b87063846b6c5866afdc870d62 100644 (file)
@@ -3,7 +3,6 @@
 integration_tests += [
         integration_test_template + {
                 'name' : fs.name(meson.current_source_dir()),
-                'enabled' : false,
                 'unit' : files('TEST-69-SHUTDOWN.service'),
         },
 ]
diff --git a/test/units/TEST-69-SHUTDOWN.py b/test/units/TEST-69-SHUTDOWN.py
new file mode 100755 (executable)
index 0000000..eb790f4
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
+# pylint: disable=broad-except
+
+import logging
+import sys
+
+import pexpect
+
+
+def main():
+    logger = logging.getLogger("test-shutdown")
+
+    consoles = []
+    for _ in range(2):
+        # Use script to allocate a separate pseudo tty to run the login shell in.
+        console = pexpect.spawn(
+            "script", ["--quiet", "--return", "--flush", "--command", "login -f root", "/dev/null"],
+            logfile=sys.stdout,
+            env={"TERM": "dumb"},
+            encoding="utf-8",
+            timeout=60,
+        )
+
+        logger.info("waiting for login prompt")
+        console.expect(".*# ", 10)
+
+        consoles += [console]
+
+    consoles[1].sendline("tty")
+    consoles[1].expect(r"/dev/(pts/\d+)")
+    pty = console.match.group(1)
+    logger.info("window 1 at tty %s", pty)
+
+    logger.info("schedule reboot")
+    consoles[1].sendline("shutdown -r")
+    consoles[1].expect("Reboot scheduled for (?P<date>.*), use 'shutdown -c' to cancel", 2)
+    date = consoles[1].match.group("date")
+    logger.info("reboot scheduled for %s", date)
+
+    logger.info("verify broadcast message")
+    consoles[0].expect(f"Broadcast message from root@H on {pty}", 2)
+    consoles[0].expect(f"The system will reboot at {date}!", 2)
+
+    logger.info("check show output")
+    consoles[1].sendline("shutdown --show")
+    consoles[1].expect(f"Reboot scheduled for {date}, use 'shutdown -c' to cancel", 2)
+
+    logger.info("cancel shutdown")
+    consoles[1].sendline("shutdown -c")
+    consoles[0].expect("System shutdown has been cancelled", 2)
+
+    consoles[0].sendline("> /testok")
+
+if __name__ == "__main__":
+    main()
+
+# vim: sw=4 et