Merge "Add test for CM#[add|remove]DefaultNetworkActiveListener" am: 2086865010

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1827918

Change-Id: I2b1e5ed720d2ca97f740713ed3b24a119edc8f28
This commit is contained in:
Chiachang Wang
2021-09-30 12:16:40 +00:00
committed by Automerger Merge Worker
2 changed files with 49 additions and 0 deletions

View File

@@ -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<Integer> 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<Boolean> 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 {

View File

@@ -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);