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