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);