mirror of
https://github.com/cucumber-sp/yandex-music-linux.git
synced 2025-09-28 01:29:03 +03:00
nix: introduce tests
Introduce set of tests based on NixOS test framework.
This commit is contained in:
62
nix/test-suite.nix
Normal file
62
nix/test-suite.nix
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
This test suite uses nixos common x11 and user-account test configurations.
|
||||
Those configurations use auto-login to ice-wm desktop manager.
|
||||
This test configuration enables yandex-music application, launches it and
|
||||
check for window existence. Additionally it takes screenshot after successful
|
||||
launch to allow to validate state manually. The result may miss the content
|
||||
inside window because of lack of GPU support.
|
||||
|
||||
TODO(Shvedov): We should to perform automatic checks of screen state.
|
||||
*/
|
||||
{
|
||||
testers,
|
||||
path,
|
||||
|
||||
# The yandex-music module
|
||||
nixosModule,
|
||||
# The extra configuration
|
||||
configuration ? { },
|
||||
# The extra code of test script
|
||||
extraTestScript ? "",
|
||||
# The name of test
|
||||
name ? "yandex-music-test",
|
||||
}:
|
||||
testers.runNixOSTest {
|
||||
inherit name;
|
||||
nodes.machine =
|
||||
let
|
||||
tests = "${path}/nixos/tests/common/";
|
||||
user = "alice";
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
nixosModule
|
||||
"${tests}/x11.nix"
|
||||
"${tests}/user-account.nix"
|
||||
configuration
|
||||
];
|
||||
test-support.displayManager.auto.user = user;
|
||||
programs.yandex-music.enable = true;
|
||||
};
|
||||
|
||||
testScript =
|
||||
''
|
||||
# We have to execute command with su beckause all commands performs under
|
||||
# the root user.
|
||||
def mk_command(command, tail = "", fork = False):
|
||||
if fork:
|
||||
tail = f"{tail} >&2 &"
|
||||
return f"su -c '{command}' - alice {tail}"
|
||||
|
||||
machine.wait_for_x()
|
||||
machine.execute(mk_command("yandex-music", fork = True))
|
||||
|
||||
check_command = mk_command('xwininfo -root -tree', tail = "| grep 'Яндекс Музыка'")
|
||||
|
||||
machine.wait_until_succeeds(check_command, 120)
|
||||
machine.sleep(40)
|
||||
machine.succeed(check_command)
|
||||
machine.screenshot("screen")
|
||||
''
|
||||
+ extraTestScript;
|
||||
}
|
Reference in New Issue
Block a user