diff options
author | Benedict Wong <benedictwong@google.com> | 2021-03-31 11:00:37 -0700 |
---|---|---|
committer | Benedict Wong <benedictwong@google.com> | 2021-04-01 16:37:33 -0700 |
commit | f8db8d8c435a855f6e231b482743db6fe5acc249 (patch) | |
tree | 1712b543118a2197eb2a6c412b6cf30272e523fd /tests/vcn/java/com/android/server/VcnManagementServiceTest.java | |
parent | 8124f47d3f15af84f6b401c4bd66233ad077645d (diff) |
Prevent changes to immutable capabilities for carrier wifi
This change prevents carrier wifi from having changes to the RESTRICTED
network capability, which is an immutable capability.
Bug: 184101137
Test: atest FrameworksVcnTests
Change-Id: I802d36a754d961c9928a2e642e25f1b25b8be12d
Diffstat (limited to 'tests/vcn/java/com/android/server/VcnManagementServiceTest.java')
-rw-r--r-- | tests/vcn/java/com/android/server/VcnManagementServiceTest.java | 72 |
1 files changed, 67 insertions, 5 deletions
diff --git a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java index 4ad7136aabb2..4ffbf3147ee6 100644 --- a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java +++ b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java @@ -16,6 +16,8 @@ package com.android.server; +import static android.net.ConnectivityManager.NetworkCallback; +import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; @@ -55,8 +57,10 @@ import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.LinkProperties; +import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkCapabilities.Transport; +import android.net.NetworkRequest; import android.net.TelephonyNetworkSpecifier; import android.net.vcn.IVcnStatusCallback; import android.net.vcn.IVcnUnderlyingNetworkPolicyListener; @@ -258,6 +262,10 @@ public class VcnManagementServiceTest { verify(mConnMgr).registerNetworkProvider(any(VcnNetworkProvider.class)); verify(mSubscriptionTracker).register(); + verify(mConnMgr) + .registerNetworkCallback( + eq(new NetworkRequest.Builder().clearCapabilities().build()), + any(NetworkCallback.class)); } @Test @@ -706,10 +714,8 @@ public class VcnManagementServiceTest { .checkLocationPermission(eq(TEST_PACKAGE_NAME), any(), eq(TEST_UID), any()); } - private VcnUnderlyingNetworkPolicy startVcnAndGetPolicyForTransport( - int subId, ParcelUuid subGrp, boolean isVcnActive, int transport) { - setupSubscriptionAndStartVcn(subId, subGrp, isVcnActive); - + private NetworkCapabilities.Builder getNetworkCapabilitiesBuilderForTransport( + int subId, int transport) { final NetworkCapabilities.Builder ncBuilder = new NetworkCapabilities.Builder() .addCapability(NET_CAPABILITY_NOT_VCN_MANAGED) @@ -718,7 +724,16 @@ public class VcnManagementServiceTest { ncBuilder.setSubIds(Collections.singleton(subId)); } - return mVcnMgmtSvc.getUnderlyingNetworkPolicy(ncBuilder.build(), new LinkProperties()); + return ncBuilder; + } + + private VcnUnderlyingNetworkPolicy startVcnAndGetPolicyForTransport( + int subId, ParcelUuid subGrp, boolean isVcnActive, int transport) { + setupSubscriptionAndStartVcn(subId, subGrp, isVcnActive); + + return mVcnMgmtSvc.getUnderlyingNetworkPolicy( + getNetworkCapabilitiesBuilderForTransport(subId, transport).build(), + new LinkProperties()); } @Test @@ -780,6 +795,53 @@ public class VcnManagementServiceTest { true /* isRestricted */); } + private void setupTrackedCarrierWifiNetwork(NetworkCapabilities caps) { + mVcnMgmtSvc.systemReady(); + + final ArgumentCaptor<NetworkCallback> captor = + ArgumentCaptor.forClass(NetworkCallback.class); + verify(mConnMgr) + .registerNetworkCallback( + eq(new NetworkRequest.Builder().clearCapabilities().build()), + captor.capture()); + captor.getValue().onCapabilitiesChanged(new Network(0), caps); + } + + @Test + public void testGetUnderlyingNetworkPolicyVcnWifi_unrestrictingExistingNetworkRequiresRestart() + throws Exception { + final NetworkCapabilities existingNetworkCaps = + getNetworkCapabilitiesBuilderForTransport(TEST_SUBSCRIPTION_ID, TRANSPORT_WIFI) + .removeCapability(NET_CAPABILITY_NOT_RESTRICTED) + .build(); + setupTrackedCarrierWifiNetwork(existingNetworkCaps); + + // Trigger test without VCN instance alive; expect restart due to change of NOT_RESTRICTED + // immutable capability + final VcnUnderlyingNetworkPolicy policy = + mVcnMgmtSvc.getUnderlyingNetworkPolicy( + getNetworkCapabilitiesBuilderForTransport( + TEST_SUBSCRIPTION_ID, TRANSPORT_WIFI) + .build(), + new LinkProperties()); + assertTrue(policy.isTeardownRequested()); + } + + @Test + public void testGetUnderlyingNetworkPolicyVcnWifi_restrictingExistingNetworkRequiresRestart() + throws Exception { + final NetworkCapabilities existingNetworkCaps = + getNetworkCapabilitiesBuilderForTransport(TEST_SUBSCRIPTION_ID, TRANSPORT_WIFI) + .build(); + setupTrackedCarrierWifiNetwork(existingNetworkCaps); + + final VcnUnderlyingNetworkPolicy policy = + startVcnAndGetPolicyForTransport( + TEST_SUBSCRIPTION_ID, TEST_UUID_2, false /* isActive */, TRANSPORT_WIFI); + + assertTrue(policy.isTeardownRequested()); + } + @Test public void testGetUnderlyingNetworkPolicyNonVcnNetwork() throws Exception { setupSubscriptionAndStartVcn(TEST_SUBSCRIPTION_ID, TEST_UUID_1, true /* isActive */); |