about summary refs log tree commit diff
path: root/nixpkgs/nixos/tests/systemd-initrd-vconsole.nix
blob: d4c2a57680c15c3acad9f54fad347d68f47a5afb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import ./make-test-python.nix ({ lib, pkgs, ... }: {
  name = "systemd-initrd-vconsole";

  nodes.machine = { pkgs, ... }: {
    boot.kernelParams = lib.mkAfter [ "rd.systemd.unit=rescue.target" "loglevel=3" "udev.log_level=3" "systemd.log_level=warning" ];

    boot.initrd.systemd = {
      enable = true;
      emergencyAccess = true;
    };

    console = {
      earlySetup = true;
      keyMap = "colemak";
    };
  };

  testScript = ''
    # Boot into rescue shell in initrd
    machine.start()
    machine.wait_for_console_text("Press Enter for maintenance")
    machine.send_console("\n")

    # Wait for shell to become ready
    for _ in range(300):
      machine.send_console("printf '%s to receive commands:\\n' Ready\n")
      try:
        machine.wait_for_console_text("Ready to receive commands:", timeout=1)
        break
      except Exception:
        continue
    else:
      raise RuntimeError("Rescue shell never became ready")

    # Check keymap
    machine.send_console("(printf '%s to receive text:\\n' Ready && read text && echo \"$text\") </dev/tty1\n")
    machine.wait_for_console_text("Ready to receive text:")
    for key in "asdfjkl;\n":
      machine.send_key(key)
    machine.wait_for_console_text("arstneio")
  '';
})