Merge "Add a unit test for a bug in registerDefaultNetworkCallback." am: b8178678df am: eabf1851e8

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1796367

Change-Id: I659d9d2c079cb01081e7996e0ee4f081c81c9a9c
This commit is contained in:
Treehugger Robot
2021-08-17 02:00:48 +00:00
committed by Automerger Merge Worker

View File

@@ -7857,8 +7857,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);
@@ -8423,6 +8423,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);