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
This commit is contained in:
Yang Sun 2025-03-12 03:41:30 +00:00
commit ffd3986c99
2 changed files with 23 additions and 4 deletions

View file

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

View file

@ -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<NsdServiceInfo>()
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)