1import ./make-test-python.nix ({ lib, pkgs, ... }:
2
3let
4 inherit (lib) mkMerge nameValuePair maintainers;
5
6 baseGrafanaConf = {
7 services.grafana = {
8 enable = true;
9 addr = "localhost";
10 analytics.reporting.enable = false;
11 domain = "localhost";
12 security = {
13 adminUser = "testadmin";
14 adminPassword = "snakeoilpwd";
15 };
16 };
17 };
18
19 extraNodeConfs = {
20 declarativePlugins = {
21 services.grafana.declarativePlugins = [ pkgs.grafanaPlugins.grafana-clock-panel ];
22 };
23
24 postgresql = {
25 services.grafana.database = {
26 host = "127.0.0.1:5432";
27 user = "grafana";
28 };
29 services.postgresql = {
30 enable = true;
31 ensureDatabases = [ "grafana" ];
32 ensureUsers = [{
33 name = "grafana";
34 ensurePermissions."DATABASE grafana" = "ALL PRIVILEGES";
35 }];
36 };
37 systemd.services.grafana.after = [ "postgresql.service" ];
38 };
39
40 mysql = {
41 services.grafana.database.user = "grafana";
42 services.mysql = {
43 enable = true;
44 ensureDatabases = [ "grafana" ];
45 ensureUsers = [{
46 name = "grafana";
47 ensurePermissions."grafana.*" = "ALL PRIVILEGES";
48 }];
49 package = pkgs.mariadb;
50 };
51 systemd.services.grafana.after = [ "mysql.service" ];
52 };
53 };
54
55 nodes = builtins.listToAttrs (map (dbName:
56 nameValuePair dbName (mkMerge [
57 baseGrafanaConf
58 (extraNodeConfs.${dbName} or {})
59 ])) [ "sqlite" "declarativePlugins" "postgresql" "mysql" ]);
60
61in {
62 name = "grafana";
63
64 meta = with maintainers; {
65 maintainers = [ willibutz ];
66 };
67
68 inherit nodes;
69
70 testScript = ''
71 start_all()
72
73 with subtest("Declarative plugins installed"):
74 declarativePlugins.wait_for_unit("grafana.service")
75 declarativePlugins.wait_for_open_port(3000)
76 declarativePlugins.succeed(
77 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/plugins | grep grafana-clock-panel"
78 )
79 declarativePlugins.shutdown()
80
81 with subtest("Successful API query as admin user with sqlite db"):
82 sqlite.wait_for_unit("grafana.service")
83 sqlite.wait_for_open_port(3000)
84 sqlite.succeed(
85 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep testadmin\@localhost"
86 )
87 sqlite.shutdown()
88
89 with subtest("Successful API query as admin user with postgresql db"):
90 postgresql.wait_for_unit("grafana.service")
91 postgresql.wait_for_unit("postgresql.service")
92 postgresql.wait_for_open_port(3000)
93 postgresql.wait_for_open_port(5432)
94 postgresql.succeed(
95 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep testadmin\@localhost"
96 )
97 postgresql.shutdown()
98
99 with subtest("Successful API query as admin user with mysql db"):
100 mysql.wait_for_unit("grafana.service")
101 mysql.wait_for_unit("mysql.service")
102 mysql.wait_for_open_port(3000)
103 mysql.wait_for_open_port(3306)
104 mysql.succeed(
105 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep testadmin\@localhost"
106 )
107 mysql.shutdown()
108 '';
109})