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}