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 settings = {
10 analytics.reporting_enabled = false;
11
12 server = {
13 http_addr = "localhost";
14 domain = "localhost";
15 };
16
17 security = {
18 admin_user = "testadmin";
19 admin_password = "snakeoilpwd";
20 };
21 };
22 };
23 };
24
25 extraNodeConfs = {
26 sqlite = {};
27
28 declarativePlugins = {
29 services.grafana.declarativePlugins = [ pkgs.grafanaPlugins.grafana-clock-panel ];
30 };
31
32 postgresql = {
33 services.grafana.settings.database = {
34 host = "127.0.0.1:5432";
35 user = "grafana";
36 };
37 services.postgresql = {
38 enable = true;
39 ensureDatabases = [ "grafana" ];
40 ensureUsers = [{
41 name = "grafana";
42 ensurePermissions."DATABASE grafana" = "ALL PRIVILEGES";
43 }];
44 };
45 systemd.services.grafana.after = [ "postgresql.service" ];
46 };
47
48 mysql = {
49 services.grafana.settings.database.user = "grafana";
50 services.mysql = {
51 enable = true;
52 ensureDatabases = [ "grafana" ];
53 ensureUsers = [{
54 name = "grafana";
55 ensurePermissions."grafana.*" = "ALL PRIVILEGES";
56 }];
57 package = pkgs.mariadb;
58 };
59 systemd.services.grafana.after = [ "mysql.service" ];
60 };
61 };
62
63 nodes = builtins.mapAttrs (_: val: mkMerge [ val baseGrafanaConf ]) extraNodeConfs;
64in {
65 name = "grafana-basic";
66
67 meta = with maintainers; {
68 maintainers = [ willibutz ];
69 };
70
71 inherit nodes;
72
73 testScript = ''
74 start_all()
75
76 with subtest("Declarative plugins installed"):
77 declarativePlugins.wait_for_unit("grafana.service")
78 declarativePlugins.wait_for_open_port(3000)
79 declarativePlugins.succeed(
80 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/plugins | grep grafana-clock-panel"
81 )
82 declarativePlugins.shutdown()
83
84 with subtest("Successful API query as admin user with sqlite db"):
85 sqlite.wait_for_unit("grafana.service")
86 sqlite.wait_for_open_port(3000)
87 print(sqlite.succeed(
88 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users -i"
89 ))
90 sqlite.succeed(
91 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
92 )
93 sqlite.shutdown()
94
95 with subtest("Successful API query as admin user with postgresql db"):
96 postgresql.wait_for_unit("grafana.service")
97 postgresql.wait_for_unit("postgresql.service")
98 postgresql.wait_for_open_port(3000)
99 postgresql.wait_for_open_port(5432)
100 postgresql.succeed(
101 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
102 )
103 postgresql.shutdown()
104
105 with subtest("Successful API query as admin user with mysql db"):
106 mysql.wait_for_unit("grafana.service")
107 mysql.wait_for_unit("mysql.service")
108 mysql.wait_for_open_port(3000)
109 mysql.wait_for_open_port(3306)
110 mysql.succeed(
111 "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
112 )
113 mysql.shutdown()
114 '';
115})