summary refs log tree commit diff
path: root/nixos/tests/mediatomb.nix
diff options
context:
space:
mode:
authorAntoine R. Dumont (@ardumont) <antoine.romain.dumont@gmail.com>2020-07-19 02:01:16 +0200
committerAntoine R. Dumont (@ardumont) <ardumont@softwareheritage.org>2020-10-08 08:59:49 +0200
commit9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5 (patch)
treedbf17a9811206131729ece0c7619616d3ea15bc0 /nixos/tests/mediatomb.nix
parent86e56d5322c527f75cb9570abb9fb56c22c2268c (diff)
downloadnixpkgs-9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5.tar
nixpkgs-9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5.tar.gz
nixpkgs-9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5.tar.bz2
nixpkgs-9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5.tar.lz
nixpkgs-9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5.tar.xz
nixpkgs-9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5.tar.zst
nixpkgs-9fdd11c6a82f1480bcd6285e55623a60ebd3e0e5.zip
mediatomb/gerbera: Bootstrap tests on service
This exposes 2 scenario running the mediatomb service:
- one running with the unmaintained mediatomb package
- one running with the new maintained gerbera package
Diffstat (limited to 'nixos/tests/mediatomb.nix')
-rw-r--r--nixos/tests/mediatomb.nix84
1 files changed, 84 insertions, 0 deletions
diff --git a/nixos/tests/mediatomb.nix b/nixos/tests/mediatomb.nix
new file mode 100644
index 00000000000..f07e453aadc
--- /dev/null
+++ b/nixos/tests/mediatomb.nix
@@ -0,0 +1,84 @@
+import ./make-test-python.nix ({ pkgs, ... }:
+
+{
+  name = "mediatomb";
+
+  nodes = {
+    serverGerbera =
+      { ... }:
+      let port = 49152;
+      in {
+        imports = [ ../modules/profiles/minimal.nix ];
+        services.mediatomb = {
+          enable = true;
+          serverName = "Gerbera";
+          package = pkgs.gerbera;
+          interface = "eth1";  # accessible from test
+          mediaDirectories = [
+            { path = "/var/lib/gerbera/pictures"; recursive = false; hidden-files = false; }
+            { path = "/var/lib/gerbera/audio"; recursive = true; hidden-files = false; }
+          ];
+        };
+        networking.firewall = {
+          allowedUDPPorts = [ 1900 port ];
+          allowedTCPPorts = [ port ];
+        };
+      };
+
+    serverMediatomb =
+      { ... }:
+      let port = 49151;
+      in {
+        imports = [ ../modules/profiles/minimal.nix ];
+        services.mediatomb = {
+          enable = true;
+          serverName = "Mediatomb";
+          package = pkgs.mediatomb;
+          interface = "eth1";
+          inherit port;
+          mediaDirectories = [
+            { path = "/var/lib/mediatomb/pictures"; recursive = false; hidden-files = false; }
+            { path = "/var/lib/mediatomb/audio"; recursive = true; hidden-files = false; }
+          ];
+        };
+        networking.firewall = {
+          allowedUDPPorts = [ 1900 port ];
+          allowedTCPPorts = [ port ];
+        };
+      };
+
+      client = { ... }: { };
+  };
+
+  testScript =
+  ''
+    start_all()
+
+    port = 49151
+    serverMediatomb.succeed("mkdir -p /var/lib/mediatomb/{pictures,audio}")
+    serverMediatomb.succeed("chown -R mediatomb:mediatomb /var/lib/mediatomb")
+    serverMediatomb.wait_for_unit("mediatomb")
+    serverMediatomb.wait_for_open_port(port)
+    serverMediatomb.succeed(f"curl --fail http://serverMediatomb:{port}/")
+    page = client.succeed(f"curl --fail http://serverMediatomb:{port}/")
+    assert "MediaTomb" in page and "Gerbera" not in page
+    serverMediatomb.shutdown()
+
+    port = 49152
+    serverGerbera.succeed("mkdir -p /var/lib/mediatomb/{pictures,audio}")
+    serverGerbera.succeed("chown -R mediatomb:mediatomb /var/lib/mediatomb")
+    # service running gerbera fails the first time claiming something is already bound
+    # gerbera[715]: 2020-07-18 23:52:14   info: Please check if another instance of Gerbera or
+    # gerbera[715]: 2020-07-18 23:52:14   info: another application is running on port TCP 49152 or UDP 1900.
+    # I did not find anything so here I work around this
+    serverGerbera.succeed("sleep 2")
+    serverGerbera.wait_until_succeeds("systemctl restart mediatomb")
+    serverGerbera.wait_for_unit("mediatomb")
+    serverGerbera.succeed(f"curl --fail http://serverGerbera:{port}/")
+    page = client.succeed(f"curl --fail http://serverGerbera:{port}/")
+    assert "Gerbera" in page and "MediaTomb" not in page
+
+    serverGerbera.shutdown()
+    client.shutdown()
+  '';
+})