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

  nodes.machine = { config, libs, pkgs, ...}:
  { services.kerberos_server =
    { enable = true;
      settings.realms = {
        "FOO.BAR".acl = [{principal = "admin"; access = ["add" "cpw"];}];
      };
    };
    security.krb5 = {
      enable = true;
      package = pkgs.heimdal;
      settings = {
        libdefaults = {
          default_realm = "FOO.BAR";
        };
        realms = {
          "FOO.BAR" = {
            admin_server = "machine";
            kdc = "machine";
          };
        };
      };
    };
  };

  testScript = ''
    machine.succeed(
        "kadmin -l init --realm-max-ticket-life='8 day' --realm-max-renewable-life='10 day' FOO.BAR",
        "systemctl restart kadmind.service kdc.service",
    )

    for unit in ["kadmind", "kdc", "kpasswdd"]:
        machine.wait_for_unit(f"{unit}.service")

    machine.succeed(
        "kadmin -l add --password=admin_pw --use-defaults admin",
        "kadmin -l ext_keytab --keytab=admin.keytab admin",
        "kadmin -p admin -K admin.keytab add --password=alice_pw --use-defaults alice",
        "kadmin -l ext_keytab --keytab=alice.keytab alice",
        "kinit -kt alice.keytab alice",
    )
  '';

  meta.maintainers = [ pkgs.lib.maintainers.dblsaiko ];
})
