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:
@@ -1,6 +1,7 @@
|
||||
{
|
||||
yandex-music-with,
|
||||
isHm ? false,
|
||||
isTest ? false,
|
||||
}:
|
||||
{
|
||||
lib,
|
||||
@@ -13,14 +14,18 @@ let
|
||||
|
||||
in
|
||||
{
|
||||
/*
|
||||
The NixOS test framework disallow to extend `nixpkgs.overlays` configuration
|
||||
option, so we make it here conditionally.
|
||||
*/
|
||||
imports = [
|
||||
{
|
||||
(lib.mkIf (!isTest) {
|
||||
nixpkgs.overlays = [
|
||||
(final: prev: {
|
||||
yandex-music = yandex-music-with prev;
|
||||
})
|
||||
];
|
||||
}
|
||||
})
|
||||
];
|
||||
|
||||
options = {
|
||||
|
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;
|
||||
}
|
81
nix/test.nix
Normal file
81
nix/test.nix
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
This is set of tests of yandex-music application. The main purpose of this
|
||||
test is to check the NixOS module for yandex-music and whether its runs
|
||||
successfully with such configuration.
|
||||
*/
|
||||
{
|
||||
pkgs,
|
||||
yandex-music-with,
|
||||
nixosModule,
|
||||
linkFarm,
|
||||
lib,
|
||||
}:
|
||||
let
|
||||
# Extend packages with our package to overcome the limitation of nixOSTest
|
||||
# modules regarding the overlays.
|
||||
pkgs' = pkgs.extend (cur: prev: { yandex-music = yandex-music-with prev; });
|
||||
removeNameAttr = attrs: lib.removeAttrs attrs [ "name" ];
|
||||
test-suite =
|
||||
{
|
||||
name ? "yandex-music-test",
|
||||
...
|
||||
}@configuration:
|
||||
pkgs'.callPackage ./test-suite.nix {
|
||||
inherit nixosModule name;
|
||||
configuration = removeNameAttr configuration;
|
||||
};
|
||||
yandex-music-config = cfg: {
|
||||
programs.yandex-music = cfg;
|
||||
};
|
||||
yandex-music-test-suite =
|
||||
{
|
||||
name,
|
||||
...
|
||||
}@cfg:
|
||||
test-suite (
|
||||
(yandex-music-config (removeNameAttr cfg))
|
||||
// {
|
||||
name = "yandex-music-test-${name}";
|
||||
}
|
||||
);
|
||||
/*
|
||||
This is set of similar tests with slightly different configuration options
|
||||
for yandex-music module. All they will be joined together to package with
|
||||
symlinks to all results.
|
||||
*/
|
||||
tests = {
|
||||
base = test-suite { };
|
||||
trayDefault = yandex-music-test-suite {
|
||||
tray.enable = true;
|
||||
name = "tray-default";
|
||||
};
|
||||
trayAlways = yandex-music-test-suite {
|
||||
tray.enable = true;
|
||||
tray.always = true;
|
||||
name = "tray-always";
|
||||
};
|
||||
trayMonoBlack = yandex-music-test-suite {
|
||||
tray.enable = true;
|
||||
tray.style = 2;
|
||||
name = "tray-mono-black";
|
||||
};
|
||||
trayMonoWhite = yandex-music-test-suite {
|
||||
tray.enable = true;
|
||||
tray.style = 3;
|
||||
name = "tray-mono-white";
|
||||
};
|
||||
devTools = yandex-music-test-suite {
|
||||
devTools.enable = true;
|
||||
name = "dev-tools";
|
||||
};
|
||||
customTitleBar = yandex-music-test-suite {
|
||||
customTitleBar.enable = true;
|
||||
name = "custom-title-bar";
|
||||
};
|
||||
animatiosFpsZero = yandex-music-test-suite {
|
||||
vibeAnimationMaxFps = 0;
|
||||
name = "animation-fps-zero";
|
||||
};
|
||||
};
|
||||
in
|
||||
(linkFarm "yandex-music-test-all" tests) // tests
|
Reference in New Issue
Block a user