at 22.05-pre 2.1 kB view raw
1# This test runs PowerDNS authoritative server with the 2# generic MySQL backend (gmysql) to connect to a 3# MariaDB server using UNIX sockets authentication. 4 5import ./make-test-python.nix ({ pkgs, lib, ... }: { 6 name = "powerdns"; 7 8 nodes.server = { ... }: { 9 services.powerdns.enable = true; 10 services.powerdns.extraConfig = '' 11 launch=gmysql 12 gmysql-user=pdns 13 ''; 14 15 services.mysql = { 16 enable = true; 17 package = pkgs.mariadb; 18 ensureDatabases = [ "powerdns" ]; 19 ensureUsers = lib.singleton 20 { name = "pdns"; 21 ensurePermissions = { "powerdns.*" = "ALL PRIVILEGES"; }; 22 }; 23 }; 24 25 environment.systemPackages = with pkgs; 26 [ dnsutils powerdns mariadb ]; 27 }; 28 29 testScript = '' 30 import re 31 32 with subtest("PowerDNS database exists"): 33 server.wait_for_unit("mysql") 34 server.succeed("echo 'SHOW DATABASES;' | sudo -u pdns mysql -u pdns >&2") 35 36 with subtest("Loading the MySQL schema works"): 37 server.succeed( 38 "sudo -u pdns mysql -u pdns -D powerdns <" 39 "${pkgs.powerdns}/share/doc/pdns/schema.mysql.sql" 40 ) 41 42 with subtest("PowerDNS server starts"): 43 server.wait_for_unit("pdns") 44 server.succeed("dig version.bind txt chaos @127.0.0.1 >&2") 45 46 with subtest("Adding an example zone works"): 47 # Extract configuration file needed by pdnsutil 48 unit = server.succeed("systemctl cat pdns") 49 conf = re.search("(--config-dir=[^ ]+)", unit).group(1) 50 pdnsutil = "sudo -u pdns pdnsutil " + conf 51 server.succeed(f"{pdnsutil} create-zone example.com ns1.example.com") 52 server.succeed(f"{pdnsutil} add-record example.com ns1 A 192.168.1.2") 53 54 with subtest("Querying the example zone works"): 55 reply = server.succeed("dig +noall +answer ns1.example.com @127.0.0.1") 56 assert ( 57 "192.168.1.2" in reply 58 ), f"""" 59 The reply does not contain the expected IP address: 60 Expected: 61 ns1.example.com. 3600 IN A 192.168.1.2 62 Reply: 63 {reply}""" 64 ''; 65})