From 48e1442e6b91c1a40dec657031ef794e9fb53b22 Mon Sep 17 00:00:00 2001 From: Andrew Fiddian-Green Date: Sat, 14 Feb 2026 20:55:37 +0000 Subject: [PATCH] [mDNS] Only consider fully qualified discovery results (#5348) * [mDNS] only consider fully qualified results Signed-off-by: Andrew Fiddian-Green --- .../discovery/mdns/internal/MDNSDiscoveryService.java | 8 +++++++- .../mdns/internal/MDNSDiscoveryServiceOSGiTest.java | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/bundles/org.openhab.core.config.discovery.mdns/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryService.java b/bundles/org.openhab.core.config.discovery.mdns/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryService.java index aea304963..450fadb1f 100644 --- a/bundles/org.openhab.core.config.discovery.mdns/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryService.java +++ b/bundles/org.openhab.core.config.discovery.mdns/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryService.java @@ -190,11 +190,16 @@ public class MDNSDiscoveryService extends AbstractDiscoveryService implements Se @Override public void serviceAdded(@NonNullByDefault({}) ServiceEvent serviceEvent) { - considerService(serviceEvent); + /** + * Do nothing when a service is added, as we will get a serviceResolved event afterwards, + * which contains the fully resolved ServiceInfo. If we would already create a DiscoveryResult here, + * we would not have the necessary full information. + */ } @Override public void serviceRemoved(@NonNullByDefault({}) ServiceEvent serviceEvent) { + // note: {@link ServiceEvent} JavaDoc says getInfo() result can be null; but seems never to be so here. for (MDNSDiscoveryParticipant participant : participants) { if (participant.getServiceType().equals(serviceEvent.getType())) { removeDiscoveryResult(participant, serviceEvent.getInfo()); @@ -204,6 +209,7 @@ public class MDNSDiscoveryService extends AbstractDiscoveryService implements Se @Override public void serviceResolved(@NonNullByDefault({}) ServiceEvent serviceEvent) { + // note: {@link ServiceEvent} JavaDoc says getInfo() result can be null; but seems never to be so here. considerService(serviceEvent); } diff --git a/itests/org.openhab.core.config.discovery.mdns.tests/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryServiceOSGiTest.java b/itests/org.openhab.core.config.discovery.mdns.tests/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryServiceOSGiTest.java index 1dde094d3..a845a55ae 100644 --- a/itests/org.openhab.core.config.discovery.mdns.tests/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryServiceOSGiTest.java +++ b/itests/org.openhab.core.config.discovery.mdns.tests/src/main/java/org/openhab/core/config/discovery/mdns/internal/MDNSDiscoveryServiceOSGiTest.java @@ -81,11 +81,11 @@ public class MDNSDiscoveryServiceOSGiTest extends JavaOSGiTest { mdnsDiscoveryService.addDiscoveryListener(mockDiscoveryListener); mdnsDiscoveryService.serviceAdded(mockServiceEvent); - verify(mockDiscoveryListener, timeout(2000).times(1)).thingDiscovered(mdnsDiscoveryService, discoveryResult); + verify(mockDiscoveryListener, timeout(2000).times(0)).thingDiscovered(mdnsDiscoveryService, discoveryResult); verifyNoMoreInteractions(mockDiscoveryListener); mdnsDiscoveryService.serviceResolved(mockServiceEvent); - verify(mockDiscoveryListener, timeout(2000).times(2)).thingDiscovered(mdnsDiscoveryService, discoveryResult); + verify(mockDiscoveryListener, timeout(2000).times(1)).thingDiscovered(mdnsDiscoveryService, discoveryResult); verifyNoMoreInteractions(mockDiscoveryListener); mdnsDiscoveryService.serviceRemoved(mockServiceEvent);