Add a registerSystemDefaultNetworkCallback method.
This method allows internal components to track the system default network. This differs from registerDefaultNetworkCallback because that method sends callbacks for the default network for the UID that called it. This may not be the system default network, for example, when a VPN is up and applies to the UID. Bug: 173331190 Test: new unit tests in ConnectivityServiceTest Test: new unit tests in ConnectivityManagerTest Test: new CTS tests in ConnectivityServiceTest Test: new CTS tests in HostsideVpnTests in other CL in this topic Change-Id: Id02748a2183f71b71ff2a53a580466b9dcecaa93
This commit is contained in:
@@ -3649,10 +3649,19 @@ public class ConnectivityServiceTest {
|
||||
|
||||
@Test
|
||||
public void testRegisterDefaultNetworkCallback() throws Exception {
|
||||
// NETWORK_SETTINGS is necessary to call registerSystemDefaultNetworkCallback.
|
||||
mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS,
|
||||
PERMISSION_GRANTED);
|
||||
|
||||
final TestNetworkCallback defaultNetworkCallback = new TestNetworkCallback();
|
||||
mCm.registerDefaultNetworkCallback(defaultNetworkCallback);
|
||||
defaultNetworkCallback.assertNoCallback();
|
||||
|
||||
final Handler handler = new Handler(ConnectivityThread.getInstanceLooper());
|
||||
final TestNetworkCallback systemDefaultCallback = new TestNetworkCallback();
|
||||
mCm.registerSystemDefaultNetworkCallback(systemDefaultCallback, handler);
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
|
||||
// Create a TRANSPORT_CELLULAR request to keep the mobile interface up
|
||||
// whenever Wi-Fi is up. Without this, the mobile network agent is
|
||||
// reaped before any other activity can take place.
|
||||
@@ -3667,27 +3676,35 @@ public class ConnectivityServiceTest {
|
||||
mCellNetworkAgent.connect(true);
|
||||
cellNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
defaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
systemDefaultCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
assertEquals(defaultNetworkCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
assertEquals(systemDefaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
// Bring up wifi and expect CALLBACK_AVAILABLE.
|
||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.connect(true);
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
defaultNetworkCallback.expectAvailableDoubleValidatedCallbacks(mWiFiNetworkAgent);
|
||||
systemDefaultCallback.expectAvailableDoubleValidatedCallbacks(mWiFiNetworkAgent);
|
||||
assertEquals(defaultNetworkCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
assertEquals(systemDefaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
// Bring down cell. Expect no default network callback, since it wasn't the default.
|
||||
mCellNetworkAgent.disconnect();
|
||||
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
||||
defaultNetworkCallback.assertNoCallback();
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
assertEquals(defaultNetworkCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
assertEquals(systemDefaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
// Bring up cell. Expect no default network callback, since it won't be the default.
|
||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||
mCellNetworkAgent.connect(true);
|
||||
cellNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
defaultNetworkCallback.assertNoCallback();
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
assertEquals(defaultNetworkCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
assertEquals(systemDefaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
// Bring down wifi. Expect the default network callback to notified of LOST wifi
|
||||
// followed by AVAILABLE cell.
|
||||
@@ -3695,19 +3712,25 @@ public class ConnectivityServiceTest {
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
defaultNetworkCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||
defaultNetworkCallback.expectAvailableCallbacksValidated(mCellNetworkAgent);
|
||||
systemDefaultCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||
systemDefaultCallback.expectAvailableCallbacksValidated(mCellNetworkAgent);
|
||||
mCellNetworkAgent.disconnect();
|
||||
cellNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
||||
defaultNetworkCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
||||
systemDefaultCallback.expectCallback(CallbackEntry.LOST, mCellNetworkAgent);
|
||||
waitForIdle();
|
||||
assertEquals(null, mCm.getActiveNetwork());
|
||||
|
||||
mMockVpn.establishForMyUid();
|
||||
assertUidRangesUpdatedForMyUid(true);
|
||||
defaultNetworkCallback.expectAvailableThenValidatedCallbacks(mMockVpn);
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
assertEquals(defaultNetworkCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
assertEquals(null, systemDefaultCallback.getLastAvailableNetwork());
|
||||
|
||||
mMockVpn.disconnect();
|
||||
defaultNetworkCallback.expectCallback(CallbackEntry.LOST, mMockVpn);
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
waitForIdle();
|
||||
assertEquals(null, mCm.getActiveNetwork());
|
||||
}
|
||||
@@ -6134,6 +6157,10 @@ public class ConnectivityServiceTest {
|
||||
|
||||
@Test
|
||||
public void testVpnNetworkActive() throws Exception {
|
||||
// NETWORK_SETTINGS is necessary to call registerSystemDefaultNetworkCallback.
|
||||
mServiceContext.setPermission(Manifest.permission.NETWORK_SETTINGS,
|
||||
PERMISSION_GRANTED);
|
||||
|
||||
final int uid = Process.myUid();
|
||||
|
||||
final TestNetworkCallback genericNetworkCallback = new TestNetworkCallback();
|
||||
@@ -6141,6 +6168,7 @@ public class ConnectivityServiceTest {
|
||||
final TestNetworkCallback wifiNetworkCallback = new TestNetworkCallback();
|
||||
final TestNetworkCallback vpnNetworkCallback = new TestNetworkCallback();
|
||||
final TestNetworkCallback defaultCallback = new TestNetworkCallback();
|
||||
final TestNetworkCallback systemDefaultCallback = new TestNetworkCallback();
|
||||
final NetworkRequest genericNotVpnRequest = new NetworkRequest.Builder().build();
|
||||
final NetworkRequest genericRequest = new NetworkRequest.Builder()
|
||||
.removeCapability(NET_CAPABILITY_NOT_VPN).build();
|
||||
@@ -6154,6 +6182,8 @@ public class ConnectivityServiceTest {
|
||||
mCm.registerNetworkCallback(wifiRequest, wifiNetworkCallback);
|
||||
mCm.registerNetworkCallback(vpnNetworkRequest, vpnNetworkCallback);
|
||||
mCm.registerDefaultNetworkCallback(defaultCallback);
|
||||
mCm.registerSystemDefaultNetworkCallback(systemDefaultCallback,
|
||||
new Handler(ConnectivityThread.getInstanceLooper()));
|
||||
defaultCallback.assertNoCallback();
|
||||
|
||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||
@@ -6163,6 +6193,7 @@ public class ConnectivityServiceTest {
|
||||
genericNotVpnNetworkCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||
wifiNetworkCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||
defaultCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||
systemDefaultCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||
vpnNetworkCallback.assertNoCallback();
|
||||
assertEquals(defaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
|
||||
@@ -6183,7 +6214,10 @@ public class ConnectivityServiceTest {
|
||||
wifiNetworkCallback.assertNoCallback();
|
||||
vpnNetworkCallback.expectAvailableThenValidatedCallbacks(mMockVpn);
|
||||
defaultCallback.expectAvailableThenValidatedCallbacks(mMockVpn);
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
assertEquals(defaultCallback.getLastAvailableNetwork(), mCm.getActiveNetwork());
|
||||
assertEquals(mWiFiNetworkAgent.getNetwork(),
|
||||
systemDefaultCallback.getLastAvailableNetwork());
|
||||
|
||||
ranges.clear();
|
||||
mMockVpn.setUids(ranges);
|
||||
@@ -6200,6 +6234,7 @@ public class ConnectivityServiceTest {
|
||||
// much, but that is the reason the test here has to check for an update to the
|
||||
// capabilities instead of the expected LOST then AVAILABLE.
|
||||
defaultCallback.expectCallback(CallbackEntry.NETWORK_CAPS_UPDATED, mMockVpn);
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
|
||||
ranges.add(new UidRange(uid, uid));
|
||||
mMockVpn.setUids(ranges);
|
||||
@@ -6211,6 +6246,7 @@ public class ConnectivityServiceTest {
|
||||
// TODO : Here like above, AVAILABLE would be correct, but because this can't actually
|
||||
// happen outside of the test, ConnectivityService does not rematch callbacks.
|
||||
defaultCallback.expectCallback(CallbackEntry.NETWORK_CAPS_UPDATED, mMockVpn);
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
|
||||
mWiFiNetworkAgent.disconnect();
|
||||
|
||||
@@ -6219,6 +6255,7 @@ public class ConnectivityServiceTest {
|
||||
wifiNetworkCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||
vpnNetworkCallback.assertNoCallback();
|
||||
defaultCallback.assertNoCallback();
|
||||
systemDefaultCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||
|
||||
mMockVpn.disconnect();
|
||||
|
||||
@@ -6227,12 +6264,14 @@ public class ConnectivityServiceTest {
|
||||
wifiNetworkCallback.assertNoCallback();
|
||||
vpnNetworkCallback.expectCallback(CallbackEntry.LOST, mMockVpn);
|
||||
defaultCallback.expectCallback(CallbackEntry.LOST, mMockVpn);
|
||||
systemDefaultCallback.assertNoCallback();
|
||||
assertEquals(null, mCm.getActiveNetwork());
|
||||
|
||||
mCm.unregisterNetworkCallback(genericNetworkCallback);
|
||||
mCm.unregisterNetworkCallback(wifiNetworkCallback);
|
||||
mCm.unregisterNetworkCallback(vpnNetworkCallback);
|
||||
mCm.unregisterNetworkCallback(defaultCallback);
|
||||
mCm.unregisterNetworkCallback(systemDefaultCallback);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user