diff --git a/tests/unit/java/com/android/server/connectivity/VpnTest.java b/tests/unit/java/com/android/server/connectivity/VpnTest.java index 5c1992d9d0..03f2589c73 100644 --- a/tests/unit/java/com/android/server/connectivity/VpnTest.java +++ b/tests/unit/java/com/android/server/connectivity/VpnTest.java @@ -969,6 +969,31 @@ public class VpnTest extends VpnTestBase { AppOpsManager.OPSTR_ACTIVATE_PLATFORM_VPN, AppOpsManager.OPSTR_ACTIVATE_VPN); } + private void setAppOpsPermission() { + doAnswer(invocation -> { + when(mAppOps.noteOpNoThrow(AppOpsManager.OPSTR_ACTIVATE_PLATFORM_VPN, + Process.myUid(), TEST_VPN_PKG, + null /* attributionTag */, null /* message */)) + .thenReturn(AppOpsManager.MODE_ALLOWED); + return null; + }).when(mAppOps).setMode( + eq(AppOpsManager.OPSTR_ACTIVATE_PLATFORM_VPN), + eq(Process.myUid()), + eq(TEST_VPN_PKG), + eq(AppOpsManager.MODE_ALLOWED)); + } + + @Test + public void testProvisionVpnProfileNotPreconsented_withControlVpnPermission() throws Exception { + setAppOpsPermission(); + doReturn(PERMISSION_GRANTED).when(mContext).checkCallingOrSelfPermission(CONTROL_VPN); + final Vpn vpn = createVpnAndSetupUidChecks(); + + // ACTIVATE_PLATFORM_VPN will be granted if VPN app has CONTROL_VPN permission. + checkProvisionVpnProfile(vpn, true /* expectedResult */, + AppOpsManager.OPSTR_ACTIVATE_PLATFORM_VPN); + } + @Test public void testProvisionVpnProfileVpnServicePreconsented() throws Exception { final Vpn vpn = createVpnAndSetupUidChecks(AppOpsManager.OPSTR_ACTIVATE_VPN);