support/testing: mdnsd: new runtime test

Boot an armv5 image running the mdnsd responder alongside the mquery
client, then check that service discovery works: mquery browses for the
bundled _http._tcp service and mdnsd, on the same host, answers over the
loopback of the eth0 multicast group.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
[Julien: add "mdnsd -v" invocation to show version]
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
Joachim Wiberg
2026-07-17 16:25:28 +02:00
committed by Julien Olivain
parent e39e3e1147
commit 4cd5559163
2 changed files with 42 additions and 0 deletions

View File

@@ -1665,6 +1665,7 @@ F: package/ssdp-responder/
F: package/sysklogd/
F: package/uredir/
F: package/watchdogd/
F: support/testing/tests/package/test_mdnsd.py
N: Jochen Baltes <jochen.baltes@gmail.com>
F: package/altera-stapl

View File

@@ -0,0 +1,41 @@
import os
import infra.basetest
class TestMdnsd(infra.basetest.BRTest):
config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
"""
BR2_PACKAGE_MDNSD=y
BR2_PACKAGE_MDNSD_MQUERY=y
BR2_PACKAGE_MDNSD_HTTP_SERVICE=y
BR2_SYSTEM_DHCP="eth0"
BR2_TARGET_ROOTFS_CPIO=y
# BR2_TARGET_ROOTFS_TAR is not set
"""
def test_run(self):
img = os.path.join(self.builddir, "images", "rootfs.cpio")
self.emulator.boot(arch="armv5",
kernel="builtin",
options=["-initrd", img,
"-net", "nic,model=rtl8139",
"-net", "user"])
self.emulator.login()
# We check the program can execute.
self.assertRunOk("mdnsd -v")
# The responder is started at boot by /etc/init.d/S50mdnsd and
# advertises the bundled _http._tcp service from /etc/mdns.d/.
self.assertRunOk("pidof mdnsd")
# mdnsd only answers on multicast capable interfaces that are
# up, so wait for eth0 to get its DHCP address before querying.
cmd = "while ! ifconfig eth0 | grep -q 'inet addr'; do sleep 1; done"
self.assertRunOk(cmd, timeout=30)
# mquery sends a multicast query for the advertised service;
# output is one "+ NAME (IP)" line per instance
cmd = "mquery -T _http._tcp |grep -F buildroot._http._tcp.local"
self.assertRunOk(cmd, timeout=30)