at 23.05-pre 3.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 ''; 14 15 makeAppTest = name: configs: makeTest { 16 name = "powerdns-admin-${name}"; 17 meta = with pkgs.lib.maintainers; { 18 maintainers = [ Flakebi zhaofengli ]; 19 }; 20 21 nodes.server = { pkgs, config, ... }: mkMerge ([ 22 { 23 services.powerdns-admin = { 24 enable = true; 25 secretKeyFile = "/etc/powerdns-admin/secret"; 26 saltFile = "/etc/powerdns-admin/salt"; 27 }; 28 # It's insecure to have secrets in the world-readable nix store, but this is just a test 29 environment.etc."powerdns-admin/secret".text = "secret key"; 30 environment.etc."powerdns-admin/salt".text = "salt"; 31 environment.systemPackages = [ 32 (pkgs.writeShellScriptBin "run-test" config.system.build.testScript) 33 ]; 34 } 35 ] ++ configs); 36 37 testScript = '' 38 server.wait_for_unit("powerdns-admin.service") 39 server.wait_until_succeeds("run-test", timeout=10) 40 ''; 41 }; 42 43 matrix = { 44 backend = { 45 mysql = { 46 services.powerdns-admin = { 47 config = '' 48 ${defaultConfig} 49 SQLALCHEMY_DATABASE_URI = 'mysql://powerdnsadmin@/powerdnsadmin?unix_socket=/run/mysqld/mysqld.sock' 50 ''; 51 }; 52 systemd.services.powerdns-admin = { 53 after = [ "mysql.service" ]; 54 serviceConfig.BindPaths = "/run/mysqld"; 55 }; 56 57 services.mysql = { 58 enable = true; 59 package = pkgs.mariadb; 60 ensureDatabases = [ "powerdnsadmin" ]; 61 ensureUsers = [ 62 { 63 name = "powerdnsadmin"; 64 ensurePermissions = { 65 "powerdnsadmin.*" = "ALL PRIVILEGES"; 66 }; 67 } 68 ]; 69 }; 70 }; 71 postgresql = { 72 services.powerdns-admin = { 73 config = '' 74 ${defaultConfig} 75 SQLALCHEMY_DATABASE_URI = 'postgresql://powerdnsadmin@/powerdnsadmin?host=/run/postgresql' 76 ''; 77 }; 78 systemd.services.powerdns-admin = { 79 after = [ "postgresql.service" ]; 80 serviceConfig.BindPaths = "/run/postgresql"; 81 }; 82 83 services.postgresql = { 84 enable = true; 85 ensureDatabases = [ "powerdnsadmin" ]; 86 ensureUsers = [ 87 { 88 name = "powerdnsadmin"; 89 ensurePermissions = { 90 "DATABASE powerdnsadmin" = "ALL PRIVILEGES"; 91 }; 92 } 93 ]; 94 }; 95 }; 96 }; 97 listen = { 98 tcp = { 99 services.powerdns-admin.extraArgs = [ "-b" "127.0.0.1:8000" ]; 100 system.build.testScript = '' 101 curl -sSf http://127.0.0.1:8000/ 102 ''; 103 }; 104 unix = { 105 services.powerdns-admin.extraArgs = [ "-b" "unix:/run/powerdns-admin/http.sock" ]; 106 system.build.testScript = '' 107 curl -sSf --unix-socket /run/powerdns-admin/http.sock http://somehost/ 108 ''; 109 }; 110 }; 111 }; 112in 113with matrix; { 114 postgresql = makeAppTest "postgresql" [ backend.postgresql listen.tcp ]; 115 mysql = makeAppTest "mysql" [ backend.mysql listen.tcp ]; 116 unix-listener = makeAppTest "unix-listener" [ backend.postgresql listen.unix ]; 117}