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 = {
9 one =
10 { config, pkgs, ... }: {
11 services.avahi.enable = true;
12 services.avahi.nssmdns = true;
13 };
14
15 two =
16 { config, pkgs, ... }: {
17 services.avahi.enable = true;
18 services.avahi.nssmdns = true;
19 };
20 };
21
22 testScript =
23 '' startAll;
24
25 # mDNS.
26 $one->waitForUnit("network.target");
27 $two->waitForUnit("network.target");
28
29 $one->succeed("avahi-resolve-host-name one.local | tee out >&2");
30 $one->succeed("test \"`cut -f1 < out`\" = one.local");
31 $one->succeed("avahi-resolve-host-name two.local | tee out >&2");
32 $one->succeed("test \"`cut -f1 < out`\" = two.local");
33
34 $two->succeed("avahi-resolve-host-name one.local | tee out >&2");
35 $two->succeed("test \"`cut -f1 < out`\" = one.local");
36 $two->succeed("avahi-resolve-host-name two.local | tee out >&2");
37 $two->succeed("test \"`cut -f1 < out`\" = two.local");
38
39 # Basic DNS-SD.
40 $one->succeed("avahi-browse -r -t _workstation._tcp | tee out >&2");
41 $one->succeed("test `wc -l < out` -gt 0");
42 $two->succeed("avahi-browse -r -t _workstation._tcp | tee out >&2");
43 $two->succeed("test `wc -l < out` -gt 0");
44
45 # More DNS-SD.
46 $one->execute("avahi-publish -s \"This is a test\" _test._tcp 123 one=1 &");
47 $one->sleep(5);
48 $two->succeed("avahi-browse -r -t _test._tcp | tee out >&2");
49 $two->succeed("test `wc -l < out` -gt 0");
50
51 # NSS-mDNS.
52 $one->succeed("getent hosts one.local >&2");
53 $one->succeed("getent hosts two.local >&2");
54 $two->succeed("getent hosts one.local >&2");
55 $two->succeed("getent hosts two.local >&2");
56 '';
57})