at 25.11-pre 1.4 kB view raw
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)