at 25.11-pre 2.8 kB view raw
1import ./make-test-python.nix ( 2 { pkgs, lib, ... }: 3 { 4 name = "systemd-resolved"; 5 meta.maintainers = [ lib.maintainers.elvishjerricco ]; 6 7 nodes.server = 8 { lib, config, ... }: 9 let 10 exampleZone = pkgs.writeTextDir "example.com.zone" '' 11 @ SOA ns.example.com. noc.example.com. 2019031301 86400 7200 3600000 172800 12 @ A ${(lib.head config.networking.interfaces.eth1.ipv4.addresses).address} 13 @ AAAA ${(lib.head config.networking.interfaces.eth1.ipv6.addresses).address} 14 ''; 15 in 16 { 17 networking.firewall.enable = false; 18 networking.useDHCP = false; 19 20 networking.interfaces.eth1.ipv6.addresses = lib.mkForce [ 21 { 22 address = "fd00::1"; 23 prefixLength = 64; 24 } 25 ]; 26 27 services.knot = { 28 enable = true; 29 settings = { 30 server.listen = [ 31 "0.0.0.0@53" 32 "::@53" 33 ]; 34 template.default.storage = exampleZone; 35 zone."example.com".file = "example.com.zone"; 36 }; 37 }; 38 }; 39 40 nodes.client = 41 { nodes, ... }: 42 let 43 inherit (lib.head nodes.server.networking.interfaces.eth1.ipv4.addresses) address; 44 in 45 { 46 networking.nameservers = [ address ]; 47 networking.interfaces.eth1.ipv6.addresses = lib.mkForce [ 48 { 49 address = "fd00::2"; 50 prefixLength = 64; 51 } 52 ]; 53 services.resolved.enable = true; 54 services.resolved.fallbackDns = [ ]; 55 networking.useNetworkd = true; 56 networking.useDHCP = false; 57 systemd.network.networks."40-eth0".enable = false; 58 59 testing.initrdBackdoor = true; 60 boot.initrd = { 61 systemd.enable = true; 62 systemd.initrdBin = [ pkgs.iputils ]; 63 network.enable = true; 64 services.resolved.enable = true; 65 }; 66 }; 67 68 testScript = 69 { nodes, ... }: 70 let 71 address4 = (lib.head nodes.server.networking.interfaces.eth1.ipv4.addresses).address; 72 address6 = (lib.head nodes.server.networking.interfaces.eth1.ipv6.addresses).address; 73 in 74 '' 75 start_all() 76 server.wait_for_unit("multi-user.target") 77 78 def test_client(): 79 query = client.succeed("resolvectl query example.com") 80 assert "${address4}" in query 81 assert "${address6}" in query 82 client.succeed("ping -4 -c 1 example.com") 83 client.succeed("ping -6 -c 1 example.com") 84 85 client.wait_for_unit("initrd.target") 86 test_client() 87 client.switch_root() 88 89 client.wait_for_unit("multi-user.target") 90 test_client() 91 ''; 92 } 93)