1import ./make-test-python.nix ({ pkgs, ... }:
2
3{
4 name = "mediatomb";
5
6 nodes = {
7 serverGerbera =
8 { ... }:
9 let port = 49152;
10 in {
11 imports = [ ../modules/profiles/minimal.nix ];
12 services.mediatomb = {
13 enable = true;
14 serverName = "Gerbera";
15 package = pkgs.gerbera;
16 interface = "eth1"; # accessible from test
17 openFirewall = true;
18 mediaDirectories = [
19 { path = "/var/lib/gerbera/pictures"; recursive = false; hidden-files = false; }
20 { path = "/var/lib/gerbera/audio"; recursive = true; hidden-files = false; }
21 ];
22 };
23 };
24
25 serverMediatomb =
26 { ... }:
27 let port = 49151;
28 in {
29 imports = [ ../modules/profiles/minimal.nix ];
30 services.mediatomb = {
31 enable = true;
32 serverName = "Mediatomb";
33 package = pkgs.mediatomb;
34 interface = "eth1";
35 inherit port;
36 mediaDirectories = [
37 { path = "/var/lib/mediatomb/pictures"; recursive = false; hidden-files = false; }
38 { path = "/var/lib/mediatomb/audio"; recursive = true; hidden-files = false; }
39 ];
40 };
41 networking.firewall.interfaces.eth1 = {
42 allowedUDPPorts = [ 1900 port ];
43 allowedTCPPorts = [ port ];
44 };
45 };
46
47 client = { ... }: { };
48 };
49
50 testScript =
51 ''
52 start_all()
53
54 port = 49151
55 serverMediatomb.succeed("mkdir -p /var/lib/mediatomb/{pictures,audio}")
56 serverMediatomb.succeed("chown -R mediatomb:mediatomb /var/lib/mediatomb")
57 serverMediatomb.wait_for_unit("mediatomb")
58 serverMediatomb.wait_for_open_port(port)
59 serverMediatomb.succeed(f"curl --fail http://serverMediatomb:{port}/")
60 page = client.succeed(f"curl --fail http://serverMediatomb:{port}/")
61 assert "MediaTomb" in page and "Gerbera" not in page
62 serverMediatomb.shutdown()
63
64 port = 49152
65 serverGerbera.succeed("mkdir -p /var/lib/mediatomb/{pictures,audio}")
66 serverGerbera.succeed("chown -R mediatomb:mediatomb /var/lib/mediatomb")
67 # service running gerbera fails the first time claiming something is already bound
68 # gerbera[715]: 2020-07-18 23:52:14 info: Please check if another instance of Gerbera or
69 # gerbera[715]: 2020-07-18 23:52:14 info: another application is running on port TCP 49152 or UDP 1900.
70 # I did not find anything so here I work around this
71 serverGerbera.succeed("sleep 2")
72 serverGerbera.wait_until_succeeds("systemctl restart mediatomb")
73 serverGerbera.wait_for_unit("mediatomb")
74 serverGerbera.succeed(f"curl --fail http://serverGerbera:{port}/")
75 page = client.succeed(f"curl --fail http://serverGerbera:{port}/")
76 assert "Gerbera" in page and "MediaTomb" not in page
77
78 serverGerbera.shutdown()
79 client.shutdown()
80 '';
81})