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
This commit is contained in:
Cody Kesting
2021-05-07 16:58:34 -07:00
parent 5f65a440e2
commit 88c5fe5e60
2 changed files with 63 additions and 3 deletions

View File

@@ -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.
*

View File

@@ -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()