vuls: init at 0.27.0
[NixPkgs.git] / nixos / tests / powerdns-admin.nix
blobd326d74a982611c6a1fa8203d5fce7604c7fada8
1 # Test powerdns-admin
2 { system ? builtins.currentSystem
3 , config ? { }
4 , pkgs ? import ../.. { inherit system config; }
5 }:
7 with import ../lib/testing-python.nix { inherit system pkgs; };
8 with pkgs.lib;
9 let
10   defaultConfig = ''
11     BIND_ADDRESS = '127.0.0.1'
12     PORT = 8000
13     CAPTCHA_ENABLE = False
14   '';
16   makeAppTest = name: configs: makeTest {
17     name = "powerdns-admin-${name}";
18     meta = with pkgs.lib.maintainers; {
19       maintainers = [ Flakebi zhaofengli ];
20     };
22     nodes.server = { pkgs, config, ... }: mkMerge ([
23       {
24         services.powerdns-admin = {
25           enable = true;
26           secretKeyFile = "/etc/powerdns-admin/secret";
27           saltFile = "/etc/powerdns-admin/salt";
28         };
29         # It's insecure to have secrets in the world-readable nix store, but this is just a test
30         environment.etc."powerdns-admin/secret".text = "secret key";
31         environment.etc."powerdns-admin/salt".text = "salt";
32         environment.systemPackages = [
33           (pkgs.writeShellScriptBin "run-test" config.system.build.testScript)
34         ];
35       }
36     ] ++ configs);
38     testScript = ''
39       server.wait_for_unit("powerdns-admin.service")
40       server.wait_until_succeeds("run-test", timeout=10)
41     '';
42   };
44   matrix = {
45     backend = {
46       mysql = {
47         services.powerdns-admin = {
48           config = ''
49             ${defaultConfig}
50             SQLALCHEMY_DATABASE_URI = 'mysql://powerdnsadmin@/powerdnsadmin?unix_socket=/run/mysqld/mysqld.sock'
51           '';
52         };
53         systemd.services.powerdns-admin = {
54           after = [ "mysql.service" ];
55           serviceConfig.BindPaths = "/run/mysqld";
56         };
58         services.mysql = {
59           enable = true;
60           package = pkgs.mariadb;
61           ensureDatabases = [ "powerdnsadmin" ];
62           ensureUsers = [
63             {
64               name = "powerdnsadmin";
65               ensurePermissions = {
66                 "powerdnsadmin.*" = "ALL PRIVILEGES";
67               };
68             }
69           ];
70         };
71       };
72       postgresql = {
73         services.powerdns-admin = {
74           config = ''
75             ${defaultConfig}
76             SQLALCHEMY_DATABASE_URI = 'postgresql://powerdnsadmin@/powerdnsadmin?host=/run/postgresql'
77           '';
78         };
79         systemd.services.powerdns-admin = {
80           after = [ "postgresql.service" ];
81           serviceConfig.BindPaths = "/run/postgresql";
82         };
84         services.postgresql = {
85           enable = true;
86           ensureDatabases = [ "powerdnsadmin" ];
87           ensureUsers = [
88             {
89               name = "powerdnsadmin";
90               ensureDBOwnership = true;
91             }
92           ];
93         };
94       };
95     };
96     listen = {
97       tcp = {
98         services.powerdns-admin.extraArgs = [ "-b" "127.0.0.1:8000" ];
99         system.build.testScript = ''
100           set -euxo pipefail
101           curl -sSf http://127.0.0.1:8000/
103           # Create account to check that the database migrations ran
104           csrf_token="$(curl -sSfc session http://127.0.0.1:8000/register | grep _csrf_token | cut -d\" -f6)"
105           # Outputs 'Redirecting' if successful
106           curl -sSfb session http://127.0.0.1:8000/register \
107             -F "_csrf_token=$csrf_token" \
108             -F "firstname=first" \
109             -F "lastname=last" \
110             -F "email=a@example.com" \
111             -F "username=user" \
112             -F "password=password" \
113             -F "rpassword=password" | grep Redirecting
115           # Login
116           # Outputs 'Redirecting' if successful
117           curl -sSfb session http://127.0.0.1:8000/login \
118             -F "_csrf_token=$csrf_token" \
119             -F "username=user" \
120             -F "password=password" | grep Redirecting
122           # Check that we are logged in, this redirects to /admin/setting/pdns if we are
123           curl -sSfb session http://127.0.0.1:8000/dashboard/ | grep /admin/setting
124         '';
125       };
126       unix = {
127         services.powerdns-admin.extraArgs = [ "-b" "unix:/run/powerdns-admin/http.sock" ];
128         system.build.testScript = ''
129           curl -sSf --unix-socket /run/powerdns-admin/http.sock http://somehost/
130         '';
131       };
132     };
133   };
135 with matrix; {
136   postgresql = makeAppTest "postgresql" [ backend.postgresql listen.tcp ];
137   mysql = makeAppTest "mysql" [ backend.mysql listen.tcp ];
138   unix-listener = makeAppTest "unix-listener" [ backend.postgresql listen.unix ];