1# Test whether `avahi-daemon' and `libnss-mdns' work as expected.
2import ./make-test.nix ({ pkgs, ... } : {
3 name = "avahi";
4 meta = with pkgs.stdenv.lib.maintainers; {
5 maintainers = [ eelco chaoflow ];
6 };
7
8 nodes = let
9 cfg = { ... }: {
10 services.avahi = {
11 enable = true;
12 nssmdns = true;
13 publish.addresses = true;
14 publish.domain = true;
15 publish.enable = true;
16 publish.userServices = true;
17 publish.workstation = true;
18 };
19 };
20 in {
21 one = cfg;
22 two = cfg;
23 };
24
25 testScript =
26 '' startAll;
27
28 # mDNS.
29 $one->waitForUnit("network.target");
30 $two->waitForUnit("network.target");
31
32 $one->succeed("avahi-resolve-host-name one.local | tee out >&2");
33 $one->succeed("test \"`cut -f1 < out`\" = one.local");
34 $one->succeed("avahi-resolve-host-name two.local | tee out >&2");
35 $one->succeed("test \"`cut -f1 < out`\" = two.local");
36
37 $two->succeed("avahi-resolve-host-name one.local | tee out >&2");
38 $two->succeed("test \"`cut -f1 < out`\" = one.local");
39 $two->succeed("avahi-resolve-host-name two.local | tee out >&2");
40 $two->succeed("test \"`cut -f1 < out`\" = two.local");
41
42 # Basic DNS-SD.
43 $one->succeed("avahi-browse -r -t _workstation._tcp | tee out >&2");
44 $one->succeed("test `wc -l < out` -gt 0");
45 $two->succeed("avahi-browse -r -t _workstation._tcp | tee out >&2");
46 $two->succeed("test `wc -l < out` -gt 0");
47
48 # More DNS-SD.
49 $one->execute("avahi-publish -s \"This is a test\" _test._tcp 123 one=1 &");
50 $one->sleep(5);
51 $two->succeed("avahi-browse -r -t _test._tcp | tee out >&2");
52 $two->succeed("test `wc -l < out` -gt 0");
53
54 # NSS-mDNS.
55 $one->succeed("getent hosts one.local >&2");
56 $one->succeed("getent hosts two.local >&2");
57 $two->succeed("getent hosts one.local >&2");
58 $two->succeed("getent hosts two.local >&2");
59 '';
60})