nixos/tests/startx: test imperative setup
This commit is contained in:
parent
a2e29f2fe3
commit
a160ebdef3
@ -1153,7 +1153,7 @@ in {
|
|||||||
systemd-userdbd = handleTest ./systemd-userdbd.nix {};
|
systemd-userdbd = handleTest ./systemd-userdbd.nix {};
|
||||||
systemd-homed = handleTest ./systemd-homed.nix {};
|
systemd-homed = handleTest ./systemd-homed.nix {};
|
||||||
systemtap = handleTest ./systemtap.nix {};
|
systemtap = handleTest ./systemtap.nix {};
|
||||||
startx = runTest ./startx.nix;
|
startx = import ./startx.nix { inherit pkgs runTest; };
|
||||||
taler = handleTest ./taler {};
|
taler = handleTest ./taler {};
|
||||||
tandoor-recipes = handleTest ./tandoor-recipes.nix {};
|
tandoor-recipes = handleTest ./tandoor-recipes.nix {};
|
||||||
tandoor-recipes-script-name = handleTest ./tandoor-recipes-script-name.nix {};
|
tandoor-recipes-script-name = handleTest ./tandoor-recipes-script-name.nix {};
|
||||||
|
|||||||
@ -1,108 +1,200 @@
|
|||||||
{ lib, ... }:
|
{ pkgs, runTest }:
|
||||||
|
|
||||||
{
|
{
|
||||||
name = "startx";
|
|
||||||
meta.maintainers = with lib.maintainers; [ rnhmjoj ];
|
|
||||||
|
|
||||||
nodes.machine =
|
declarative = runTest {
|
||||||
{ pkgs, ... }:
|
name = "startx";
|
||||||
{
|
meta.maintainers = with pkgs.lib.maintainers; [ rnhmjoj ];
|
||||||
services.getty.autologinUser = "root";
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
nodes.machine =
|
||||||
xdotool
|
{ pkgs, ... }:
|
||||||
catclock
|
{
|
||||||
];
|
services.getty.autologinUser = "root";
|
||||||
|
|
||||||
programs.bash.promptInit = "PS1='# '";
|
environment.systemPackages = with pkgs; [
|
||||||
|
xdotool
|
||||||
|
catclock
|
||||||
|
];
|
||||||
|
|
||||||
# startx+bspwm setup
|
programs.bash.promptInit = "PS1='# '";
|
||||||
services.xserver = {
|
|
||||||
enable = true;
|
# startx+bspwm setup
|
||||||
windowManager.bspwm = {
|
services.xserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configFile = pkgs.writeShellScript "bspwrc" ''
|
windowManager.bspwm = {
|
||||||
bspc config border_width 2
|
enable = true;
|
||||||
bspc config window_gap 12
|
configFile = pkgs.writeShellScript "bspwrc" ''
|
||||||
bspc rule -a xclock state=floating sticky=on
|
bspc config border_width 2
|
||||||
'';
|
bspc config window_gap 12
|
||||||
sxhkd.configFile = pkgs.writeText "sxhkdrc" ''
|
bspc rule -a xclock state=floating sticky=on
|
||||||
# open a terminal
|
'';
|
||||||
super + Return
|
sxhkd.configFile = pkgs.writeText "sxhkdrc" ''
|
||||||
urxvtc
|
# open a terminal
|
||||||
# quit bspwm
|
super + Return
|
||||||
super + alt + Escape
|
urxvtc
|
||||||
bspc quit
|
# quit bspwm
|
||||||
'';
|
super + alt + Escape
|
||||||
};
|
bspc quit
|
||||||
displayManager.startx = {
|
'';
|
||||||
enable = true;
|
};
|
||||||
generateScript = true;
|
displayManager.startx = {
|
||||||
extraCommands = ''
|
enable = true;
|
||||||
xrdb -load ~/.Xresources
|
generateScript = true;
|
||||||
xsetroot -solid '#343d46'
|
extraCommands = ''
|
||||||
xsetroot -cursor_name trek
|
xrdb -load ~/.Xresources
|
||||||
xclock &
|
xsetroot -solid '#343d46'
|
||||||
'';
|
xsetroot -cursor_name trek
|
||||||
|
xclock &
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# enable some user services
|
||||||
|
security.polkit.enable = true;
|
||||||
|
services.urxvtd.enable = true;
|
||||||
|
programs.xss-lock.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# enable some user services
|
testScript = ''
|
||||||
security.polkit.enable = true;
|
import textwrap
|
||||||
services.urxvtd.enable = true;
|
|
||||||
programs.xss-lock.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
testScript = ''
|
sysu = "env XDG_RUNTIME_DIR=/run/user/0 systemctl --user";
|
||||||
import textwrap
|
prompt = "# "
|
||||||
|
|
||||||
sysu = "env XDG_RUNTIME_DIR=/run/user/0 systemctl --user";
|
with subtest("Wait for the autologin"):
|
||||||
prompt = "# "
|
machine.wait_until_tty_matches("1", prompt)
|
||||||
|
|
||||||
with subtest("Wait for the autologin"):
|
with subtest("Setup dotfiles"):
|
||||||
machine.wait_until_tty_matches("1", prompt)
|
machine.execute(textwrap.dedent("""
|
||||||
|
cat <<EOF > ~/.Xresources
|
||||||
|
urxvt*foreground: #9b9081
|
||||||
|
urxvt*background: #181b20
|
||||||
|
urxvt*scrollBar: false
|
||||||
|
urxvt*title: myterm
|
||||||
|
urxvt*geometry: 80x240+0+0
|
||||||
|
xclock*geometry: 164x164+24+440
|
||||||
|
EOF
|
||||||
|
"""))
|
||||||
|
|
||||||
with subtest("Setup dotfiles"):
|
with subtest("Can start the X server"):
|
||||||
machine.execute(textwrap.dedent("""
|
machine.send_chars("startx\n")
|
||||||
cat <<EOF > ~/.Xresources
|
machine.wait_for_x()
|
||||||
|
machine.wait_for_window("xclock")
|
||||||
|
|
||||||
|
with subtest("Graphical services are running"):
|
||||||
|
machine.succeed(f"{sysu} is-active graphical-session.target")
|
||||||
|
machine.succeed(f"{sysu} is-active urxvtd")
|
||||||
|
machine.succeed(f"{sysu} is-active xss-lock")
|
||||||
|
|
||||||
|
with subtest("Can interact with the WM"):
|
||||||
|
machine.wait_until_succeeds("pgrep sxhkd")
|
||||||
|
machine.wait_until_succeeds("pgrep bspwm")
|
||||||
|
# spawn some terminals
|
||||||
|
machine.send_key("meta_l-ret", delay=0.5)
|
||||||
|
machine.send_key("meta_l-ret", delay=0.5)
|
||||||
|
machine.send_key("meta_l-ret", delay=0.5)
|
||||||
|
# Note: this tests that resources have beeen loaded
|
||||||
|
machine.wait_for_window("myterm")
|
||||||
|
machine.screenshot("screenshot.png")
|
||||||
|
|
||||||
|
with subtest("Can stop the X server"):
|
||||||
|
# kill the WM
|
||||||
|
machine.send_key("meta_l-alt-esc")
|
||||||
|
machine.wait_until_tty_matches("1", prompt)
|
||||||
|
|
||||||
|
with subtest("Graphical session has stopped"):
|
||||||
|
machine.fail(f"{sysu} is-active graphical-session.target")
|
||||||
|
machine.fail(f"{sysu} is-active urxvtd")
|
||||||
|
machine.fail(f"{sysu} is-active xss-lock")
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
imperative = runTest {
|
||||||
|
name = "startx-imperative";
|
||||||
|
meta.maintainers = with pkgs.lib.maintainers; [ rnhmjoj ];
|
||||||
|
|
||||||
|
nodes.machine =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
services.getty.autologinUser = "root";
|
||||||
|
programs.bash.promptInit = "PS1='# '";
|
||||||
|
|
||||||
|
# startx+twm setup
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
windowManager.twm.enable = true;
|
||||||
|
displayManager.startx.enable = true;
|
||||||
|
displayManager.startx.generateScript = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# enable some user services
|
||||||
|
security.polkit.enable = true;
|
||||||
|
services.urxvtd.enable = true;
|
||||||
|
programs.xss-lock.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
sysu = "env XDG_RUNTIME_DIR=/run/user/0 systemctl --user";
|
||||||
|
prompt = "# "
|
||||||
|
|
||||||
|
with subtest("Wait for the autologin"):
|
||||||
|
machine.wait_until_tty_matches("1", prompt)
|
||||||
|
|
||||||
|
with subtest("Setup dotfiles"):
|
||||||
|
machine.execute(textwrap.dedent("""
|
||||||
|
cat <<EOF > ~/.Xresources
|
||||||
urxvt*foreground: #9b9081
|
urxvt*foreground: #9b9081
|
||||||
urxvt*background: #181b20
|
urxvt*background: #181b20
|
||||||
urxvt*scrollBar: false
|
urxvt*scrollBar: false
|
||||||
urxvt*title: myterm
|
urxvt*title: myterm
|
||||||
urxvt*geometry: 80x240+0+0
|
urxvt*geometry: 20x20+40+40
|
||||||
xclock*geometry: 164x164+24+440
|
EOF
|
||||||
EOF
|
cat <<EOF > ~/.twmrc
|
||||||
"""))
|
"Return" = meta : all : f.exec "urxvtc"
|
||||||
|
"Escape" = meta : all : f.quit
|
||||||
|
EOF
|
||||||
|
cat <<EOF > ~/.xinitrc
|
||||||
|
xrdb -load ~/.Xresources
|
||||||
|
xsetroot -solid '#343d46'
|
||||||
|
xsetroot -cursor_name trek
|
||||||
|
# start user services
|
||||||
|
systemctl --user import-environment DISPLAY XDG_SESSION_ID
|
||||||
|
systemctl --user start nixos-fake-graphical-session.target
|
||||||
|
# run the window manager
|
||||||
|
twm
|
||||||
|
# stop services and all subprocesses
|
||||||
|
systemctl --user stop nixos-fake-graphical-session.target
|
||||||
|
EOF
|
||||||
|
"""))
|
||||||
|
|
||||||
with subtest("Can start the X server"):
|
with subtest("Can start the X server"):
|
||||||
machine.send_chars("startx\n")
|
machine.send_chars("startx\n")
|
||||||
machine.wait_for_x()
|
machine.wait_for_x()
|
||||||
machine.wait_for_window("xclock")
|
|
||||||
|
|
||||||
with subtest("Graphical services are running"):
|
with subtest("Graphical services are running"):
|
||||||
machine.succeed(f"{sysu} is-active graphical-session.target")
|
machine.succeed(f"{sysu} is-active graphical-session.target")
|
||||||
machine.succeed(f"{sysu} is-active urxvtd")
|
machine.succeed(f"{sysu} is-active urxvtd")
|
||||||
machine.succeed(f"{sysu} is-active xss-lock")
|
machine.succeed(f"{sysu} is-active xss-lock")
|
||||||
|
|
||||||
with subtest("Can interact with the WM"):
|
with subtest("Can interact with the WM"):
|
||||||
machine.wait_until_succeeds("pgrep sxhkd")
|
machine.wait_until_succeeds("pgrep twm")
|
||||||
machine.wait_until_succeeds("pgrep bspwm")
|
# spawn a terminal
|
||||||
# spawn some terminals
|
machine.send_key("alt-ret")
|
||||||
machine.send_key("meta_l-ret", delay=0.5)
|
machine.wait_for_window("myterm")
|
||||||
machine.send_key("meta_l-ret", delay=0.5)
|
machine.screenshot("screenshot.png")
|
||||||
machine.send_key("meta_l-ret", delay=0.5)
|
|
||||||
# Note: this tests that resources have beeen loaded
|
|
||||||
machine.wait_for_window("myterm")
|
|
||||||
machine.screenshot("screenshot.png")
|
|
||||||
|
|
||||||
with subtest("Can stop the X server"):
|
with subtest("Can stop the X server"):
|
||||||
# kill the WM
|
# kill the WM
|
||||||
machine.send_key("meta_l-alt-esc")
|
machine.send_key("alt-esc")
|
||||||
machine.wait_until_tty_matches("1", prompt)
|
machine.wait_until_tty_matches("1", prompt)
|
||||||
|
|
||||||
|
with subtest("Graphical session has stopped"):
|
||||||
|
machine.fail(f"{sysu} is-active graphical-session.target")
|
||||||
|
machine.fail(f"{sysu} is-active urxvtd")
|
||||||
|
machine.fail(f"{sysu} is-active xss-lock")
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
with subtest("Graphical session has stopped"):
|
|
||||||
machine.fail(f"{sysu} is-active graphical-session.target")
|
|
||||||
machine.fail(f"{sysu} is-active urxvtd")
|
|
||||||
machine.fail(f"{sysu} is-active xss-lock")
|
|
||||||
'';
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user