2 # SPDX-License-Identifier: LGPL-2.1-or-later
3 # pylint: disable=broad-except
12 # TODO: drop once https://bugs.debian.org/1075733 is fixed
13 with
open("/usr/lib/os-release") as f
:
15 if line
.startswith("ID="):
16 if "debian" in line
or "ubuntu" in line
:
19 logger
= logging
.getLogger("test-shutdown")
23 # Use script to allocate a separate pseudo tty to run the login shell in.
24 console
= pexpect
.spawn(
25 "script", ["--quiet", "--return", "--flush", "--command", "login -f root", "/dev/null"],
32 logger
.info("waiting for login prompt")
33 console
.expect(".*# ", 10)
37 consoles
[1].sendline("tty")
38 consoles
[1].expect(r
"/dev/(pts/\d+)")
39 pty
= console
.match
.group(1)
40 logger
.info("window 1 at tty %s", pty
)
42 logger
.info("schedule reboot")
43 consoles
[1].sendline("shutdown -r")
44 consoles
[1].expect("Reboot scheduled for (?P<date>.*), use 'shutdown -c' to cancel", 2)
45 date
= consoles
[1].match
.group("date")
46 logger
.info("reboot scheduled for %s", date
)
48 logger
.info("verify broadcast message")
49 consoles
[0].expect(f
"Broadcast message from root@H on {pty}", 2)
50 consoles
[0].expect(f
"The system will reboot at {date}!", 2)
52 logger
.info("check show output")
53 consoles
[1].sendline("shutdown --show")
54 consoles
[1].expect(f
"Reboot scheduled for {date}, use 'shutdown -c' to cancel", 2)
56 logger
.info("cancel shutdown")
57 consoles
[1].sendline("shutdown -c")
58 consoles
[0].expect("System shutdown has been cancelled", 2)
60 consoles
[0].sendline("> /testok")
62 if __name__
== "__main__":