[Thread] discover and resolve the meshcop service only on test network
The test case is flaky because the service is unexpectedly discovered after it's already unregistered. Probably this is due to that on the WiFi interface NsdManager somehow didn't hear the goodbye PTR for the service so it can still 'discover' the service. Limiting the discovery on test network may help avoid the flake because test network is cleaner. Bug: 331878313 Test: https://android-build.corp.google.com/builds/abtd/run/L17400030002839695 Change-Id: Icc09aae00cd90f64428387b97dbd9743140641e5
This commit is contained in:
parent
e805c9a9ce
commit
a449374772
2 changed files with 22 additions and 6 deletions
|
|
@ -864,11 +864,12 @@ public class ThreadNetworkControllerTest {
|
|||
@Test
|
||||
public void meshcopService_threadDisabled_notDiscovered() throws Exception {
|
||||
setUpTestNetwork();
|
||||
|
||||
CompletableFuture<NsdServiceInfo> serviceLostFuture = new CompletableFuture<>();
|
||||
NsdManager.DiscoveryListener listener =
|
||||
discoverForServiceLost(MESHCOP_SERVICE_TYPE, serviceLostFuture);
|
||||
|
||||
setEnabledAndWait(mController, false);
|
||||
|
||||
try {
|
||||
serviceLostFuture.get(SERVICE_LOST_TIMEOUT_MILLIS, MILLISECONDS);
|
||||
} catch (InterruptedException | ExecutionException | TimeoutException ignored) {
|
||||
|
|
@ -877,7 +878,6 @@ public class ThreadNetworkControllerTest {
|
|||
} finally {
|
||||
mNsdManager.stopServiceDiscovery(listener);
|
||||
}
|
||||
|
||||
assertThrows(
|
||||
TimeoutException.class,
|
||||
() -> discoverService(MESHCOP_SERVICE_TYPE, SERVICE_LOST_TIMEOUT_MILLIS));
|
||||
|
|
@ -1112,7 +1112,12 @@ public class ThreadNetworkControllerTest {
|
|||
serviceInfoFuture.complete(serviceInfo);
|
||||
}
|
||||
};
|
||||
mNsdManager.discoverServices(serviceType, NsdManager.PROTOCOL_DNS_SD, listener);
|
||||
mNsdManager.discoverServices(
|
||||
serviceType,
|
||||
NsdManager.PROTOCOL_DNS_SD,
|
||||
mTestNetworkTracker.getNetwork(),
|
||||
mExecutor,
|
||||
listener);
|
||||
try {
|
||||
serviceInfoFuture.get(timeoutMilliseconds, MILLISECONDS);
|
||||
} finally {
|
||||
|
|
@ -1131,7 +1136,12 @@ public class ThreadNetworkControllerTest {
|
|||
serviceInfoFuture.complete(serviceInfo);
|
||||
}
|
||||
};
|
||||
mNsdManager.discoverServices(serviceType, NsdManager.PROTOCOL_DNS_SD, listener);
|
||||
mNsdManager.discoverServices(
|
||||
serviceType,
|
||||
NsdManager.PROTOCOL_DNS_SD,
|
||||
mTestNetworkTracker.getNetwork(),
|
||||
mExecutor,
|
||||
listener);
|
||||
return listener;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ public final class TapTestNetworkTracker {
|
|||
private final Looper mLooper;
|
||||
private TestNetworkInterface mInterface;
|
||||
private TestableNetworkAgent mAgent;
|
||||
private Network mNetwork;
|
||||
private final TestableNetworkCallback mNetworkCallback;
|
||||
private final ConnectivityManager mConnectivityManager;
|
||||
|
||||
|
|
@ -91,6 +92,11 @@ public final class TapTestNetworkTracker {
|
|||
return mInterface.getInterfaceName();
|
||||
}
|
||||
|
||||
/** Returns the {@link android.net.Network} of the test network. */
|
||||
public Network getNetwork() {
|
||||
return mNetwork;
|
||||
}
|
||||
|
||||
private void setUpTestNetwork() throws Exception {
|
||||
mInterface = mContext.getSystemService(TestNetworkManager.class).createTapInterface();
|
||||
|
||||
|
|
@ -105,13 +111,13 @@ public final class TapTestNetworkTracker {
|
|||
newNetworkCapabilities(),
|
||||
lp,
|
||||
new NetworkAgentConfig.Builder().build());
|
||||
final Network network = mAgent.register();
|
||||
mNetwork = mAgent.register();
|
||||
mAgent.markConnected();
|
||||
|
||||
PollingCheck.check(
|
||||
"No usable address on interface",
|
||||
TIMEOUT.toMillis(),
|
||||
() -> hasUsableAddress(network, getInterfaceName()));
|
||||
() -> hasUsableAddress(mNetwork, getInterfaceName()));
|
||||
|
||||
lp.setLinkAddresses(makeLinkAddresses());
|
||||
mAgent.sendLinkProperties(lp);
|
||||
|
|
|
|||
Loading…
Reference in a new issue