summary refs log blame commit diff
path: root/nixos/tests/hostname.nix
blob: 3b87303d73e7405e8881afe23f10a7a44140a666 (plain) (tree)

































































                                                                                                        
{ system ? builtins.currentSystem,
  config ? {},
  pkgs ? import ../.. { inherit system config; }
}:

with import ../lib/testing-python.nix { inherit system pkgs; };
with pkgs.lib;

let
  makeHostNameTest = hostName: domain:
    let
      fqdn = hostName + (optionalString (domain != null) ".${domain}");
    in
      makeTest {
        name = "hostname-${fqdn}";
        meta = with pkgs.stdenv.lib.maintainers; {
          maintainers = [ primeos blitz ];
        };

        machine = { lib, ... }: {
          networking.hostName = hostName;
          networking.domain = domain;

          environment.systemPackages = with pkgs; [
            inetutils
          ];
        };

        testScript = ''
          start_all()

          machine = ${hostName}

          machine.wait_for_unit("network-online.target")

          # The FQDN, domain name, and hostname detection should work as expected:
          assert "${fqdn}" == machine.succeed("hostname --fqdn").strip()
          assert "${optionalString (domain != null) domain}" == machine.succeed("dnsdomainname").strip()
          assert (
              "${hostName}"
              == machine.succeed(
                  'hostnamectl status | grep "Static hostname" | cut -d: -f2'
              ).strip()
          )

          # 127.0.0.1 and ::1 should resolve back to "localhost":
          assert (
              "localhost" == machine.succeed("getent hosts 127.0.0.1 | awk '{print $2}'").strip()
          )
          assert "localhost" == machine.succeed("getent hosts ::1 | awk '{print $2}'").strip()

          # 127.0.0.2 should resolve back to the FQDN and hostname:
          fqdn_and_host_name = "${optionalString (domain != null) "${hostName}.${domain} "}${hostName}"
          assert (
              fqdn_and_host_name
              == machine.succeed("getent hosts 127.0.0.2 | awk '{print $2,$3}'").strip()
          )
        '';
      };

in
{
  noExplicitDomain = makeHostNameTest "ahost" null;

  explicitDomain = makeHostNameTest "ahost" "adomain";
}