at 23.11-beta 4.4 kB view raw
1# Test powerdns-admin 2{ system ? builtins.currentSystem 3, config ? { } 4, pkgs ? import ../.. { inherit system config; } 5}: 6 7with import ../lib/testing-python.nix { inherit system pkgs; }; 8with pkgs.lib; 9let 10 defaultConfig = '' 11 BIND_ADDRESS = '127.0.0.1' 12 PORT = 8000 13 CAPTCHA_ENABLE = False 14 ''; 15 16 makeAppTest = name: configs: makeTest { 17 name = "powerdns-admin-${name}"; 18 meta = with pkgs.lib.maintainers; { 19 maintainers = [ Flakebi zhaofengli ]; 20 }; 21 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); 37 38 testScript = '' 39 server.wait_for_unit("powerdns-admin.service") 40 server.wait_until_succeeds("run-test", timeout=10) 41 ''; 42 }; 43 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 }; 57 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 }; 83 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/ 102 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 114 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 121 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 }; 134in 135with 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 ]; 139}