summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kiran Ramachandra <kiranmr@google.com> 2024-02-22 16:39:22 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-02-22 16:39:22 +0000
commit4c26888a96c27d15c8a54fa1106e6af354b9fcef (patch)
tree2f892637146cd2c5f862490e4649dd7648f18842
parentc76f660ed9110386f26c04c0720f347966ddf928 (diff)
parentb8ea697c15499f4aa94bf0f56ddc261d5c2a5be0 (diff)
Merge "Rewrite of getAllPermissionStates API tests under DevicePermissionsTest class" into main
-rw-r--r--tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt274
-rw-r--r--tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt52
2 files changed, 233 insertions, 93 deletions
diff --git a/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt b/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
index 2efc6718e..b800d7e17 100644
--- a/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
+++ b/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
@@ -21,6 +21,7 @@ import android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
import android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_SERVICE
import android.app.Instrumentation
import android.companion.virtual.VirtualDeviceManager
+import android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
import android.companion.virtual.VirtualDeviceManager.VirtualDevice
import android.companion.virtual.VirtualDeviceParams
import android.content.Context
@@ -63,6 +64,7 @@ class DevicePermissionsTest {
private lateinit var virtualDevice: VirtualDevice
private lateinit var virtualDeviceContext: Context
+ private lateinit var persistentDeviceId: String
private lateinit var permissionManager: PermissionManager
@@ -75,7 +77,8 @@ class DevicePermissionsTest {
Manifest.permission.CREATE_VIRTUAL_DEVICE,
Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS,
- Manifest.permission.REVOKE_RUNTIME_PERMISSIONS
+ Manifest.permission.REVOKE_RUNTIME_PERMISSIONS,
+ Manifest.permission.GET_RUNTIME_PERMISSIONS
)
@Rule @JvmField val mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
@@ -92,6 +95,7 @@ class DevicePermissionsTest {
)
virtualDeviceContext = defaultDeviceContext.createDeviceContext(virtualDevice.deviceId)
permissionManager = virtualDeviceContext.getSystemService(PermissionManager::class.java)!!
+ persistentDeviceId = virtualDevice.persistentDeviceId!!
runShellCommandOrThrow("pm install -r $TEST_APK")
}
@@ -120,13 +124,9 @@ class DevicePermissionsTest {
@Test
fun testNonDeviceAwareRuntimePermissionGrantIsInherited() {
- grantPermissionAndAssertGranted(Manifest.permission.READ_CONTACTS, defaultDeviceContext)
+ grantPermissionAndAssertGranted(NON_DEVICE_AWARE_PERMISSION, defaultDeviceContext)
- assertPermission(
- Manifest.permission.READ_CONTACTS,
- PERMISSION_GRANTED,
- virtualDeviceContext
- )
+ assertPermission(NON_DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
}
@RequiresFlagsEnabled(
@@ -135,22 +135,18 @@ class DevicePermissionsTest {
)
@Test
fun testDeviceAwareRuntimePermissionIsRevoked() {
- grantPermissionAndAssertGranted(Manifest.permission.RECORD_AUDIO, virtualDeviceContext)
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
- revokePermissionAndAssertDenied(Manifest.permission.RECORD_AUDIO, virtualDeviceContext)
+ revokePermissionAndAssertDenied(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
}
@Test
fun testNonDeviceAwareRuntimePermissionIsRevokedForDefaultDevice() {
- grantPermissionAndAssertGranted(Manifest.permission.READ_CONTACTS, defaultDeviceContext)
- assertPermission(
- Manifest.permission.READ_CONTACTS,
- PERMISSION_GRANTED,
- virtualDeviceContext
- )
+ grantPermissionAndAssertGranted(NON_DEVICE_AWARE_PERMISSION, defaultDeviceContext)
+ assertPermission(NON_DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
// Revoke call from virtualDeviceContext should revoke for default device as well.
- revokePermissionAndAssertDenied(Manifest.permission.READ_CONTACTS, virtualDeviceContext)
- assertPermission(Manifest.permission.READ_CONTACTS, PERMISSION_DENIED, defaultDeviceContext)
+ revokePermissionAndAssertDenied(NON_DEVICE_AWARE_PERMISSION, virtualDeviceContext)
+ assertPermission(NON_DEVICE_AWARE_PERMISSION, PERMISSION_DENIED, defaultDeviceContext)
}
@Test
@@ -165,9 +161,9 @@ class DevicePermissionsTest {
@Test
fun testOneTimePermissionIsRevoked() {
- grantPermissionAndAssertGranted(Manifest.permission.RECORD_AUDIO, virtualDeviceContext)
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
virtualDeviceContext.packageManager.updatePermissionFlags(
- Manifest.permission.RECORD_AUDIO,
+ DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
FLAG_PERMISSION_ONE_TIME,
FLAG_PERMISSION_ONE_TIME,
@@ -182,11 +178,7 @@ class DevicePermissionsTest {
IMPORTANCE_FOREGROUND_SERVICE
)
eventually {
- assertPermission(
- Manifest.permission.RECORD_AUDIO,
- PERMISSION_DENIED,
- virtualDeviceContext
- )
+ assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_DENIED, virtualDeviceContext)
}
}
@@ -196,15 +188,11 @@ class DevicePermissionsTest {
)
@Test
fun testRevokeSelfPermissionOnKill() {
- grantPermissionAndAssertGranted(Manifest.permission.RECORD_AUDIO, virtualDeviceContext)
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
- revokeSelfPermission(Manifest.permission.RECORD_AUDIO, virtualDeviceContext)
+ revokeSelfPermission(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
eventually {
- assertPermission(
- Manifest.permission.RECORD_AUDIO,
- PERMISSION_DENIED,
- virtualDeviceContext
- )
+ assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_DENIED, virtualDeviceContext)
}
}
@@ -214,19 +202,19 @@ class DevicePermissionsTest {
)
@Test
fun testGrantAndRevokeDeviceAwarePermissionByPersistentDeviceId() {
- val deviceAwarePermission = Manifest.permission.RECORD_AUDIO
+ val deviceAwarePermission = DEVICE_AWARE_PERMISSION
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
deviceAwarePermission,
- virtualDevice.persistentDeviceId!!
+ persistentDeviceId
)
assertThat(
PermissionManager.checkPermission(
deviceAwarePermission,
TEST_PACKAGE_NAME,
- virtualDevice.persistentDeviceId!!,
+ persistentDeviceId,
virtualDeviceContext.userId
)
)
@@ -236,7 +224,7 @@ class DevicePermissionsTest {
PermissionManager.checkPermission(
deviceAwarePermission,
TEST_PACKAGE_NAME,
- VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT,
+ PERSISTENT_DEVICE_ID_DEFAULT,
defaultDeviceContext.userId
)
)
@@ -245,7 +233,7 @@ class DevicePermissionsTest {
permissionManager.revokeRuntimePermission(
TEST_PACKAGE_NAME,
deviceAwarePermission,
- virtualDevice.persistentDeviceId!!,
+ persistentDeviceId,
"test"
)
@@ -253,7 +241,7 @@ class DevicePermissionsTest {
PermissionManager.checkPermission(
deviceAwarePermission,
TEST_PACKAGE_NAME,
- virtualDevice.persistentDeviceId!!,
+ persistentDeviceId,
virtualDeviceContext.userId
)
)
@@ -266,7 +254,7 @@ class DevicePermissionsTest {
)
@Test
fun testUpdateAndGetPermissionFlagsByPersistentDeviceId() {
- val deviceAwarePermission = Manifest.permission.RECORD_AUDIO
+ val deviceAwarePermission = DEVICE_AWARE_PERMISSION
val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
val flag = FLAG_PERMISSION_USER_SET
@@ -274,7 +262,7 @@ class DevicePermissionsTest {
permissionManager.getPermissionFlags(
TEST_PACKAGE_NAME,
deviceAwarePermission,
- virtualDevice.persistentDeviceId!!
+ persistentDeviceId
)
)
.isEqualTo(0)
@@ -282,7 +270,7 @@ class DevicePermissionsTest {
permissionManager.updatePermissionFlags(
TEST_PACKAGE_NAME,
deviceAwarePermission,
- virtualDevice.persistentDeviceId!!,
+ persistentDeviceId,
flagMask,
flag
)
@@ -291,12 +279,213 @@ class DevicePermissionsTest {
permissionManager.getPermissionFlags(
TEST_PACKAGE_NAME,
deviceAwarePermission,
- virtualDevice.persistentDeviceId!!
+ persistentDeviceId
)
)
.isEqualTo(FLAG_PERMISSION_USER_SET)
}
+ @RequiresFlagsEnabled(
+ Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
+ Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
+ )
+ @Test
+ fun testAllPermissionStatesApiGrantForVirtualDevice() {
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)
+ .isEmpty()
+ )
+ .isTrue()
+
+ permissionManager.grantRuntimePermission(
+ TEST_PACKAGE_NAME,
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId
+ )
+
+ val permissionStateMap =
+ permissionManager.getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)
+ assertThat(permissionStateMap.size).isEqualTo(1)
+ assertThat(permissionStateMap[DEVICE_AWARE_PERMISSION]!!.isGranted).isTrue()
+ assertThat(permissionStateMap[DEVICE_AWARE_PERMISSION]!!.flags).isEqualTo(0)
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)
+ .contains(DEVICE_AWARE_PERMISSION)
+ )
+ .isFalse()
+
+ permissionManager.revokeRuntimePermission(
+ TEST_PACKAGE_NAME,
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
+ "test"
+ )
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)
+ .contains(DEVICE_AWARE_PERMISSION)
+ )
+ .isFalse()
+ }
+
+ @RequiresFlagsEnabled(
+ Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
+ Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
+ )
+ @Test
+ fun testAllPermissionStatesApiFlagsForVirtualDevice() {
+ val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
+ val flag = FLAG_PERMISSION_USER_SET
+
+ assertThat(permissionManager.getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId))
+ .isEmpty()
+
+ permissionManager.updatePermissionFlags(
+ TEST_PACKAGE_NAME,
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
+ flagMask,
+ flag
+ )
+
+ assertThat(
+ hasPermission(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)[
+ DEVICE_AWARE_PERMISSION]!!
+ .flags,
+ flag
+ )
+ )
+ .isTrue()
+
+ assertThat(
+ hasPermission(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)[
+ DEVICE_AWARE_PERMISSION]!!
+ .flags,
+ FLAG_PERMISSION_USER_FIXED
+ )
+ )
+ .isFalse()
+ }
+
+ @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ @Test
+ fun testAllPermissionStatesApiGrantForDefaultDevice() {
+ permissionManager.grantRuntimePermission(
+ TEST_PACKAGE_NAME,
+ DEVICE_AWARE_PERMISSION,
+ PERSISTENT_DEVICE_ID_DEFAULT
+ )
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
+ DEVICE_AWARE_PERMISSION]!!
+ .isGranted
+ )
+ .isTrue()
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)
+ .contains(DEVICE_AWARE_PERMISSION)
+ )
+ .isFalse()
+
+ permissionManager.revokeRuntimePermission(
+ TEST_PACKAGE_NAME,
+ DEVICE_AWARE_PERMISSION,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ "test"
+ )
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)
+ .contains(DEVICE_AWARE_PERMISSION)
+ )
+ .isFalse()
+ }
+
+ @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ @Test
+ fun testAllPermissionStatesApiFlagsForDefaultDevice() {
+ val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
+ val flag = FLAG_PERMISSION_USER_SET
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)
+ .contains(DEVICE_AWARE_PERMISSION)
+ )
+ .isFalse()
+
+ permissionManager.updatePermissionFlags(
+ TEST_PACKAGE_NAME,
+ DEVICE_AWARE_PERMISSION,
+ PERSISTENT_DEVICE_ID_DEFAULT,
+ flagMask,
+ flag
+ )
+
+ assertThat(
+ hasPermission(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
+ DEVICE_AWARE_PERMISSION]!!
+ .flags,
+ flag
+ )
+ )
+ .isTrue()
+
+ assertThat(
+ hasPermission(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
+ DEVICE_AWARE_PERMISSION]!!
+ .flags,
+ FLAG_PERMISSION_USER_FIXED
+ )
+ )
+ .isFalse()
+ }
+
+ @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ @Test
+ fun testAllPermissionStatesApiThatNonDeviceAwareRuntimePermissionGrantIsNotInherited() {
+ permissionManager.grantRuntimePermission(
+ TEST_PACKAGE_NAME,
+ NON_DEVICE_AWARE_PERMISSION,
+ PERSISTENT_DEVICE_ID_DEFAULT
+ )
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
+ NON_DEVICE_AWARE_PERMISSION]!!
+ .isGranted
+ )
+ .isTrue()
+
+ assertThat(
+ permissionManager
+ .getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)
+ .contains(NON_DEVICE_AWARE_PERMISSION)
+ )
+ .isFalse()
+ }
+
+ private fun hasPermission(permissionFlags: Int, permissionBit: Int): Boolean =
+ permissionFlags and permissionBit != 0
+
private fun revokeSelfPermission(permissionName: String, context: Context) {
val intent = Intent(PERMISSION_SELF_REVOKE_INTENT)
intent.setClassName(TEST_PACKAGE_NAME, PERMISSION_SELF_REVOKE_RECEIVER)
@@ -345,5 +534,8 @@ class DevicePermissionsTest {
"android.permission.cts.appthatrequestpermission.REVOKE_SELF_PERMISSION"
private const val PERMISSION_SELF_REVOKE_RECEIVER =
"android.permission.cts.appthatrequestpermission.RevokeSelfPermissionReceiver"
+
+ private const val DEVICE_AWARE_PERMISSION = Manifest.permission.RECORD_AUDIO
+ private const val NON_DEVICE_AWARE_PERMISSION = Manifest.permission.READ_CONTACTS
}
}
diff --git a/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt b/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt
index e97d9a9e6..c199c7660 100644
--- a/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt
+++ b/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/DeviceAwarePermissionGrantTest.kt
@@ -175,16 +175,6 @@ class DeviceAwarePermissionGrantTest {
mFakeVirtualDeviceRule.virtualDevice.deviceId,
expectPermissionGrantedOnRemoteDevice
)
-
- assertAppHasPermissionForDeviceUsingAllPermissionStatesApi(
- defaultDeviceContext,
- expectPermissionGrantedOnRemoteDevice
- )
-
- assertAppHasPermissionForDefaultDeviceUsingAllPermissionStatesApi(
- defaultDeviceContext,
- expectPermissionGrantedOnDefaultDevice
- )
}
private fun requestPermissionOnDevice(displayId: Int, targetDeviceId: Int) {
@@ -224,48 +214,6 @@ class DeviceAwarePermissionGrantTest {
}
}
- private fun assertAppHasPermissionForDeviceUsingAllPermissionStatesApi(
- context: Context,
- expectPermissionGranted: Boolean
- ) {
- val vdm = context.getSystemService(VirtualDeviceManager::class.java)!!
- val persistentDeviceIds = vdm.allPersistentDeviceIds
-
- if (persistentDeviceIds.isEmpty()) {
- Assert.assertEquals(expectPermissionGranted, false)
- } else {
- Assert.assertEquals(1, persistentDeviceIds.size)
- val permMap =
- PermissionUtils.getAllPermissionStates(
- context,
- APP_PACKAGE_NAME,
- persistentDeviceIds.toList()[0]
- )
- val grantedList =
- permMap.filter { it.key == Manifest.permission.CAMERA }.map { it.value.isGranted }
- if (grantedList.isNotEmpty()) {
- Assert.assertEquals(1, grantedList.size)
- Assert.assertEquals(expectPermissionGranted, grantedList[0])
- } else {
- Assert.assertFalse(expectPermissionGranted)
- }
- }
- }
-
- private fun assertAppHasPermissionForDefaultDeviceUsingAllPermissionStatesApi(
- context: Context,
- expectPermissionGranted: Boolean
- ) {
- val permMap =
- PermissionUtils.getAllPermissionStates(
- context,
- APP_PACKAGE_NAME,
- PERSISTENT_DEVICE_ID_DEFAULT
- )
- Assert.assertNotNull(permMap[Manifest.permission.CAMERA])
- Assert.assertEquals(expectPermissionGranted, permMap[Manifest.permission.CAMERA]?.isGranted)
- }
-
companion object {
const val APK_DIRECTORY = "/data/local/tmp/cts-permissionmultidevice"
const val APP_APK_PATH_STREAMING = "${APK_DIRECTORY}/CtsAccessRemoteDeviceCamera.apk"