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