diff options
| author | lucaslin <lucaslin@google.com> | 2021-09-09 16:21:45 +0800 |
|---|---|---|
| committer | lucaslin <lucaslin@google.com> | 2021-12-22 14:59:48 +0800 |
| commit | 624edc3246e91648ca6052f7ba56d876f757ed0c (patch) | |
| tree | b5b7f2d543d6176587bf56675204150c4e8ccebe /tests/unit/java/com/android/server/connectivity/VpnTest.java | |
| parent | 753929f458aca0bd7b6034b7cdfda11a0b615a8d (diff) | |
Add test for Vpn#prepare()
Add test for Vpn#prepare() to check if the SecurityException will
be thrown when the caller is not the SYSTEM_UID and doesn't have
CONTROL_VPN permission and its package doesn't match the oldPackage
or the newPackage.
Ignore-AOSP-First: It's a part of security patches.
Bug: 191276656
Test: atest FrameworksNetTests:VpnTest
Change-Id: Ibe0b245561b00442a6377fb849603f8b9026e9c4
Diffstat (limited to 'tests/unit/java/com/android/server/connectivity/VpnTest.java')
| -rw-r--r-- | tests/unit/java/com/android/server/connectivity/VpnTest.java | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/unit/java/com/android/server/connectivity/VpnTest.java b/tests/unit/java/com/android/server/connectivity/VpnTest.java index fd9aefa395..33c0868c17 100644 --- a/tests/unit/java/com/android/server/connectivity/VpnTest.java +++ b/tests/unit/java/com/android/server/connectivity/VpnTest.java @@ -17,6 +17,9 @@ package com.android.server.connectivity; import static android.Manifest.permission.BIND_VPN_SERVICE; +import static android.Manifest.permission.CONTROL_VPN; +import static android.content.pm.PackageManager.PERMISSION_DENIED; +import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.content.pm.UserInfo.FLAG_ADMIN; import static android.content.pm.UserInfo.FLAG_MANAGED_PROFILE; import static android.content.pm.UserInfo.FLAG_PRIMARY; @@ -26,6 +29,9 @@ import static android.net.INetd.IF_STATE_DOWN; import static android.net.INetd.IF_STATE_UP; import static android.os.UserHandle.PER_USER_RANGE; +import static com.android.modules.utils.build.SdkLevel.isAtLeastT; +import static com.android.testutils.MiscAsserts.assertThrows; + import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -259,6 +265,10 @@ public class VpnTest { IpSecManager.Status.OK, TEST_TUNNEL_RESOURCE_ID, TEST_IFACE_NAME); when(mIpSecService.createTunnelInterface(any(), any(), any(), any(), any())) .thenReturn(tunnelResp); + // The unit test should know what kind of permission it needs and set the permission by + // itself, so set the default value of Context#checkCallingOrSelfPermission to + // PERMISSION_DENIED. + doReturn(PERMISSION_DENIED).when(mContext).checkCallingOrSelfPermission(any()); } private <T> void mockService(Class<T> clazz, String name, T service) { @@ -511,6 +521,7 @@ public class VpnTest { @Test public void testLockdownRuleReversibility() throws Exception { + doReturn(PERMISSION_GRANTED).when(mContext).checkCallingOrSelfPermission(CONTROL_VPN); final Vpn vpn = createVpn(primaryUser.id); final UidRangeParcel[] entireUser = { new UidRangeParcel(PRI_USER_RANGE.getLower(), PRI_USER_RANGE.getUpper()) @@ -538,6 +549,27 @@ public class VpnTest { } @Test + public void testPrepare_throwSecurityExceptionWhenGivenPackageDoesNotBelongToTheCaller() + throws Exception { + assumeTrue(isAtLeastT()); + final Vpn vpn = createVpnAndSetupUidChecks(); + assertThrows(SecurityException.class, + () -> vpn.prepare("com.not.vpn.owner", null, VpnManager.TYPE_VPN_SERVICE)); + assertThrows(SecurityException.class, + () -> vpn.prepare(null, "com.not.vpn.owner", VpnManager.TYPE_VPN_SERVICE)); + assertThrows(SecurityException.class, + () -> vpn.prepare("com.not.vpn.owner1", "com.not.vpn.owner2", + VpnManager.TYPE_VPN_SERVICE)); + } + + @Test + public void testPrepare_bothOldPackageAndNewPackageAreNull() throws Exception { + final Vpn vpn = createVpnAndSetupUidChecks(); + assertTrue(vpn.prepare(null, null, VpnManager.TYPE_VPN_SERVICE)); + + } + + @Test public void testIsAlwaysOnPackageSupported() throws Exception { final Vpn vpn = createVpn(primaryUser.id); |
