From ff509d40aed8cc8c30edd00496ae25ae275a9bc0 Mon Sep 17 00:00:00 2001 From: Handa Wang Date: Sun, 16 Mar 2025 20:10:09 -0700 Subject: [PATCH] [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 --- .../thread/utils/TapTestNetworkTracker.java | 77 ++----------------- 1 file changed, 6 insertions(+), 71 deletions(-) diff --git a/thread/tests/utils/src/android/net/thread/utils/TapTestNetworkTracker.java b/thread/tests/utils/src/android/net/thread/utils/TapTestNetworkTracker.java index b586a19ab7..9a1a05b7ca 100644 --- a/thread/tests/utils/src/android/net/thread/utils/TapTestNetworkTracker.java +++ b/thread/tests/utils/src/android/net/thread/utils/TapTestNetworkTracker.java @@ -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 makeLinkAddresses() { - List linkAddresses = new ArrayList<>(); - List 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; - } }