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();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsActiveNetworkMeteredOverVpnSpecifyingUnderlyingNetworks() throws Exception {
|
||||
@Test
|
||||
public void testIsActiveNetworkMeteredOverVpnSpecifyingUnderlyingNetworks() throws Exception {
|
||||
// Returns true by default when no network is available.
|
||||
assertTrue(mCm.isActiveNetworkMetered());
|
||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||
@@ -8305,6 +8305,52 @@ public class ConnectivityServiceTest {
|
||||
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() {
|
||||
final String profileName = "testVpnProfile";
|
||||
final byte[] profileTag = profileName.getBytes(StandardCharsets.UTF_8);
|
||||
|
||||
Reference in New Issue
Block a user