Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88c5fe5e authored by Cody Kesting's avatar Cody Kesting
Browse files

Request Test Networks for VCNs when in Test Mode.

This CL updates UnderlyingNetworkTracker to request Test
Networks for route selection  when the VCN it is tracking
for is in test-mode.

Bug: 182291467
Test: atest FrameworksVcnTests CtsVcnTestCases
Change-Id: Icb59b15df61ec43fe76e250977a985caa6a1dffc
parent 5f65a440
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -158,8 +158,15 @@ public class UnderlyingNetworkTracker {
     * carrier owned networks may be selected, as the request specifies only subIds in the VCN's
     * subscription group, while the VCN networks are excluded by virtue of not having subIds set on
     * the VCN-exposed networks.
     *
     * <p>If the VCN that this UnderlyingNetworkTracker belongs to is in test-mode, this will return
     * a NetworkRequest that only matches Test Networks.
     */
    private NetworkRequest getRouteSelectionRequest() {
        if (mVcnContext.isInTestMode()) {
            return getTestNetworkRequest(mLastSnapshot.getAllSubIdsInGroup(mSubscriptionGroup));
        }

        return getBaseNetworkRequestBuilder()
                .setSubscriptionIds(mLastSnapshot.getAllSubIdsInGroup(mSubscriptionGroup))
                .build();
@@ -210,6 +217,16 @@ public class UnderlyingNetworkTracker {
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED);
    }

    /** Builds and returns a NetworkRequest for the given subIds to match Test Networks. */
    private NetworkRequest getTestNetworkRequest(@NonNull Set<Integer> subIds) {
        return getBaseNetworkRequestBuilder()
                .addTransportType(NetworkCapabilities.TRANSPORT_TEST)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
                .setSubscriptionIds(subIds)
                .build();
    }

    /**
     * Update this UnderlyingNetworkTracker's TelephonySubscriptionSnapshot.
     *
+46 −3
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -119,7 +120,7 @@ public class UnderlyingNetworkTrackerTest {
                                mTestLooper.getLooper(),
                                mVcnNetworkProvider,
                                false /* isInTestMode */));
        doNothing().when(mVcnContext).ensureRunningOnLooperThread();
        resetVcnContext();

        setupSystemService(
                mContext,
@@ -138,6 +139,11 @@ public class UnderlyingNetworkTrackerTest {
                        mNetworkTrackerCb);
    }

    private void resetVcnContext() {
        reset(mVcnContext);
        doNothing().when(mVcnContext).ensureRunningOnLooperThread();
    }

    private static LinkProperties getLinkPropertiesWithName(String iface) {
        LinkProperties linkProperties = new LinkProperties();
        linkProperties.setInterfaceName(iface);
@@ -155,7 +161,29 @@ public class UnderlyingNetworkTrackerTest {
        verifyNetworkRequestsRegistered(INITIAL_SUB_IDS);
    }

    @Test
    public void testNetworkCallbacksRegisteredOnStartupForTestMode() {
        resetVcnContext();
        when(mVcnContext.isInTestMode()).thenReturn(true);
        reset(mConnectivityManager);

        mUnderlyingNetworkTracker =
                new UnderlyingNetworkTracker(
                        mVcnContext,
                        SUB_GROUP,
                        mSubscriptionSnapshot,
                        Collections.singleton(NetworkCapabilities.NET_CAPABILITY_INTERNET),
                        mNetworkTrackerCb);

        verifyNetworkRequestsRegistered(INITIAL_SUB_IDS, true /* expectTestMode */);
    }

    private void verifyNetworkRequestsRegistered(Set<Integer> expectedSubIds) {
        verifyNetworkRequestsRegistered(expectedSubIds, false /* expectTestMode */);
    }

    private void verifyNetworkRequestsRegistered(
            Set<Integer> expectedSubIds, boolean expectTestMode) {
        verify(mConnectivityManager)
                .requestBackgroundNetwork(
                        eq(getWifiRequest(expectedSubIds)),
@@ -168,10 +196,16 @@ public class UnderlyingNetworkTrackerTest {
                            any(NetworkBringupCallback.class), any());
        }

        final NetworkRequest expectedRouteSelectionRequest =
                expectTestMode
                        ? getTestNetworkRequest(expectedSubIds)
                        : getRouteSelectionRequest(expectedSubIds);

        verify(mConnectivityManager)
                .requestBackgroundNetwork(
                        eq(getRouteSelectionRequest(expectedSubIds)),
                        any(RouteSelectionCallback.class), any());
                        eq(expectedRouteSelectionRequest),
                        any(RouteSelectionCallback.class),
                        any());
    }

    @Test
@@ -210,6 +244,15 @@ public class UnderlyingNetworkTrackerTest {
        return getExpectedRequestBase().setSubscriptionIds(netCapsSubIds).build();
    }

    private NetworkRequest getTestNetworkRequest(Set<Integer> netCapsSubIds) {
        return getExpectedRequestBase()
                .addTransportType(NetworkCapabilities.TRANSPORT_TEST)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
                .setSubscriptionIds(netCapsSubIds)
                .build();
    }

    private NetworkRequest.Builder getExpectedRequestBase() {
        final NetworkRequest.Builder builder =
                new NetworkRequest.Builder()