From ffd3986c994edbfe6f152d480326f4cac99f39c5 Mon Sep 17 00:00:00 2001 From: Yang Sun Date: Wed, 12 Mar 2025 03:41:30 +0000 Subject: [PATCH] Fix flaky test for trel service discovery When checking for trel services published by a BR, we need to filter the services by their service name, since there might be other devices publishing trel service at the same time. Bug: 399518677 Change-Id: I56518dbe6c79b48aa048073d8556a53e1261e8bd --- .../net/thread/ServiceDiscoveryTest.java | 7 +++++-- .../net/thread/utils/IntegrationTestUtils.kt | 20 +++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/thread/tests/integration/src/android/net/thread/ServiceDiscoveryTest.java b/thread/tests/integration/src/android/net/thread/ServiceDiscoveryTest.java index 62f9035916..c4e373aad0 100644 --- a/thread/tests/integration/src/android/net/thread/ServiceDiscoveryTest.java +++ b/thread/tests/integration/src/android/net/thread/ServiceDiscoveryTest.java @@ -595,7 +595,8 @@ public class ServiceDiscoveryTest { DeviceConfigUtils.getDeviceConfigPropertyBoolean( "thread_network", "TrelFeature__enabled", false)); - NsdServiceInfo discoveredService = discoverService(mNsdManager, "_trel._udp"); + NsdServiceInfo discoveredService = + discoverService(mNsdManager, "_trel._udp", mOtCtl.getExtendedAddr()); assertThat(discoveredService).isNotNull(); // Resolve service with the current TREL port, otherwise it may return stale service from // a previous infra link setup. @@ -618,7 +619,9 @@ public class ServiceDiscoveryTest { DeviceConfigUtils.getDeviceConfigPropertyBoolean( "thread_network", "TrelFeature__enabled", false)); - assertThrows(TimeoutException.class, () -> discoverService(mNsdManager, "_trel._udp")); + assertThrows( + TimeoutException.class, + () -> discoverService(mNsdManager, "_trel._udp", mOtCtl.getExtendedAddr())); } private void registerService(NsdServiceInfo serviceInfo, RegistrationListener listener) diff --git a/thread/tests/integration/src/android/net/thread/utils/IntegrationTestUtils.kt b/thread/tests/integration/src/android/net/thread/utils/IntegrationTestUtils.kt index 773167cc72..f41e903e1d 100644 --- a/thread/tests/integration/src/android/net/thread/utils/IntegrationTestUtils.kt +++ b/thread/tests/integration/src/android/net/thread/utils/IntegrationTestUtils.kt @@ -479,15 +479,31 @@ object IntegrationTestUtils { return addresses } - /** Return the first discovered service of `serviceType`. */ + /** Return the first discovered service of `serviceType`. */ @JvmStatic @Throws(Exception::class) fun discoverService(nsdManager: NsdManager, serviceType: String): NsdServiceInfo { + return discoverService(nsdManager, serviceType, null) + } + + /** + * Returns the service that matches `serviceType` and `serviceName`. + * + * If `serviceName` is null, returns the first discovered service. `serviceName` is not case + * sensitive. + */ + @JvmStatic + @Throws(Exception::class) + fun discoverService(nsdManager: NsdManager, serviceType: String, serviceName: String?): + NsdServiceInfo { val serviceInfoFuture = CompletableFuture() val listener: NsdManager.DiscoveryListener = object : DefaultDiscoveryListener() { override fun onServiceFound(serviceInfo: NsdServiceInfo) { Log.d(TAG, "onServiceFound: $serviceInfo") - serviceInfoFuture.complete(serviceInfo) + if (serviceName == null || + serviceInfo.getServiceName().equals(serviceName, true /* ignore case */)) { + serviceInfoFuture.complete(serviceInfo) + } } } nsdManager.discoverServices(serviceType, NsdManager.PROTOCOL_DNS_SD, listener)