nixos/tests/slimserver: add end to end with squeezelite
This commit is contained in:
parent
d6e8178a5c
commit
226b8a9f9a
@ -4,13 +4,44 @@ import ./make-test-python.nix ({ pkgs, ...} : {
|
||||
|
||||
nodes.machine = { ... }: {
|
||||
services.slimserver.enable = true;
|
||||
services.squeezelite = {
|
||||
enable = true;
|
||||
extraArguments = "-s 127.0.0.1 -d slimproto=info";
|
||||
};
|
||||
sound.enable = true;
|
||||
boot.initrd.kernelModules = ["snd-dummy"];
|
||||
};
|
||||
|
||||
testScript =
|
||||
''
|
||||
machine.wait_for_unit("slimserver.service")
|
||||
machine.wait_for_open_port(9000)
|
||||
machine.succeed("curl http://localhost:9000")
|
||||
machine.wait_until_succeeds("journalctl -eu slimserver.service | grep 'Completed dbOptimize Scan'")
|
||||
import json
|
||||
rpc_get_player = {
|
||||
"id": 1,
|
||||
"method": "slim.request",
|
||||
"params":[0,["player", "id", "0", "?"]]
|
||||
}
|
||||
|
||||
with subtest("slimserver is started"):
|
||||
machine.wait_for_unit("slimserver.service")
|
||||
# give slimserver a moment to report errors
|
||||
machine.sleep(2)
|
||||
|
||||
with subtest('slimserver module errors are not reported'):
|
||||
machine.fail("journalctl -u slimserver.service | grep 'throw_exception'")
|
||||
machine.fail("journalctl -u slimserver.service | grep 'not installed'")
|
||||
machine.fail("journalctl -u slimserver.service | grep 'not found'")
|
||||
machine.fail("journalctl -u slimserver.service | grep 'The following CPAN modules were found but cannot work with Logitech Media Server'")
|
||||
machine.fail("journalctl -u slimserver.service | grep 'please use the buildme.sh'")
|
||||
|
||||
with subtest('slimserver is ready'):
|
||||
machine.wait_for_open_port(9000)
|
||||
machine.wait_until_succeeds("journalctl -u slimserver.service | grep 'Completed dbOptimize Scan'")
|
||||
|
||||
with subtest("squeezelite player successfully connects to slimserver"):
|
||||
machine.wait_for_unit("squeezelite.service")
|
||||
machine.wait_until_succeeds("journalctl -u squeezelite.service | grep 'slimproto:937 connected'")
|
||||
player_mac = machine.wait_until_succeeds("journalctl -eu squeezelite.service | grep 'sendHELO:148 mac:'").strip().split(" ")[-1]
|
||||
player_id = machine.succeed(f"curl http://localhost:9000/jsonrpc.js -g -X POST -d '{json.dumps(rpc_get_player)}'")
|
||||
assert player_mac == json.loads(player_id)["result"]["_id"], "squeezelite player not found"
|
||||
'';
|
||||
})
|
||||
|
@ -22,6 +22,7 @@
|
||||
, openssl
|
||||
, portaudioSupport ? stdenv.isDarwin
|
||||
, portaudio
|
||||
, slimserver
|
||||
, AudioToolbox
|
||||
, AudioUnit
|
||||
, Carbon
|
||||
@ -95,7 +96,10 @@ stdenv.mkDerivation {
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
passthru = {
|
||||
inherit (slimserver) tests;
|
||||
updateScript = ./update.sh;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Lightweight headless squeezebox client emulator";
|
||||
|
Loading…
Reference in New Issue
Block a user