mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-07-26 01:31:54 -07:00
Adds a test suite for testing hyprland's features with a runtime tester --------- Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
87 lines
2.4 KiB
Nix
87 lines
2.4 KiB
Nix
inputs: pkgs: let
|
|
flake = inputs.self.packages.${pkgs.stdenv.hostPlatform.system};
|
|
hyprland = flake.hyprland;
|
|
in {
|
|
tests = pkgs.testers.runNixOSTest {
|
|
name = "hyprland-tests";
|
|
|
|
nodes.machine = {pkgs, ...}: {
|
|
environment.systemPackages = with pkgs; [
|
|
flake.hyprtester
|
|
|
|
# Programs needed for tests
|
|
kitty
|
|
xorg.xeyes
|
|
];
|
|
|
|
# Enabled by default for some reason
|
|
services.speechd.enable = false;
|
|
|
|
environment.variables = {
|
|
"AQ_TRACE" = "1";
|
|
"HYPRLAND_TRACE" = "1";
|
|
"XDG_RUNTIME_DIR" = "/tmp";
|
|
"XDG_CACHE_HOME" = "/tmp";
|
|
};
|
|
|
|
programs.hyprland = {
|
|
enable = true;
|
|
package = hyprland;
|
|
# We don't need portals in this test, so we don't set portalPackage
|
|
};
|
|
|
|
# Test configuration
|
|
environment.etc."test.conf".source = "${flake.hyprtester}/share/hypr/test.conf";
|
|
|
|
# Disable portals
|
|
xdg.portal.enable = pkgs.lib.mkForce false;
|
|
|
|
# Autologin root into tty
|
|
services.getty.autologinUser = "alice";
|
|
|
|
system.stateVersion = "24.11";
|
|
|
|
users.users.alice = {
|
|
isNormalUser = true;
|
|
};
|
|
|
|
virtualisation = {
|
|
cores = 4;
|
|
# Might crash with less
|
|
memorySize = 8192;
|
|
resolution = {
|
|
x = 1920;
|
|
y = 1080;
|
|
};
|
|
|
|
# Doesn't seem to do much, thought it would fix XWayland crashing
|
|
qemu.options = ["-vga none -device virtio-gpu-pci"];
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
# Wait for tty to be up
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
# Run hyprtester testing framework/suite
|
|
print("Running hyprtester")
|
|
exit_status, _out = machine.execute("su - alice -c 'hyprtester -b ${hyprland}/bin/Hyprland -c /etc/test.conf -p ${flake.hyprtester}/lib/hyprtestplugin.so 2>&1 | tee /tmp/testerlog; exit ''${PIPESTATUS[0]}'")
|
|
print(f"Hyprtester exited with {exit_status}")
|
|
|
|
# Copy logs to host
|
|
machine.execute('cp "$(find /tmp/hypr -name *.log | head -1)" /tmp/hyprlog')
|
|
machine.execute(f'echo {exit_status} > /tmp/exit_status')
|
|
machine.copy_from_vm("/tmp/testerlog")
|
|
machine.copy_from_vm("/tmp/hyprlog")
|
|
machine.copy_from_vm("/tmp/exit_status")
|
|
|
|
# Print logs for visibility in CI
|
|
_, out = machine.execute("cat /tmp/testerlog")
|
|
print(f"Hyprtester log:\n{out}")
|
|
|
|
# Finally - shutdown
|
|
machine.shutdown()
|
|
'';
|
|
};
|
|
}
|