Merge "[Thread] leverage the TestableNetworkAgent to simplify the setup of test network" into main am: ad3ca8bbb4 am: 1dae2d7998
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/3545746 Change-Id: Iffad7491b732b46b5fa4fcd865d84256766af936 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
1382190565
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