Add test for CSM#[get|set]MobileDataPreferredUids
Bug: 171872461 Test: atest ConnectivityManagerTest Original-Change: https://android-review.googlesource.com/1736504 Merged-In: I43dfb049c271602526fa3e89ebb91219c7785a21 Change-Id: I43dfb049c271602526fa3e89ebb91219c7785a21
This commit is contained in:
@@ -199,6 +199,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
@@ -2541,4 +2542,75 @@ public class ConnectivityManagerTest {
|
|||||||
NetworkValidationTestUtil.setUrlExpirationDeviceConfig(
|
NetworkValidationTestUtil.setUrlExpirationDeviceConfig(
|
||||||
System.currentTimeMillis() + WIFI_CONNECT_TIMEOUT_MS);
|
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