Add test for CSM#[get|set]MobileDataPreferredUids
Bug: 171872461 Test: atest ConnectivityManagerTest Change-Id: I43dfb049c271602526fa3e89ebb91219c7785a21
This commit is contained in:
@@ -197,6 +197,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.Executor;
|
||||
@@ -2519,4 +2520,75 @@ public class ConnectivityManagerTest {
|
||||
NetworkValidationTestUtil.setUrlExpirationDeviceConfig(
|
||||
System.currentTimeMillis() + WIFI_CONNECT_TIMEOUT_MS);
|
||||
}
|
||||
|
||||
@AppModeFull(reason = "Cannot get WifiManager in instant app mode")
|
||||
@Test
|
||||
public void testMobileDataPreferredUids() throws Exception {
|
||||
assumeTrue(TestUtils.shouldTestSApis());
|
||||
final boolean canRunTest = mPackageManager.hasSystemFeature(FEATURE_WIFI)
|
||||
&& mPackageManager.hasSystemFeature(FEATURE_TELEPHONY);
|
||||
assumeTrue("testMobileDataPreferredUidsWithCallback cannot execute"
|
||||
+ " unless device supports both WiFi and telephony", canRunTest);
|
||||
|
||||
final int uid = mPackageManager.getPackageUid(mContext.getPackageName(), 0 /* flag */);
|
||||
final Set<Integer> mobileDataPreferredUids =
|
||||
ConnectivitySettingsManager.getMobileDataPreferredUids(mContext);
|
||||
// CtsNetTestCases uid should not list in MOBILE_DATA_PREFERRED_UIDS setting because it just
|
||||
// installs to device. In case the uid is existed in setting mistakenly, try to remove the
|
||||
// uid and set correct uids to setting.
|
||||
mobileDataPreferredUids.remove(uid);
|
||||
ConnectivitySettingsManager.setMobileDataPreferredUids(mContext, mobileDataPreferredUids);
|
||||
|
||||
// For testing mobile data preferred uids feature, it needs both wifi and cell network.
|
||||
final Network wifiNetwork = mCtsNetUtils.ensureWifiConnected();
|
||||
final Network cellNetwork = mCtsNetUtils.connectToCell();
|
||||
final TestableNetworkCallback defaultTrackingCb = new TestableNetworkCallback();
|
||||
final TestableNetworkCallback systemDefaultCb = new TestableNetworkCallback();
|
||||
final Handler h = new Handler(Looper.getMainLooper());
|
||||
runWithShellPermissionIdentity(() -> mCm.registerSystemDefaultNetworkCallback(
|
||||
systemDefaultCb, h), NETWORK_SETTINGS);
|
||||
mCm.registerDefaultNetworkCallback(defaultTrackingCb);
|
||||
|
||||
try {
|
||||
// CtsNetTestCases uid is not listed in MOBILE_DATA_PREFERRED_UIDS setting, so the
|
||||
// per-app default network should be same as system default network.
|
||||
waitForAvailable(systemDefaultCb, wifiNetwork);
|
||||
defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS,
|
||||
entry -> wifiNetwork.equals(entry.getNetwork()));
|
||||
// Active network for CtsNetTestCases uid should be wifi now.
|
||||
assertEquals(wifiNetwork, mCm.getActiveNetwork());
|
||||
|
||||
// Add CtsNetTestCases uid to MOBILE_DATA_PREFERRED_UIDS setting, then available per-app
|
||||
// default network callback should be received with cell network.
|
||||
final Set<Integer> newMobileDataPreferredUids = new ArraySet<>(mobileDataPreferredUids);
|
||||
newMobileDataPreferredUids.add(uid);
|
||||
ConnectivitySettingsManager.setMobileDataPreferredUids(
|
||||
mContext, newMobileDataPreferredUids);
|
||||
defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS,
|
||||
entry -> cellNetwork.equals(entry.getNetwork()));
|
||||
// System default network doesn't change.
|
||||
systemDefaultCb.assertNoCallback();
|
||||
// Active network for CtsNetTestCases uid should change to cell, too.
|
||||
assertEquals(cellNetwork, mCm.getActiveNetwork());
|
||||
|
||||
// Remove CtsNetTestCases uid from MOBILE_DATA_PREFERRED_UIDS setting, then available
|
||||
// per-app default network callback should be received again with system default network
|
||||
newMobileDataPreferredUids.remove(uid);
|
||||
ConnectivitySettingsManager.setMobileDataPreferredUids(
|
||||
mContext, newMobileDataPreferredUids);
|
||||
defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS,
|
||||
entry -> wifiNetwork.equals(entry.getNetwork()));
|
||||
// System default network still doesn't change.
|
||||
systemDefaultCb.assertNoCallback();
|
||||
// Active network for CtsNetTestCases uid should change back to wifi.
|
||||
assertEquals(wifiNetwork, mCm.getActiveNetwork());
|
||||
} finally {
|
||||
mCm.unregisterNetworkCallback(systemDefaultCb);
|
||||
mCm.unregisterNetworkCallback(defaultTrackingCb);
|
||||
|
||||
// Restore setting.
|
||||
ConnectivitySettingsManager.setMobileDataPreferredUids(
|
||||
mContext, mobileDataPreferredUids);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user