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