Merge "Add a unit test for a bug in registerDefaultNetworkCallback." am: b8178678df
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1796367 Change-Id: I409ec9838a208647604d8975135bb408ae54c575
This commit is contained in:
@@ -7739,8 +7739,8 @@ public class ConnectivityServiceTest {
|
|||||||
mMockVpn.disconnect();
|
mMockVpn.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsActiveNetworkMeteredOverVpnSpecifyingUnderlyingNetworks() throws Exception {
|
public void testIsActiveNetworkMeteredOverVpnSpecifyingUnderlyingNetworks() throws Exception {
|
||||||
// Returns true by default when no network is available.
|
// Returns true by default when no network is available.
|
||||||
assertTrue(mCm.isActiveNetworkMetered());
|
assertTrue(mCm.isActiveNetworkMetered());
|
||||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||||
@@ -8305,6 +8305,52 @@ public class ConnectivityServiceTest {
|
|||||||
mCm.unregisterNetworkCallback(vpnDefaultCallbackAsUid);
|
mCm.unregisterNetworkCallback(vpnDefaultCallbackAsUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testVpnExcludesOwnUid() throws Exception {
|
||||||
|
// required for registerDefaultNetworkCallbackForUid.
|
||||||
|
mServiceContext.setPermission(NETWORK_SETTINGS, PERMISSION_GRANTED);
|
||||||
|
|
||||||
|
// Connect Wi-Fi.
|
||||||
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
|
mWiFiNetworkAgent.connect(true /* validated */);
|
||||||
|
|
||||||
|
// Connect a VPN that excludes its UID from its UID ranges.
|
||||||
|
final LinkProperties lp = new LinkProperties();
|
||||||
|
lp.setInterfaceName(VPN_IFNAME);
|
||||||
|
final int myUid = Process.myUid();
|
||||||
|
final Set<UidRange> ranges = new ArraySet<>();
|
||||||
|
ranges.add(new UidRange(0, myUid - 1));
|
||||||
|
ranges.add(new UidRange(myUid + 1, UserHandle.PER_USER_RANGE - 1));
|
||||||
|
mMockVpn.setUnderlyingNetworks(new Network[]{mWiFiNetworkAgent.getNetwork()});
|
||||||
|
mMockVpn.establish(lp, myUid, ranges);
|
||||||
|
|
||||||
|
// Wait for validation before registering callbacks.
|
||||||
|
waitForIdle();
|
||||||
|
|
||||||
|
final int otherUid = myUid + 1;
|
||||||
|
final Handler h = new Handler(ConnectivityThread.getInstanceLooper());
|
||||||
|
final TestNetworkCallback otherUidCb = new TestNetworkCallback();
|
||||||
|
final TestNetworkCallback defaultCb = new TestNetworkCallback();
|
||||||
|
final TestNetworkCallback perUidCb = new TestNetworkCallback();
|
||||||
|
registerDefaultNetworkCallbackAsUid(otherUidCb, otherUid);
|
||||||
|
mCm.registerDefaultNetworkCallback(defaultCb, h);
|
||||||
|
doAsUid(Process.SYSTEM_UID,
|
||||||
|
() -> mCm.registerDefaultNetworkCallbackForUid(myUid, perUidCb, h));
|
||||||
|
|
||||||
|
otherUidCb.expectAvailableCallbacksValidated(mMockVpn);
|
||||||
|
// BUG (b/195265065): the default network for the VPN app is actually Wi-Fi, not the VPN.
|
||||||
|
defaultCb.expectAvailableCallbacksValidated(mMockVpn);
|
||||||
|
perUidCb.expectAvailableCallbacksValidated(mMockVpn);
|
||||||
|
// getActiveNetwork is not affected by this bug.
|
||||||
|
assertEquals(mMockVpn.getNetwork(), mCm.getActiveNetworkForUid(myUid + 1));
|
||||||
|
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||||
|
assertEquals(mWiFiNetworkAgent.getNetwork(), mCm.getActiveNetworkForUid(myUid));
|
||||||
|
|
||||||
|
doAsUid(otherUid, () -> mCm.unregisterNetworkCallback(otherUidCb));
|
||||||
|
mCm.unregisterNetworkCallback(defaultCb);
|
||||||
|
doAsUid(Process.SYSTEM_UID, () -> mCm.unregisterNetworkCallback(perUidCb));
|
||||||
|
}
|
||||||
|
|
||||||
private void setupLegacyLockdownVpn() {
|
private void setupLegacyLockdownVpn() {
|
||||||
final String profileName = "testVpnProfile";
|
final String profileName = "testVpnProfile";
|
||||||
final byte[] profileTag = profileName.getBytes(StandardCharsets.UTF_8);
|
final byte[] profileTag = profileName.getBytes(StandardCharsets.UTF_8);
|
||||||
|
|||||||
Reference in New Issue
Block a user