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