at 23.11-pre 4.3 kB view raw
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 socket = { config, ... }: { 29 services.grafana.settings.server = { 30 protocol = "socket"; 31 socket = "/run/grafana/sock"; 32 socket_gid = config.users.groups.nginx.gid; 33 }; 34 35 users.users.grafana.extraGroups = [ "nginx" ]; 36 37 services.nginx = { 38 enable = true; 39 recommendedProxySettings = true; 40 virtualHosts."_".locations."/".proxyPass = "http://unix:/run/grafana/sock"; 41 }; 42 }; 43 44 declarativePlugins = { 45 services.grafana.declarativePlugins = [ pkgs.grafanaPlugins.grafana-clock-panel ]; 46 }; 47 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 ensurePermissions."DATABASE grafana" = "ALL PRIVILEGES"; 59 }]; 60 }; 61 systemd.services.grafana.after = [ "postgresql.service" ]; 62 }; 63 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 }; 78 79 nodes = builtins.mapAttrs (_: val: mkMerge [ val baseGrafanaConf ]) extraNodeConfs; 80in { 81 name = "grafana-basic"; 82 83 meta = with maintainers; { 84 maintainers = [ willibutz ]; 85 }; 86 87 inherit nodes; 88 89 testScript = '' 90 start_all() 91 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() 99 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() 110 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() 121 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() 131 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 ''; 142})