at 25.11-pre 2.2 kB view raw
1import ./make-test-python.nix ( 2 { pkgs, ... }: 3 { 4 name = "slimserver"; 5 meta.maintainers = with pkgs.lib.maintainers; [ adamcstephens ]; 6 7 nodes.machine = 8 { ... }: 9 { 10 services.slimserver.enable = true; 11 services.squeezelite = { 12 enable = true; 13 extraArguments = "-s 127.0.0.1 -d slimproto=info"; 14 }; 15 boot.kernelModules = [ "snd-dummy" ]; 16 }; 17 18 testScript = # python 19 '' 20 import json 21 rpc_get_player = { 22 "id": 1, 23 "method": "slim.request", 24 "params":[0,["player", "id", "0", "?"]] 25 } 26 27 with subtest("slimserver is started"): 28 machine.wait_for_unit("slimserver.service") 29 # give slimserver a moment to report errors 30 machine.sleep(2) 31 machine.wait_until_succeeds("journalctl -u slimserver.service | grep 'Starting Lyrion Music'", timeout=120) 32 machine.wait_for_open_port(9000) 33 34 with subtest('slimserver module errors are not reported'): 35 machine.fail("journalctl -u slimserver.service | grep 'throw_exception'") 36 machine.fail("journalctl -u slimserver.service | grep 'not installed'") 37 machine.fail("journalctl -u slimserver.service | grep 'not found'") 38 machine.fail("journalctl -u slimserver.service | grep 'The following CPAN modules were found but cannot work with Logitech Media Server'") 39 machine.fail("journalctl -u slimserver.service | grep 'please use the buildme.sh'") 40 41 with subtest("squeezelite player successfully connects to slimserver"): 42 machine.wait_for_unit("squeezelite.service") 43 machine.wait_until_succeeds("journalctl -u squeezelite.service | grep -E 'slimproto:[0-9]+ connected'", timeout=120) 44 player_mac = machine.wait_until_succeeds("journalctl -eu squeezelite.service | grep -E 'sendHELO:[0-9]+ mac:'", timeout=120).strip().split(" ")[-1] 45 player_id = machine.succeed(f"curl http://localhost:9000/jsonrpc.js -g -X POST -d '{json.dumps(rpc_get_player)}'") 46 assert player_mac == json.loads(player_id)["result"]["_id"], "squeezelite player not found" 47 ''; 48 } 49)