Merge pull request #156232 from B4dM4n/nixos-tests-mediatomb

authored by Sandro and committed by GitHub 30ec7dc6 fac09357

+35 -70
+3 -1
nixos/modules/services/misc/mediatomb.nix
··· 362 in mkIf cfg.enable { 363 systemd.services.mediatomb = { 364 description = "${cfg.serverName} media Server"; 365 - after = [ "network.target" ]; 366 wantedBy = [ "multi-user.target" ]; 367 serviceConfig.ExecStart = "${binaryCommand} --port ${toString cfg.port} ${interfaceFlag} ${configFlag} --home ${cfg.dataDir}"; 368 serviceConfig.User = cfg.user;
··· 362 in mkIf cfg.enable { 363 systemd.services.mediatomb = { 364 description = "${cfg.serverName} media Server"; 365 + # Gerbera might fail if the network interface is not available on startup 366 + # https://github.com/gerbera/gerbera/issues/1324 367 + after = [ "network.target" "network-online.target" ]; 368 wantedBy = [ "multi-user.target" ]; 369 serviceConfig.ExecStart = "${binaryCommand} --port ${toString cfg.port} ${interfaceFlag} ${configFlag} --home ${cfg.dataDir}"; 370 serviceConfig.User = cfg.user;
+32 -69
nixos/tests/mediatomb.nix
··· 1 - import ./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 - })
··· 1 + import ./make-test-python.nix { 2 name = "mediatomb"; 3 4 nodes = { 5 + server = { 6 + services.mediatomb = { 7 + enable = true; 8 + serverName = "Gerbera"; 9 + interface = "eth1"; 10 + openFirewall = true; 11 + mediaDirectories = [ 12 + { 13 + path = "/var/lib/gerbera/pictures"; 14 + recursive = false; 15 + hidden-files = false; 16 + } 17 + { 18 + path = "/var/lib/gerbera/audio"; 19 + recursive = true; 20 + hidden-files = false; 21 + } 22 + ]; 23 }; 24 + systemd.tmpfiles.rules = [ 25 + "d /var/lib/gerbera/pictures 0770 mediatomb mediatomb" 26 + "d /var/lib/gerbera/audio 0770 mediatomb mediatomb" 27 + ]; 28 + }; 29 30 + client = {}; 31 }; 32 33 + testScript = '' 34 start_all() 35 36 + server.wait_for_unit("mediatomb") 37 + server.wait_until_succeeds("nc -z 192.168.1.2 49152") 38 + server.succeed("curl -v --fail http://server:49152/") 39 40 + client.wait_for_unit("multi-user.target") 41 + page = client.succeed("curl -v --fail http://server:49152/") 42 assert "Gerbera" in page and "MediaTomb" not in page 43 ''; 44 + }