at master 2.8 kB view raw
1{ pkgs, lib, ... }: 2 3let 4 geoserver = pkgs.geoserver; 5 geoserverWithImporterExtension = pkgs.geoserver.withExtensions (ps: with ps; [ importer ]); 6 7 # Blacklisted extensions: 8 # - wps-jdbc needs a running (Postrgres) db server. 9 blacklist = [ "wps-jdbc" ]; 10 11 blacklistedToNull = n: v: if !builtins.elem n blacklist then v else null; 12 getNonBlackistedExtensionsAsList = 13 ps: builtins.filter (x: x != null) (lib.attrsets.mapAttrsToList blacklistedToNull ps); 14 geoserverWithAllExtensions = pkgs.geoserver.withExtensions ( 15 ps: getNonBlackistedExtensionsAsList ps 16 ); 17in 18{ 19 20 name = "geoserver"; 21 meta = { 22 maintainers = with lib; [ teams.geospatial.members ]; 23 }; 24 25 nodes = { 26 machine = 27 { pkgs, ... }: 28 { 29 virtualisation.diskSize = 2 * 1024; 30 31 environment.systemPackages = [ 32 geoserver 33 geoserverWithImporterExtension 34 geoserverWithAllExtensions 35 ]; 36 }; 37 }; 38 39 testScript = '' 40 from contextlib import contextmanager 41 42 curl_cmd = "curl --fail --connect-timeout 2" 43 curl_cmd_rest = f"{curl_cmd} -u admin:geoserver -X GET" 44 base_url = "http://localhost:8080/geoserver" 45 log_file = "./log.txt" 46 47 @contextmanager 48 def running_geoserver(pkg): 49 try: 50 print(f"Launching geoserver from {pkg}...") 51 machine.execute(f"{pkg}/bin/geoserver-startup > {log_file} 2>&1 &") 52 machine.wait_until_succeeds(f"{curl_cmd} {base_url} 2>&1", timeout=60) 53 yield 54 finally: 55 # We need to wait a little bit to make sure the server is properly 56 # shutdown before launching a new instance. 57 machine.execute(f"{pkg}/bin/geoserver-shutdown; sleep 1") 58 59 start_all() 60 61 with running_geoserver("${geoserver}"): 62 machine.succeed(f"{curl_cmd} {base_url}/ows?service=WMS&version=1.3.0&request=GetCapabilities") 63 64 # No extensions yet. 65 machine.fail(f"{curl_cmd_rest} {base_url}/rest/imports") 66 machine.fail(f"{curl_cmd_rest} {base_url}/rest/monitor/requests.csv") 67 68 69 with running_geoserver("${geoserverWithImporterExtension}"): 70 machine.succeed(f"{curl_cmd_rest} {base_url}/rest/imports") 71 machine.fail(f"{curl_cmd_rest} {base_url}/rest/monitor/requests.csv") 72 73 with running_geoserver("${geoserverWithAllExtensions}"): 74 machine.succeed(f"{curl_cmd_rest} {base_url}/rest/imports") 75 machine.succeed(f"{curl_cmd_rest} {base_url}/rest/monitor/requests.csv") 76 _, stdout = machine.execute(f"cat {log_file}") 77 print(stdout.replace("\\n", "\n")) 78 assert "GDAL Native Library loaded" in stdout, "gdal" 79 assert "The turbo jpeg encoder is available for usage" in stdout, "libjpeg-turbo" 80 assert "org.geotools.imageio.netcdf.utilities.NetCDFUtilities" in stdout, "netcdf" 81 assert "Unable to load library 'netcdf'" not in stdout, "netcdf" 82 83 ''; 84}