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