<commit_before># This test runs PowerDNS authoritative server with the
# generic MySQL backend (gmysql) to connect to a
# MariaDB server using UNIX sockets authentication.

import ./make-test-python.nix ({ pkgs, lib, ... }: {
  name = "powerdns";

  nodes.server = { ... }: {
    services.powerdns.enable = true;
    services.powerdns.extraConfig = ''
      launch=gmysql
      gmysql-user=pdns
      zone-cache-refresh-interval=0
    '';

    services.mysql = {
      enable = true;
      package = pkgs.mariadb;
      ensureDatabases = [ "powerdns" ];
      ensureUsers = lib.singleton
        { name = "pdns";
          ensurePermissions = { "powerdns.*" = "ALL PRIVILEGES"; };
        };
    };

    environment.systemPackages = with pkgs;
      [ dnsutils powerdns mariadb ];
  };

  testScript = ''
    import re

    with subtest("PowerDNS database exists"):
        server.wait_for_unit("mysql")
        server.succeed("echo 'SHOW DATABASES;' | sudo -u pdns mysql -u pdns >&2")

    with subtest("Loading the MySQL schema works"):
        server.succeed(
            "sudo -u pdns mysql -u pdns -D powerdns <"
            "${pkgs.powerdns}/share/doc/pdns/schema.mysql.sql"
        )

    with subtest("PowerDNS server starts"):
        server.wait_for_unit("pdns")
        server.succeed("dig version.bind txt chaos @127.0.0.1 >&2")

    with subtest("Adding an example zone works"):
        # Extract configuration file needed by pdnsutil
        unit = server.succeed("systemctl cat pdns")
        conf = re.search("(--config-dir=[^ ]+)", unit).group(1)
        pdnsutil = "sudo -u pdns pdnsutil " + conf
        server.succeed(f"{pdnsutil} create-zone example.com ns1.example.com")
        server.succeed(f"{pdnsutil} add-record  example.com ns1 A 192.168.1.2")

    with subtest("Querying the example zone works"):
        reply = server.succeed("dig +noall +answer ns1.example.com @127.0.0.1")
        assert (
            "192.168.1.2" in reply
        ), f""""
        The reply does not contain the expected IP address:
          Expected:
            ns1.example.com.        3600    IN      A       192.168.1.2
          Reply:
            {reply}"""
  '';
})
<commit_msg>nixosTests.powerdns: fix test script for type checking<commit_after># This test runs PowerDNS authoritative server with the
# generic MySQL backend (gmysql) to connect to a
# MariaDB server using UNIX sockets authentication.

import ./make-test-python.nix ({ pkgs, lib, ... }: {
  name = "powerdns";

  nodes.server = { ... }: {
    services.powerdns.enable = true;
    services.powerdns.extraConfig = ''
      launch=gmysql
      gmysql-user=pdns
      zone-cache-refresh-interval=0
    '';

    services.mysql = {
      enable = true;
      package = pkgs.mariadb;
      ensureDatabases = [ "powerdns" ];
      ensureUsers = lib.singleton
        { name = "pdns";
          ensurePermissions = { "powerdns.*" = "ALL PRIVILEGES"; };
        };
    };

    environment.systemPackages = with pkgs;
      [ dnsutils powerdns mariadb ];
  };

  testScript = ''
    import re

    with subtest("PowerDNS database exists"):
        server.wait_for_unit("mysql")
        server.succeed("echo 'SHOW DATABASES;' | sudo -u pdns mysql -u pdns >&2")

    with subtest("Loading the MySQL schema works"):
        server.succeed(
            "sudo -u pdns mysql -u pdns -D powerdns <"
            "${pkgs.powerdns}/share/doc/pdns/schema.mysql.sql"
        )

    with subtest("PowerDNS server starts"):
        server.wait_for_unit("pdns")
        server.succeed("dig version.bind txt chaos @127.0.0.1 >&2")

    with subtest("Adding an example zone works"):
        # Extract configuration file needed by pdnsutil
        unit = server.succeed("systemctl cat pdns")
        match = re.search("(--config-dir=[^ ]+)", unit)
        assert(match is not None)
        conf = match.group(1)
        pdnsutil = "sudo -u pdns pdnsutil " + conf
        server.succeed(f"{pdnsutil} create-zone example.com ns1.example.com")
        server.succeed(f"{pdnsutil} add-record  example.com ns1 A 192.168.1.2")

    with subtest("Querying the example zone works"):
        reply = server.succeed("dig +noall +answer ns1.example.com @127.0.0.1")
        assert (
            "192.168.1.2" in reply
        ), f""""
        The reply does not contain the expected IP address:
          Expected:
            ns1.example.com.        3600    IN      A       192.168.1.2
          Reply:
            {reply}"""
  '';
})

{'fraction_non_alphanumeric': 0.12849162011173185, 'fraction_numerical': 0.021452513966480447, 'mean_word_length': 2.2364425162689803, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 10, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2849724', 'n_tokens_mistral': 1514, 'n_tokens_neox': 1430, 'n_words': 354}