[Thread] leverage the TestableNetworkAgent to simplify the setup of test network
Some previous setup steps were implemented in NsdManager test cases hence we couldn't reuse them in Thread test cases. aosp/3377549 introduced more methods in TestableNetworkAgent class which we could use to get unify the behavior and reduce redundant code. Not sure if this can deflake the integration test cases. Bug: 338061061 Change-Id: I6b4542505ec80bf06b736fecbbe7d6901d27cbc4
This commit is contained in:
parent
f04de0efc1
commit
ff509d40ae
1 changed files with 6 additions and 71 deletions
|
|
@ -100,27 +100,17 @@ public final class TapTestNetworkTracker {
|
|||
private void setUpTestNetwork() throws Exception {
|
||||
mInterface = mContext.getSystemService(TestNetworkManager.class).createTapInterface();
|
||||
|
||||
mConnectivityManager.requestNetwork(newNetworkRequest(), mNetworkCallback);
|
||||
mConnectivityManager.requestNetwork(
|
||||
TestableNetworkAgent.Companion.makeNetworkRequestForInterface(
|
||||
mInterface.getInterfaceName()),
|
||||
mNetworkCallback);
|
||||
|
||||
LinkProperties lp = new LinkProperties();
|
||||
lp.setInterfaceName(getInterfaceName());
|
||||
mAgent =
|
||||
new TestableNetworkAgent(
|
||||
mContext,
|
||||
mLooper,
|
||||
newNetworkCapabilities(),
|
||||
lp,
|
||||
new NetworkAgentConfig.Builder().build());
|
||||
mNetwork = mAgent.register();
|
||||
mAgent.markConnected();
|
||||
TestableNetworkAgent.Companion.createOnInterface(
|
||||
mContext, mLooper, mInterface.getInterfaceName(), TIMEOUT.toMillis());
|
||||
|
||||
PollingCheck.check(
|
||||
"No usable address on interface",
|
||||
TIMEOUT.toMillis(),
|
||||
() -> hasUsableAddress(mNetwork, getInterfaceName()));
|
||||
|
||||
lp.setLinkAddresses(makeLinkAddresses());
|
||||
mAgent.sendLinkProperties(lp);
|
||||
mNetworkCallback.eventuallyExpect(
|
||||
LINK_PROPERTIES_CHANGED,
|
||||
TIMEOUT.toMillis(),
|
||||
|
|
@ -133,59 +123,4 @@ public final class TapTestNetworkTracker {
|
|||
mInterface.getFileDescriptor().close();
|
||||
mAgent.waitForIdle(TIMEOUT.toMillis());
|
||||
}
|
||||
|
||||
private NetworkRequest newNetworkRequest() {
|
||||
return new NetworkRequest.Builder()
|
||||
.removeCapability(NET_CAPABILITY_TRUSTED)
|
||||
.addTransportType(TRANSPORT_TEST)
|
||||
.setNetworkSpecifier(new TestNetworkSpecifier(getInterfaceName()))
|
||||
.build();
|
||||
}
|
||||
|
||||
private NetworkCapabilities newNetworkCapabilities() {
|
||||
return new NetworkCapabilities()
|
||||
.removeCapability(NET_CAPABILITY_TRUSTED)
|
||||
.addTransportType(TRANSPORT_TEST)
|
||||
.setNetworkSpecifier(new TestNetworkSpecifier(getInterfaceName()));
|
||||
}
|
||||
|
||||
private List<LinkAddress> makeLinkAddresses() {
|
||||
List<LinkAddress> linkAddresses = new ArrayList<>();
|
||||
List<InterfaceAddress> interfaceAddresses = Collections.emptyList();
|
||||
|
||||
try {
|
||||
interfaceAddresses =
|
||||
NetworkInterface.getByName(getInterfaceName()).getInterfaceAddresses();
|
||||
} catch (SocketException ignored) {
|
||||
// Ignore failures when getting the addresses.
|
||||
}
|
||||
|
||||
for (InterfaceAddress address : interfaceAddresses) {
|
||||
linkAddresses.add(
|
||||
new LinkAddress(address.getAddress(), address.getNetworkPrefixLength()));
|
||||
}
|
||||
|
||||
return linkAddresses;
|
||||
}
|
||||
|
||||
private static boolean hasUsableAddress(Network network, String interfaceName) {
|
||||
try {
|
||||
if (NetworkInterface.getByName(interfaceName).getInterfaceAddresses().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
} catch (SocketException e) {
|
||||
return false;
|
||||
}
|
||||
// Check if the link-local address can be used. Address flags are not available without
|
||||
// elevated permissions, so check that bindSocket works.
|
||||
try {
|
||||
FileDescriptor sock = Os.socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
|
||||
network.bindSocket(sock);
|
||||
Os.connect(sock, parseNumericAddress("ff02::fb%" + interfaceName), 12345);
|
||||
Os.close(sock);
|
||||
} catch (ErrnoException | IOException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue