From 0d54d7992d10d28a4d216d097e22cf899d4bb6aa Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Tue, 22 Jun 2021 12:18:55 +0900 Subject: [PATCH] Fix ConnectivityManagerTest initialization on Q The test can't have TetheringManager as an argument to methods or a field, otherwise the test runner will crash when scanning the class for tests because TetheringManager did not exist in Q. Although testFactoryReset is already skipped on Q, the test runner would fail at initialization time, before starting the run. Use CtsTetheringUtils instead. This ensures that TetheringManager does not have method signatures or members that reference classes that do not exist on Q, so the test runner can scan the class successfully before starting the run. Bug: 188851796 Test: atest ConnectivityManagerTest on Q Change-Id: I87488d0f23628a1ef2d7af0242513fcc5401d598 --- .../tethering/mts/TetheringModuleTest.java | 4 +-- .../net/cts/ConnectivityManagerTest.java | 34 +++++-------------- .../net/cts/util/CtsTetheringUtils.java | 10 +++--- 3 files changed, 14 insertions(+), 34 deletions(-) diff --git a/Tethering/tests/mts/src/android/tethering/mts/TetheringModuleTest.java b/Tethering/tests/mts/src/android/tethering/mts/TetheringModuleTest.java index 07aab6378f..ef254ff7e3 100644 --- a/Tethering/tests/mts/src/android/tethering/mts/TetheringModuleTest.java +++ b/Tethering/tests/mts/src/android/tethering/mts/TetheringModuleTest.java @@ -22,7 +22,6 @@ import static android.Manifest.permission.READ_DEVICE_CONFIG; import static android.Manifest.permission.TETHER_PRIVILEGED; import static android.Manifest.permission.WRITE_SETTINGS; import static android.net.TetheringManager.TETHERING_WIFI; -import static android.net.cts.util.CtsTetheringUtils.isWifiTetheringSupported; import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; import static com.android.testutils.TestNetworkTrackerKt.initTestNetwork; @@ -102,8 +101,7 @@ public class TetheringModuleTest { TestNetworkTracker tnt = null; try { - tetherEventCallback.assumeTetheringSupported(); - assumeTrue(isWifiTetheringSupported(mContext, tetherEventCallback)); + tetherEventCallback.assumeWifiTetheringSupported(mContext); tetherEventCallback.expectNoTetheringActive(); final TetheringInterface tetheredIface = diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java index 3220565e84..a358a38101 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java @@ -55,16 +55,12 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVIT import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.TRANSPORT_TEST; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; -import static android.net.TetheringManager.TETHERING_WIFI; -import static android.net.TetheringManager.TetheringRequest; import static android.net.cts.util.CtsNetUtils.ConnectivityActionReceiver; import static android.net.cts.util.CtsNetUtils.HTTP_PORT; import static android.net.cts.util.CtsNetUtils.NETWORK_CALLBACK_ACTION; import static android.net.cts.util.CtsNetUtils.TEST_HOST; import static android.net.cts.util.CtsNetUtils.TestNetworkCallback; -import static android.net.cts.util.CtsTetheringUtils.StartTetheringCallback; import static android.net.cts.util.CtsTetheringUtils.TestTetheringEventCallback; -import static android.net.cts.util.CtsTetheringUtils.isWifiTetheringSupported; import static android.net.util.NetworkStackUtils.TEST_CAPTIVE_PORTAL_HTTPS_URL; import static android.net.util.NetworkStackUtils.TEST_CAPTIVE_PORTAL_HTTP_URL; import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_INPUT; @@ -133,9 +129,9 @@ import android.net.SocketKeepalive; import android.net.TelephonyNetworkSpecifier; import android.net.TestNetworkInterface; import android.net.TestNetworkManager; -import android.net.TetheringManager; import android.net.Uri; import android.net.cts.util.CtsNetUtils; +import android.net.cts.util.CtsTetheringUtils; import android.net.util.KeepaliveUtils; import android.net.wifi.WifiManager; import android.os.Binder; @@ -285,7 +281,6 @@ public class ConnectivityManagerTest { private final ArraySet mNetworkTypes = new ArraySet<>(); private UiAutomation mUiAutomation; private CtsNetUtils mCtsNetUtils; - private TetheringManager mTm; // Used for cleanup purposes. private final List> mVpnRequiredUidRanges = new ArrayList<>(); @@ -301,7 +296,6 @@ public class ConnectivityManagerTest { mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); mPackageManager = mContext.getPackageManager(); mCtsNetUtils = new CtsNetUtils(mContext); - mTm = mContext.getSystemService(TetheringManager.class); if (DevSdkIgnoreRuleKt.isDevSdkInRange(null /* minExclusive */, Build.VERSION_CODES.R /* maxInclusive */)) { @@ -2232,14 +2226,15 @@ public class ConnectivityManagerTest { ConnectivitySettingsManager.getNetworkAvoidBadWifi(mContext); final int curPrivateDnsMode = ConnectivitySettingsManager.getPrivateDnsMode(mContext); - final TestTetheringEventCallback tetherEventCallback = new TestTetheringEventCallback(); + TestTetheringEventCallback tetherEventCallback = null; + final CtsTetheringUtils tetherUtils = new CtsTetheringUtils(mContext); try { - mTm.registerTetheringEventCallback(c -> c.run() /* executor */, tetherEventCallback); + tetherEventCallback = tetherUtils.registerTetheringEventCallback(); // Adopt for NETWORK_SETTINGS permission. mUiAutomation.adoptShellPermissionIdentity(); // start tethering tetherEventCallback.assumeWifiTetheringSupported(mContext); - startWifiTethering(tetherEventCallback); + tetherUtils.startWifiTethering(tetherEventCallback); // Update setting to verify the behavior. mCm.setAirplaneMode(true); ConnectivitySettingsManager.setPrivateDnsMode(mContext, @@ -2260,8 +2255,10 @@ public class ConnectivityManagerTest { mCm.setAirplaneMode(false); ConnectivitySettingsManager.setNetworkAvoidBadWifi(mContext, curAvoidBadWifi); ConnectivitySettingsManager.setPrivateDnsMode(mContext, curPrivateDnsMode); - mTm.unregisterTetheringEventCallback(tetherEventCallback); - mTm.stopAllTethering(); + if (tetherEventCallback != null) { + tetherUtils.unregisterTetheringEventCallback(tetherEventCallback); + } + tetherUtils.stopAllTethering(); mUiAutomation.dropShellPermissionIdentity(); } } @@ -2308,19 +2305,6 @@ public class ConnectivityManagerTest { ConnectivitySettingsManager.getNetworkAvoidBadWifi(mContext)); } - private void startWifiTethering(final TestTetheringEventCallback callback) throws Exception { - if (!isWifiTetheringSupported(mContext, callback)) return; - - final List wifiRegexs = - callback.getTetheringInterfaceRegexps().getTetherableWifiRegexs(); - final StartTetheringCallback startTetheringCallback = new StartTetheringCallback(); - final TetheringRequest request = new TetheringRequest.Builder(TETHERING_WIFI) - .setShouldShowEntitlementUi(false).build(); - mTm.startTethering(request, c -> c.run() /* executor */, startTetheringCallback); - startTetheringCallback.verifyTetheringStarted(); - callback.expectTetheredInterfacesChanged(wifiRegexs, TETHERING_WIFI); - } - /** * Verify that per-app OEM network preference functions as expected for network preference TEST. * For specified apps, validate networks are prioritized in order: unmetered, TEST transport, diff --git a/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java b/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java index c220326145..8c5372d5ee 100644 --- a/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java +++ b/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java @@ -440,12 +440,6 @@ public final class CtsTetheringUtils { return callback.getTetheringInterfaceRegexps().getTetherableWifiRegexs(); } - public static boolean isWifiTetheringSupported(final Context ctx, - final TestTetheringEventCallback callback) throws Exception { - return !getWifiTetherableInterfaceRegexps(callback).isEmpty() - && isPortableHotspotSupported(ctx); - } - /* Returns if wifi supports hotspot. */ private static boolean isPortableHotspotSupported(final Context ctx) throws Exception { final PackageManager pm = ctx.getPackageManager(); @@ -522,4 +516,8 @@ public final class CtsTetheringUtils { callback.expectNoTetheringActive(); callback.expectOneOfOffloadStatusChanged(TETHER_HARDWARE_OFFLOAD_STOPPED); } + + public void stopAllTethering() { + mTm.stopAllTethering(); + } }