1{
2 pkgs,
3 # bool: whether to use networkd in the tests
4 networkd ? false,
5 ...
6}:
7
8# Test whether `avahi-daemon' and `libnss-mdns' work as expected.
9{
10 name = "avahi";
11 meta.maintainers = [ ];
12
13 nodes =
14 let
15 cfg =
16 { ... }:
17 {
18 services.avahi = {
19 enable = true;
20 nssmdns4 = true;
21 publish.addresses = true;
22 publish.domain = true;
23 publish.enable = true;
24 publish.userServices = true;
25 publish.workstation = true;
26 extraServiceFiles.ssh = "${pkgs.avahi}/etc/avahi/services/ssh.service";
27 };
28 }
29 // pkgs.lib.optionalAttrs networkd {
30 networking = {
31 useNetworkd = true;
32 useDHCP = false;
33 };
34 };
35 in
36 {
37 one = cfg;
38 two = cfg;
39 };
40
41 testScript = ''
42 start_all()
43
44 # mDNS.
45 one.wait_for_unit("network.target")
46 two.wait_for_unit("network.target")
47
48 one.succeed("avahi-resolve-host-name one.local | tee out >&2")
49 one.succeed('test "`cut -f1 < out`" = one.local')
50 one.succeed("avahi-resolve-host-name two.local | tee out >&2")
51 one.succeed('test "`cut -f1 < out`" = two.local')
52
53 two.succeed("avahi-resolve-host-name one.local | tee out >&2")
54 two.succeed('test "`cut -f1 < out`" = one.local')
55 two.succeed("avahi-resolve-host-name two.local | tee out >&2")
56 two.succeed('test "`cut -f1 < out`" = two.local')
57
58 # Basic DNS-SD.
59 one.succeed("avahi-browse -r -t _workstation._tcp | tee out >&2")
60 one.succeed("test `wc -l < out` -gt 0")
61 two.succeed("avahi-browse -r -t _workstation._tcp | tee out >&2")
62 two.succeed("test `wc -l < out` -gt 0")
63
64 # More DNS-SD.
65 one.execute('avahi-publish -s "This is a test" _test._tcp 123 one=1 >&2 &')
66 one.sleep(5)
67 two.succeed("avahi-browse -r -t _test._tcp | tee out >&2")
68 two.succeed("test `wc -l < out` -gt 0")
69
70 # NSS-mDNS.
71 one.succeed("getent hosts one.local >&2")
72 one.succeed("getent hosts two.local >&2")
73 two.succeed("getent hosts one.local >&2")
74 two.succeed("getent hosts two.local >&2")
75
76 # extra service definitions
77 one.succeed("avahi-browse -r -t _ssh._tcp | tee out >&2")
78 one.succeed("test `wc -l < out` -gt 0")
79 two.succeed("avahi-browse -r -t _ssh._tcp | tee out >&2")
80 two.succeed("test `wc -l < out` -gt 0")
81
82 one.log(one.execute("systemd-analyze security avahi-daemon.service | grep -v ✓")[1])
83 '';
84}