about summary refs log tree commit diff
path: root/nixpkgs/nixos/tests/input-remapper.nix
blob: 1b0350063f7f204744d4962fa8e8550cebde6d00 (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
43
44
45
46
47
48
49
50
51
52
import ./make-test-python.nix ({ pkgs, ... }:

  {
    name = "input-remapper";
    meta = {
      maintainers = with pkgs.lib.maintainers; [ LunNova ];
    };

    nodes.machine = { config, ... }:
      let user = config.users.users.sybil; in
      {
        imports = [
          ./common/user-account.nix
          ./common/x11.nix
        ];

        services.xserver.enable = true;
        services.input-remapper.enable = true;
        users.users.sybil = { isNormalUser = true; group = "wheel"; };
        test-support.displayManager.auto.user = user.name;
        # workaround for pkexec not working in the test environment
        # Error creating textual authentication agent:
        #   Error opening current controlling terminal for the process (`/dev/tty'):
        #   No such device or address
        # passwordless pkexec with polkit module also doesn't work
        # to allow the program to run, we replace pkexec with sudo
        # and turn on passwordless sudo
        # this is not correct in general but good enough for this test
        security.sudo = { enable = true; wheelNeedsPassword = false; };
        security.wrappers.pkexec = pkgs.lib.mkForce
          {
            setuid = true;
            owner = "root";
            group = "root";
            source = "${pkgs.sudo}/bin/sudo";
          };
      };

    enableOCR = true;

    testScript = { nodes, ... }: ''
      start_all()
      machine.wait_for_x()

      machine.succeed("systemctl status input-remapper.service")
      machine.execute("su - sybil -c input-remapper-gtk >&2 &")

      machine.wait_for_text("Input Remapper")
      machine.wait_for_text("Preset")
      machine.wait_for_text("Change Key")
    '';
  })