at 25.11-pre 2.9 kB view raw
1{ 2 pkgs, 3 ... 4}: 5 6let 7 port = 10004; 8 tcpPort = 10005; 9 httpPort = 10080; 10 tcpStreamPort = 10006; 11 bufferSize = 742; 12in 13{ 14 name = "snapcast"; 15 meta = with pkgs.lib.maintainers; { 16 maintainers = [ hexa ]; 17 }; 18 19 nodes = { 20 server = { 21 services.snapserver = { 22 enable = true; 23 port = port; 24 tcp.port = tcpPort; 25 http.port = httpPort; 26 openFirewall = true; 27 buffer = bufferSize; 28 streams = { 29 mpd = { 30 type = "pipe"; 31 location = "/run/snapserver/mpd"; 32 query.mode = "create"; 33 }; 34 bluetooth = { 35 type = "pipe"; 36 location = "/run/snapserver/bluetooth"; 37 }; 38 tcp = { 39 type = "tcp"; 40 location = "127.0.0.1:${toString tcpStreamPort}"; 41 }; 42 meta = { 43 type = "meta"; 44 location = "/mpd/bluetooth/tcp"; 45 }; 46 }; 47 }; 48 environment.systemPackages = [ pkgs.snapcast ]; 49 }; 50 client = { 51 environment.systemPackages = [ pkgs.snapcast ]; 52 }; 53 }; 54 55 testScript = '' 56 import json 57 58 get_rpc_version = {"id": "1", "jsonrpc": "2.0", "method": "Server.GetRPCVersion"} 59 60 start_all() 61 62 server.wait_for_unit("snapserver.service") 63 server.wait_until_succeeds("ss -ntl | grep -q ${toString port}") 64 server.wait_until_succeeds("ss -ntl | grep -q ${toString tcpPort}") 65 server.wait_until_succeeds("ss -ntl | grep -q ${toString httpPort}") 66 server.wait_until_succeeds("ss -ntl | grep -q ${toString tcpStreamPort}") 67 68 with subtest("check that pipes are created"): 69 server.succeed("test -p /run/snapserver/mpd") 70 server.succeed("test -p /run/snapserver/bluetooth") 71 72 with subtest("test tcp json-rpc"): 73 server.succeed(f"echo '{json.dumps(get_rpc_version)}' | nc -w 1 localhost ${toString tcpPort}") 74 75 with subtest("test http json-rpc"): 76 server.succeed( 77 "curl --fail http://localhost:${toString httpPort}/jsonrpc -d '{json.dumps(get_rpc_version)}'" 78 ) 79 80 with subtest("test a ipv6 connection"): 81 server.execute("systemd-run --unit=snapcast-local-client snapclient -h ::1 -p ${toString port}") 82 server.wait_until_succeeds( 83 "journalctl -o cat -u snapserver.service | grep -q 'Hello from'" 84 ) 85 server.wait_until_succeeds("journalctl -o cat -u snapcast-local-client | grep -q 'buffer: ${toString bufferSize}'") 86 87 with subtest("test a connection"): 88 client.execute("systemd-run --unit=snapcast-client snapclient -h server -p ${toString port}") 89 server.wait_until_succeeds( 90 "journalctl -o cat -u snapserver.service | grep -q 'Hello from'" 91 ) 92 client.wait_until_succeeds("journalctl -o cat -u snapcast-client | grep -q 'buffer: ${toString bufferSize}'") 93 ''; 94}