Merge branch 'staging-next' into staging
[NixPkgs.git] / nixos / tests / grafana / basic.nix
blobdd389bc8a3d1fbce1d663748750ed2c128e277f5
1 import ../make-test-python.nix ({ lib, pkgs, ... }:
3 let
4   inherit (lib) mkMerge nameValuePair maintainers;
6   baseGrafanaConf = {
7     services.grafana = {
8       enable = true;
9       settings = {
10         analytics.reporting_enabled = false;
12         server = {
13           http_addr = "localhost";
14           domain = "localhost";
15         };
17         security = {
18           admin_user = "testadmin";
19           admin_password = "snakeoilpwd";
20         };
21       };
22     };
23   };
25   extraNodeConfs = {
26     sqlite = {};
28     socket = { config, ... }: {
29       services.grafana.settings.server = {
30         protocol = "socket";
31         socket = "/run/grafana/sock";
32         socket_gid = config.users.groups.nginx.gid;
33       };
35       users.users.grafana.extraGroups = [ "nginx" ];
37       services.nginx = {
38         enable = true;
39         recommendedProxySettings = true;
40         virtualHosts."_".locations."/".proxyPass = "http://unix:/run/grafana/sock";
41       };
42     };
44     declarativePlugins = {
45       services.grafana.declarativePlugins = [ pkgs.grafanaPlugins.grafana-clock-panel ];
46     };
48     postgresql = {
49       services.grafana.settings.database = {
50         host = "127.0.0.1:5432";
51         user = "grafana";
52       };
53       services.postgresql = {
54         enable = true;
55         ensureDatabases = [ "grafana" ];
56         ensureUsers = [{
57           name = "grafana";
58           ensureDBOwnership = true;
59         }];
60       };
61       systemd.services.grafana.after = [ "postgresql.service" ];
62     };
64     mysql = {
65       services.grafana.settings.database.user = "grafana";
66       services.mysql = {
67         enable = true;
68         ensureDatabases = [ "grafana" ];
69         ensureUsers = [{
70           name = "grafana";
71           ensurePermissions."grafana.*" = "ALL PRIVILEGES";
72         }];
73         package = pkgs.mariadb;
74       };
75       systemd.services.grafana.after = [ "mysql.service" ];
76     };
77   };
79   nodes = builtins.mapAttrs (_: val: mkMerge [ val baseGrafanaConf ]) extraNodeConfs;
80 in {
81   name = "grafana-basic";
83   meta = with maintainers; {
84     maintainers = [ willibutz ];
85   };
87   inherit nodes;
89   testScript = ''
90     start_all()
92     with subtest("Declarative plugins installed"):
93         declarativePlugins.wait_for_unit("grafana.service")
94         declarativePlugins.wait_for_open_port(3000)
95         declarativePlugins.succeed(
96             "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/plugins | grep grafana-clock-panel"
97         )
98         declarativePlugins.shutdown()
100     with subtest("Successful API query as admin user with sqlite db"):
101         sqlite.wait_for_unit("grafana.service")
102         sqlite.wait_for_open_port(3000)
103         print(sqlite.succeed(
104             "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users -i"
105         ))
106         sqlite.succeed(
107             "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
108         )
109         sqlite.shutdown()
111     with subtest("Successful API query as admin user with sqlite db listening on socket"):
112         socket.wait_for_unit("grafana.service")
113         socket.wait_for_open_port(80)
114         print(socket.succeed(
115             "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1/api/org/users -i"
116         ))
117         socket.succeed(
118             "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1/api/org/users | grep admin\@localhost"
119         )
120         socket.shutdown()
122     with subtest("Successful API query as admin user with postgresql db"):
123         postgresql.wait_for_unit("grafana.service")
124         postgresql.wait_for_unit("postgresql.service")
125         postgresql.wait_for_open_port(3000)
126         postgresql.wait_for_open_port(5432)
127         postgresql.succeed(
128             "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
129         )
130         postgresql.shutdown()
132     with subtest("Successful API query as admin user with mysql db"):
133         mysql.wait_for_unit("grafana.service")
134         mysql.wait_for_unit("mysql.service")
135         mysql.wait_for_open_port(3000)
136         mysql.wait_for_open_port(3306)
137         mysql.succeed(
138             "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
139         )
140         mysql.shutdown()
141   '';