1import ./make-test-python.nix (
2 {
3 pkgs,
4 lib,
5 package,
6 ...
7 }:
8 let
9 qgisPackage = package.override { withServer = true; };
10 testScript = pkgs.writeTextFile {
11 name = "qgis-test.py";
12 text = (builtins.readFile ../../pkgs/applications/gis/qgis/test.py);
13 };
14 in
15 {
16 name = "qgis";
17 meta = {
18 maintainers = with lib; [ teams.geospatial.members ];
19 };
20
21 nodes = {
22 machine =
23 { config, pkgs, ... }:
24
25 let
26 qgisServerUser = config.services.nginx.user;
27 qgisServerSocket = "/run/qgis_mapserv.socket";
28 in
29 {
30 virtualisation.diskSize = 2 * 1024;
31
32 imports = [ ./common/x11.nix ];
33 environment.systemPackages = [
34 qgisPackage
35 ];
36
37 systemd.sockets.qgis-server = {
38 listenStreams = [ qgisServerSocket ];
39 socketConfig = {
40 Accept = false;
41 SocketUser = qgisServerUser;
42 SocketMode = 600;
43 };
44 wantedBy = [
45 "sockets.target"
46 "qgis-server.service"
47 ];
48 before = [ "qgis-server.service" ];
49 };
50
51 systemd.services.qgis-server = {
52 description = "QGIS server";
53 serviceConfig = {
54 User = qgisServerUser;
55 StandardOutput = "null";
56 StandardError = "journal";
57 StandardInput = "socket";
58 Environment = [
59 "QT_QPA_PLATFORM_PLUGIN_PATH=${pkgs.libsForQt5.qt5.qtbase}/${pkgs.libsForQt5.qt5.qtbase.qtPluginPrefix}/platforms"
60 "QGIS_SERVER_LOG_LEVEL=0"
61 "QGIS_SERVER_LOG_STDERR=1"
62 ];
63 ExecStart = "${qgisPackage}/lib/cgi-bin/qgis_mapserv.fcgi";
64 };
65 after = [ "network.target" ];
66 wantedBy = [ "multi-user.target" ];
67 };
68
69 services.nginx = {
70 enable = true;
71 virtualHosts."qgis" = {
72 locations."~".extraConfig = ''
73 gzip off;
74 include ${pkgs.nginx}/conf/fastcgi_params;
75 include ${pkgs.nginx}/conf/fastcgi.conf;
76 fastcgi_pass unix:${qgisServerSocket};
77 '';
78 };
79 };
80 };
81 };
82
83 testScript = ''
84 start_all()
85
86 # test desktop
87 machine.succeed("${qgisPackage}/bin/qgis --version | grep 'QGIS ${qgisPackage.version}'")
88 machine.succeed("${qgisPackage}/bin/qgis --code ${testScript}")
89
90 # test server
91 machine.succeed("${qgisPackage}/bin/qgis_mapserver --version | grep 'QGIS ${qgisPackage.version}'")
92
93 machine.succeed("curl --head http://localhost | grep 'Server:.*${qgisPackage.version}'")
94 machine.succeed("curl http://localhost/index.json | grep 'Landing page as JSON'")
95 '';
96 }
97)