From: Daan De Meyer Date: Thu, 16 May 2024 10:28:51 +0000 (+0200) Subject: test: Enable TEST-69-SHUTDOWN for mkosi X-Git-Tag: v256-rc3~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e182c7b4db02ec98957ee3f60fd2a2807e172aac;p=thirdparty%2Fsystemd.git test: Enable TEST-69-SHUTDOWN for mkosi 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. --- diff --git a/mkosi.images/system/mkosi.conf.d/10-arch/mkosi.conf b/mkosi.images/system/mkosi.conf.d/10-arch/mkosi.conf index b8a1bc08b4d..942db4cb967 100644 --- a/mkosi.images/system/mkosi.conf.d/10-arch/mkosi.conf +++ b/mkosi.images/system/mkosi.conf.d/10-arch/mkosi.conf @@ -41,6 +41,7 @@ Packages= polkit procps-ng psmisc + python-pexpect python-psutil quota-tools sbsigntools diff --git a/mkosi.images/system/mkosi.conf.d/10-centos-fedora/mkosi.conf b/mkosi.images/system/mkosi.conf.d/10-centos-fedora/mkosi.conf index be47b1e6350..26b45e8e9c7 100644 --- a/mkosi.images/system/mkosi.conf.d/10-centos-fedora/mkosi.conf +++ b/mkosi.images/system/mkosi.conf.d/10-centos-fedora/mkosi.conf @@ -53,6 +53,7 @@ Packages= policycoreutils polkit procps-ng + python3-pexpect quota rpm rpm-build diff --git a/mkosi.images/system/mkosi.conf.d/10-debian-ubuntu/mkosi.conf b/mkosi.images/system/mkosi.conf.d/10-debian-ubuntu/mkosi.conf index a9cdd9e883c..7e870ace870 100644 --- a/mkosi.images/system/mkosi.conf.d/10-debian-ubuntu/mkosi.conf +++ b/mkosi.images/system/mkosi.conf.d/10-debian-ubuntu/mkosi.conf @@ -64,6 +64,7 @@ Packages= policykit-1 procps psmisc + python3-pexpect python3-psutil quota sbsigntool diff --git a/mkosi.images/system/mkosi.conf.d/10-opensuse/mkosi.conf b/mkosi.images/system/mkosi.conf.d/10-opensuse/mkosi.conf index 78208db9c6b..5491c28339a 100644 --- a/mkosi.images/system/mkosi.conf.d/10-opensuse/mkosi.conf +++ b/mkosi.images/system/mkosi.conf.d/10-opensuse/mkosi.conf @@ -60,6 +60,7 @@ Packages= procps4 psmisc python3-pefile + python3-pexpect python3-psutil quota rpm-build diff --git a/test/TEST-69-SHUTDOWN/TEST-69-SHUTDOWN.service b/test/TEST-69-SHUTDOWN/TEST-69-SHUTDOWN.service index 5ff28426981..1467f7152aa 100644 --- a/test/TEST-69-SHUTDOWN/TEST-69-SHUTDOWN.service +++ b/test/TEST-69-SHUTDOWN/TEST-69-SHUTDOWN.service @@ -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 diff --git a/test/TEST-69-SHUTDOWN/meson.build b/test/TEST-69-SHUTDOWN/meson.build index ab4a38b13e1..75c0446872b 100644 --- a/test/TEST-69-SHUTDOWN/meson.build +++ b/test/TEST-69-SHUTDOWN/meson.build @@ -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 index 00000000000..eb790f45da7 --- /dev/null +++ b/test/units/TEST-69-SHUTDOWN.py @@ -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.*), 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