Unverified Commit 226b8a9f authored by Adam Stephens's avatar Adam Stephens
Browse files

nixos/tests/slimserver: add end to end with squeezelite

parent d6e8178a
Loading
Loading
Loading
Loading
+35 −4
Original line number Diff line number Diff line
@@ -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 =
    ''
      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.succeed("curl http://localhost:9000")
      machine.wait_until_succeeds("journalctl -eu slimserver.service | grep 'Completed dbOptimize Scan'")
          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"
    '';
})
+5 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
, openssl
, portaudioSupport ? stdenv.isDarwin
, portaudio
, slimserver
, AudioToolbox
, AudioUnit
, Carbon
@@ -95,7 +96,10 @@ stdenv.mkDerivation {
    runHook postInstall
  '';

  passthru.updateScript = ./update.sh;
  passthru = {
    inherit (slimserver) tests;
    updateScript = ./update.sh;
  };

  meta = with lib; {
    description = "Lightweight headless squeezebox client emulator";