1import ./make-test-python.nix (
2 { lib, pkgs, ... }:
3 {
4 name = "systemd-initrd-vconsole";
5
6 nodes.machine =
7 { pkgs, ... }:
8 {
9 boot.kernelParams = lib.mkAfter [
10 "rd.systemd.unit=rescue.target"
11 "loglevel=3"
12 "udev.log_level=3"
13 "systemd.log_level=warning"
14 ];
15
16 boot.initrd.systemd = {
17 enable = true;
18 emergencyAccess = true;
19 };
20
21 console = {
22 earlySetup = true;
23 keyMap = "colemak";
24 };
25 };
26
27 testScript = ''
28 # Boot into rescue shell in initrd
29 machine.start()
30 machine.wait_for_console_text("Press Enter for maintenance")
31 machine.send_console("\n")
32
33 # Wait for shell to become ready
34 for _ in range(300):
35 machine.send_console("printf '%s to receive commands:\\n' Ready\n")
36 try:
37 machine.wait_for_console_text("Ready to receive commands:", timeout=1)
38 break
39 except Exception:
40 continue
41 else:
42 raise RuntimeError("Rescue shell never became ready")
43
44 # Check keymap
45 machine.send_console("(printf '%s to receive text:\\n' Ready && read text && echo \"$text\") </dev/tty1\n")
46 machine.wait_for_console_text("Ready to receive text:")
47 for key in "asdfjkl;\n":
48 machine.send_key(key)
49 machine.wait_for_console_text("arstneio")
50 '';
51 }
52)