about summary refs log tree commit diff
path: root/nixos/tests
diff options
context:
space:
mode:
authorAdam Stephens <adam@valkor.net>2023-11-06 15:51:52 -0500
committerAdam Stephens <adam@valkor.net>2023-11-17 08:18:34 -0500
commit226b8a9f9a2afc220e35fce172491102af2eee51 (patch)
treee9c59940e6262f20235f178bbfc03f6fe789041f /nixos/tests
parentd6e8178a5c9d008767ff2202141b4b3b2b087e85 (diff)
nixos/tests/slimserver: add end to end with squeezelite
Diffstat (limited to 'nixos/tests')
-rw-r--r--nixos/tests/slimserver.nix39
1 files changed, 35 insertions, 4 deletions
diff --git a/nixos/tests/slimserver.nix b/nixos/tests/slimserver.nix
index 09dbf20bd78a7..c3f7b6fde4de0 100644
--- a/nixos/tests/slimserver.nix
+++ b/nixos/tests/slimserver.nix
@@ -4,13 +4,44 @@ import ./make-test-python.nix ({ pkgs, ...} : {
 
   nodes.machine = { ... }: {
     services.slimserver.enable = true;
+    services.squeezelite = {
+      enable = true;
+      extraArguments = "-s 127.0.0.1 -d slimproto=info";
+    };
+    sound.enable = true;
+    boot.initrd.kernelModules = ["snd-dummy"];
   };
 
   testScript =
     ''
-      machine.wait_for_unit("slimserver.service")
-      machine.wait_for_open_port(9000)
-      machine.succeed("curl http://localhost:9000")
-      machine.wait_until_succeeds("journalctl -eu slimserver.service | grep 'Completed dbOptimize Scan'")
+      import json
+      rpc_get_player = {
+          "id": 1,
+          "method": "slim.request",
+          "params":[0,["player", "id", "0", "?"]]
+      }
+
+      with subtest("slimserver is started"):
+          machine.wait_for_unit("slimserver.service")
+          # give slimserver a moment to report errors
+          machine.sleep(2)
+
+      with subtest('slimserver module errors are not reported'):
+          machine.fail("journalctl -u slimserver.service | grep 'throw_exception'")
+          machine.fail("journalctl -u slimserver.service | grep 'not installed'")
+          machine.fail("journalctl -u slimserver.service | grep 'not found'")
+          machine.fail("journalctl -u slimserver.service | grep 'The following CPAN modules were found but cannot work with Logitech Media Server'")
+          machine.fail("journalctl -u slimserver.service | grep 'please use the buildme.sh'")
+
+      with subtest('slimserver is ready'):
+          machine.wait_for_open_port(9000)
+          machine.wait_until_succeeds("journalctl -u slimserver.service | grep 'Completed dbOptimize Scan'")
+
+      with subtest("squeezelite player successfully connects to slimserver"):
+          machine.wait_for_unit("squeezelite.service")
+          machine.wait_until_succeeds("journalctl -u squeezelite.service | grep 'slimproto:937 connected'")
+          player_mac = machine.wait_until_succeeds("journalctl -eu squeezelite.service | grep 'sendHELO:148 mac:'").strip().split(" ")[-1]
+          player_id = machine.succeed(f"curl http://localhost:9000/jsonrpc.js -g -X POST -d '{json.dumps(rpc_get_player)}'")
+          assert player_mac == json.loads(player_id)["result"]["_id"], "squeezelite player not found"
     '';
 })