at master 1.5 kB view raw
1{ lib, ... }: 2let 3 ip4 = "192.0.2.1"; 4 ip6 = "2001:db8::1"; 5 6 precedence = { 7 "::1/128" = 50; 8 "::/0" = 40; 9 "2002::/16" = 30; 10 "::/96" = 20; 11 "::ffff:0:0/96" = 100; 12 }; 13in 14{ 15 name = "getaddrinfo"; 16 meta.maintainers = with lib.maintainers; [ moraxyc ]; 17 18 nodes.server = _: { 19 networking.firewall.enable = false; 20 networking.useDHCP = false; 21 22 services.dnsmasq = { 23 enable = true; 24 settings = { 25 address = [ 26 "/nixos.test/${ip4}" 27 "/nixos.test/${ip6}" 28 ]; 29 }; 30 }; 31 }; 32 33 nodes.client = 34 { pkgs, nodes, ... }: 35 { 36 networking.nameservers = [ 37 (lib.head nodes.server.networking.interfaces.eth1.ipv4.addresses).address 38 ]; 39 networking.getaddrinfo = { 40 reload = true; 41 inherit precedence; 42 }; 43 networking.useDHCP = false; 44 environment.systemPackages = [ 45 (pkgs.writers.writePython3Bin "request-addr" { } '' 46 import socket 47 48 results = socket.getaddrinfo("nixos.test", None) 49 print(results[0][4][0]) 50 '') 51 ]; 52 }; 53 54 testScript = 55 { ... }: 56 '' 57 server.wait_for_unit("dnsmasq.service") 58 client.wait_for_unit("network.target") 59 60 assert "${ip4}" in client.succeed("request-addr") 61 62 client.succeed(""" 63 sed 's/100/10/' /etc/gai.conf > /etc/gai.conf.new && \ 64 mv /etc/gai.conf.new /etc/gai.conf 65 """) 66 assert "${ip6}" in client.succeed("request-addr") 67 ''; 68}