python312Packages.azure-mgmt-network: 27.0.0 -> 28.0.0 (#357060)
[NixPkgs.git] / nixos / tests / slimserver.nix
blobabc0cd2ef1812771a17a2e6b7c67a32e9bf5eaee
1 import ./make-test-python.nix ({ pkgs, ...} : {
2   name = "slimserver";
3   meta.maintainers = with pkgs.lib.maintainers; [ adamcstephens ];
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     boot.kernelModules = ["snd-dummy"];
12   };
14   testScript =
15     ''
16       import json
17       rpc_get_player = {
18           "id": 1,
19           "method": "slim.request",
20           "params":[0,["player", "id", "0", "?"]]
21       }
23       with subtest("slimserver is started"):
24           machine.wait_for_unit("slimserver.service")
25           # give slimserver a moment to report errors
26           machine.sleep(2)
28       with subtest('slimserver module errors are not reported'):
29           machine.fail("journalctl -u slimserver.service | grep 'throw_exception'")
30           machine.fail("journalctl -u slimserver.service | grep 'not installed'")
31           machine.fail("journalctl -u slimserver.service | grep 'not found'")
32           machine.fail("journalctl -u slimserver.service | grep 'The following CPAN modules were found but cannot work with Logitech Media Server'")
33           machine.fail("journalctl -u slimserver.service | grep 'please use the buildme.sh'")
35       with subtest('slimserver is ready'):
36           machine.wait_for_open_port(9000)
37           machine.wait_until_succeeds("journalctl -u slimserver.service | grep 'Completed dbOptimize Scan'")
39       with subtest("squeezelite player successfully connects to slimserver"):
40           machine.wait_for_unit("squeezelite.service")
41           machine.wait_until_succeeds("journalctl -u squeezelite.service | grep -E 'slimproto:[0-9]+ connected'")
42           player_mac = machine.wait_until_succeeds("journalctl -eu squeezelite.service | grep -E 'sendHELO:[0-9]+ mac:'").strip().split(" ")[-1]
43           player_id = machine.succeed(f"curl http://localhost:9000/jsonrpc.js -g -X POST -d '{json.dumps(rpc_get_player)}'")
44           assert player_mac == json.loads(player_id)["result"]["_id"], "squeezelite player not found"
45     '';