From 859218c893e799c5c8adc689c3472d757196a9bc Mon Sep 17 00:00:00 2001 From: Chiachang Wang Date: Thu, 16 Sep 2021 14:38:52 +0800 Subject: [PATCH] Add test for CM#[add|remove]DefaultNetworkActiveListener Bug: 199753782 Test: atest FrameworksNetTests CtsNetTestCases Change-Id: I2520f7f5feef61502479767aa023e281d1335ee4 --- .../net/cts/ConnectivityManagerTest.java | 34 +++++++++++++++++++ .../android/net/ConnectivityManagerTest.java | 15 ++++++++ 2 files changed, 49 insertions(+) diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java index f5c43d688c..199244f263 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java @@ -75,6 +75,7 @@ import static com.android.compatibility.common.util.SystemUtil.runWithShellPermi import static com.android.modules.utils.build.SdkLevel.isAtLeastS; import static com.android.networkstack.apishim.ConstantsShim.BLOCKED_REASON_LOCKDOWN_VPN; import static com.android.networkstack.apishim.ConstantsShim.BLOCKED_REASON_NONE; +import static com.android.testutils.Cleanup.testAndCleanup; import static com.android.testutils.MiscAsserts.assertThrows; import static com.android.testutils.TestNetworkTrackerKt.initTestNetwork; import static com.android.testutils.TestPermissionUtil.runAsShell; @@ -236,6 +237,7 @@ public class ConnectivityManagerTest { private static final int MIN_KEEPALIVE_INTERVAL = 10; private static final int NETWORK_CALLBACK_TIMEOUT_MS = 30_000; + private static final int LISTEN_ACTIVITY_TIMEOUT_MS = 5_000; private static final int NO_CALLBACK_TIMEOUT_MS = 100; private static final int NUM_TRIES_MULTIPATH_PREF_CHECK = 20; private static final long INTERVAL_MULTIPATH_PREF_CHECK_MS = 500; @@ -278,6 +280,7 @@ public class ConnectivityManagerTest { private ConnectivityManagerShim mCmShim; private WifiManager mWifiManager; private PackageManager mPackageManager; + private TelephonyManager mTm; private final ArraySet mNetworkTypes = new ArraySet<>(); private UiAutomation mUiAutomation; private CtsNetUtils mCtsNetUtils; @@ -297,6 +300,7 @@ public class ConnectivityManagerTest { mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); mPackageManager = mContext.getPackageManager(); mCtsNetUtils = new CtsNetUtils(mContext); + mTm = mContext.getSystemService(TelephonyManager.class); if (DevSdkIgnoreRuleKt.isDevSdkInRange(null /* minExclusive */, Build.VERSION_CODES.R /* maxInclusive */)) { @@ -2793,6 +2797,36 @@ public class ConnectivityManagerTest { System.currentTimeMillis() + WIFI_CONNECT_TIMEOUT_MS); } + @AppModeFull(reason = "Need WiFi support to test the default active network") + @Test + public void testDefaultNetworkActiveListener() throws Exception { + final boolean supportWifi = mPackageManager.hasSystemFeature(FEATURE_WIFI); + final boolean supportTelephony = mPackageManager.hasSystemFeature(FEATURE_TELEPHONY); + assumeTrue("testDefaultNetworkActiveListener cannot execute" + + " unless device supports WiFi or telephony", (supportWifi || supportTelephony)); + + if (supportWifi) { + mCtsNetUtils.ensureWifiDisconnected(null /* wifiNetworkToCheck */); + } else { + mCtsNetUtils.disconnectFromCell(); + } + + final CompletableFuture future = new CompletableFuture<>(); + final ConnectivityManager.OnNetworkActiveListener listener = () -> future.complete(true); + mCm.addDefaultNetworkActiveListener(listener); + testAndCleanup(() -> { + // New default network connected will trigger a network activity notification. + if (supportWifi) { + mCtsNetUtils.ensureWifiConnected(); + } else { + mCtsNetUtils.connectToCell(); + } + assertTrue(future.get(LISTEN_ACTIVITY_TIMEOUT_MS, TimeUnit.MILLISECONDS)); + }, () -> { + mCm.removeDefaultNetworkActiveListener(listener); + }); + } + @AppModeFull(reason = "Cannot get WifiManager in instant app mode") @Test public void testMobileDataPreferredUids() throws Exception { diff --git a/tests/unit/java/android/net/ConnectivityManagerTest.java b/tests/unit/java/android/net/ConnectivityManagerTest.java index e7873af64b..0914492704 100644 --- a/tests/unit/java/android/net/ConnectivityManagerTest.java +++ b/tests/unit/java/android/net/ConnectivityManagerTest.java @@ -37,6 +37,8 @@ import static android.net.NetworkRequest.Type.REQUEST; import static android.net.NetworkRequest.Type.TRACK_DEFAULT; import static android.net.NetworkRequest.Type.TRACK_SYSTEM_DEFAULT; +import static com.android.testutils.MiscAsserts.assertThrows; + import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -313,6 +315,19 @@ public class ConnectivityManagerTest { manager.requestNetwork(request, callback); } + @Test + public void testDefaultNetworkActiveListener() throws Exception { + final ConnectivityManager manager = new ConnectivityManager(mCtx, mService); + final ConnectivityManager.OnNetworkActiveListener listener = + mock(ConnectivityManager.OnNetworkActiveListener.class); + assertThrows(IllegalArgumentException.class, + () -> manager.removeDefaultNetworkActiveListener(listener)); + manager.addDefaultNetworkActiveListener(listener); + verify(mService, times(1)).registerNetworkActivityListener(any()); + manager.removeDefaultNetworkActiveListener(listener); + verify(mService, times(1)).unregisterNetworkActivityListener(any()); + } + @Test public void testArgumentValidation() throws Exception { ConnectivityManager manager = new ConnectivityManager(mCtx, mService);