summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrulhania <mrulhania@google.com>2023-12-07 14:02:53 -0800
committerManjeet Rulhania <mrulhania@google.com>2023-12-09 00:18:42 +0000
commit99fd29801f072fa41f548783ac958aea87a51679 (patch)
tree36b0e1c50fe553a8f345b343102af97b7c7ac695
parent3e5e75d9585c8c4d603cb3253d8225ae7f504a74 (diff)
downloadPermission-99fd29801f072fa41f548783ac958aea87a51679.tar.gz
Add permission listener tests for virtual devices
Tested the changes locally by overriding the flag locally, see: go/aconfig-override Bug: 306676648 Test: atest PermissionUpdateListenerTest --iterations 10 Change-Id: I8e2b1afb7f357dbce5b99181d482b313bfd4010d
-rw-r--r--tests/cts/permission/Android.bp1
-rw-r--r--tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml1
-rw-r--r--tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java126
3 files changed, 104 insertions, 24 deletions
diff --git a/tests/cts/permission/Android.bp b/tests/cts/permission/Android.bp
index 8849f41a7..9c07544a3 100644
--- a/tests/cts/permission/Android.bp
+++ b/tests/cts/permission/Android.bp
@@ -52,6 +52,7 @@ android_test {
"sts-device-util",
"platform-test-rules",
"CtsVirtualDeviceCommonLib",
+ "android.permission.flags-aconfig-java",
],
jni_libs: [
"libctspermission_jni",
diff --git a/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml b/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml
index ef4d82dfc..4b0c60bdb 100644
--- a/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml
+++ b/tests/cts/permission/AppThatAccessesCalendarContactsBodySensorCustomPermission/AndroidManifest.xml
@@ -34,6 +34,7 @@
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
+ <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.cts.appthatrequestcustompermission.TEST_PERMISSION" />
<application />
diff --git a/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java b/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java
index 05aa41d69..2c39f27d4 100644
--- a/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java
+++ b/tests/cts/permission/src/android/permission/cts/PermissionUpdateListenerTest.java
@@ -23,18 +23,26 @@ import static com.android.compatibility.common.util.SystemUtil.runWithShellPermi
import static com.google.common.truth.Truth.assertThat;
import android.companion.virtual.VirtualDeviceManager;
+import android.companion.virtual.VirtualDeviceParams;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.OnPermissionsChangedListener;
+import android.permission.flags.Flags;
import android.platform.test.annotations.AppModeFull;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
+import android.virtualdevice.cts.common.FakeAssociationRule;
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.compatibility.common.util.AdoptShellPermissionsRule;
import com.android.compatibility.common.util.SystemUtil;
import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -52,15 +60,28 @@ public class PermissionUpdateListenerTest {
+ "CtsAppThatRequestsCalendarContactsBodySensorCustomPermission.apk";
private static final String PACKAGE_NAME =
"android.permission.cts.appthatrequestcustompermission";
- private static final String PERMISSION_NAME = "android.permission.READ_CONTACTS";
+ private static final String PERMISSION_NAME = "android.permission.CAMERA";
private static final int TIMEOUT = 10000;
- private final Context mContext =
+ private final Context mDefaultContext =
InstrumentationRegistry.getInstrumentation().getContext();
- private final PackageManager mPackageManager = mContext.getPackageManager();
+ private final PackageManager mPackageManager = mDefaultContext.getPackageManager();
private int mTestAppUid;
+ private VirtualDeviceManager mVirtualDeviceManager;
+
+ @Rule
+ public FakeAssociationRule mFakeAssociationRule = new FakeAssociationRule();
+
+ @Rule
+ public AdoptShellPermissionsRule mAdoptShellPermissionsRule = new AdoptShellPermissionsRule(
+ InstrumentationRegistry.getInstrumentation().getUiAutomation(),
+ android.Manifest.permission.CREATE_VIRTUAL_DEVICE);
+
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
@Before
public void setup() throws PackageManager.NameNotFoundException, InterruptedException {
runShellCommandOrThrow("pm install " + APK);
@@ -69,6 +90,7 @@ public class PermissionUpdateListenerTest {
SystemUtil.waitForBroadcasts();
Thread.sleep(1000);
mTestAppUid = mPackageManager.getPackageUid(PACKAGE_NAME, 0);
+ mVirtualDeviceManager = mDefaultContext.getSystemService(VirtualDeviceManager.class);
}
@After
@@ -89,7 +111,7 @@ public class PermissionUpdateListenerTest {
runWithShellPermissionIdentity(() -> {
mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener);
mPackageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME,
- mContext.getUser());
+ mDefaultContext.getUser());
});
countDownLatch.await(TIMEOUT, TimeUnit.MILLISECONDS);
runWithShellPermissionIdentity(() -> {
@@ -100,61 +122,117 @@ public class PermissionUpdateListenerTest {
}
@Test
- public void testGrantPermissionNotifyListener() throws InterruptedException {
+ @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ public void testVirtualDeviceGrantPermissionNotifyListener() throws InterruptedException {
+ VirtualDeviceManager.VirtualDevice virtualDevice =
+ mVirtualDeviceManager.createVirtualDevice(
+ mFakeAssociationRule.getAssociationInfo().getId(),
+ new VirtualDeviceParams.Builder().build());
+ Context deviceContext = mDefaultContext.createDeviceContext(virtualDevice.getDeviceId());
+ testGrantPermissionNotifyListener(deviceContext, virtualDevice.getPersistentDeviceId());
+ }
+
+ @Test
+ public void testDefaultDeviceGrantPermissionNotifyListener() throws InterruptedException {
+ testGrantPermissionNotifyListener(
+ mDefaultContext, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
+ }
+
+ private void testGrantPermissionNotifyListener(
+ Context context, String expectedDeviceId) throws InterruptedException {
+ final PackageManager packageManager = context.getPackageManager();
TestOnPermissionsChangedListener permissionsChangedListener =
new TestOnPermissionsChangedListener(1);
runWithShellPermissionIdentity(() -> {
- mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener);
- mPackageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME,
- mContext.getUser());
+ packageManager.addOnPermissionsChangeListener(permissionsChangedListener);
+ packageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME,
+ mDefaultContext.getUser());
});
permissionsChangedListener.waitForPermissionChangedCallbacks();
runWithShellPermissionIdentity(() -> {
- mPackageManager.removeOnPermissionsChangeListener(permissionsChangedListener);
+ packageManager.removeOnPermissionsChangeListener(permissionsChangedListener);
});
String deviceId = permissionsChangedListener.getNotifiedDeviceId(mTestAppUid);
- assertThat(deviceId).isEqualTo(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
+ assertThat(deviceId).isEqualTo(expectedDeviceId);
}
@Test
- public void testRevokePermissionNotifyListener() throws InterruptedException {
+ public void testDefaultDeviceRevokePermissionNotifyListener() throws InterruptedException {
+ testRevokePermissionNotifyListener(
+ mDefaultContext, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
+ }
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ public void testVirtualDeviceRevokePermissionNotifyListener() throws InterruptedException {
+ VirtualDeviceManager.VirtualDevice virtualDevice =
+ mVirtualDeviceManager.createVirtualDevice(
+ mFakeAssociationRule.getAssociationInfo().getId(),
+ new VirtualDeviceParams.Builder().build());
+ Context deviceContext = mDefaultContext.createDeviceContext(virtualDevice.getDeviceId());
+ testRevokePermissionNotifyListener(
+ deviceContext, virtualDevice.getPersistentDeviceId());
+ }
+
+ private void testRevokePermissionNotifyListener(
+ Context context, String expectedDeviceId) throws InterruptedException {
+ final PackageManager packageManager = context.getPackageManager();
TestOnPermissionsChangedListener permissionsChangedListener =
new TestOnPermissionsChangedListener(1);
runWithShellPermissionIdentity(() -> {
- mPackageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME,
- mContext.getUser());
- mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener);
- mPackageManager.revokeRuntimePermission(PACKAGE_NAME, PERMISSION_NAME,
- mContext.getUser());
+ packageManager.grantRuntimePermission(PACKAGE_NAME, PERMISSION_NAME,
+ mDefaultContext.getUser());
+ packageManager.addOnPermissionsChangeListener(permissionsChangedListener);
+ packageManager.revokeRuntimePermission(PACKAGE_NAME, PERMISSION_NAME,
+ mDefaultContext.getUser());
});
permissionsChangedListener.waitForPermissionChangedCallbacks();
runWithShellPermissionIdentity(() -> {
- mPackageManager.removeOnPermissionsChangeListener(permissionsChangedListener);
+ packageManager.removeOnPermissionsChangeListener(permissionsChangedListener);
});
String deviceId = permissionsChangedListener.getNotifiedDeviceId(mTestAppUid);
- assertThat(deviceId).isEqualTo(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
+ assertThat(deviceId).isEqualTo(expectedDeviceId);
}
@Test
- public void testUpdatePermissionFlagsNotifyListener() throws InterruptedException {
+ public void testDefaultDeviceUpdatePermissionFlagsNotifyListener() throws InterruptedException {
+ testUpdatePermissionFlagsNotifyListener(
+ mDefaultContext, VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
+ }
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
+ public void testVirtualDeviceUpdatePermissionFlagsNotifyListener() throws InterruptedException {
+ VirtualDeviceManager.VirtualDevice virtualDevice =
+ mVirtualDeviceManager.createVirtualDevice(
+ mFakeAssociationRule.getAssociationInfo().getId(),
+ new VirtualDeviceParams.Builder().build());
+ Context deviceContext = mDefaultContext.createDeviceContext(virtualDevice.getDeviceId());
+ testUpdatePermissionFlagsNotifyListener(
+ deviceContext, virtualDevice.getPersistentDeviceId());
+ }
+
+ private void testUpdatePermissionFlagsNotifyListener(
+ Context context, String expectedDeviceId) throws InterruptedException {
TestOnPermissionsChangedListener permissionsChangedListener =
new TestOnPermissionsChangedListener(1);
+ final PackageManager packageManager = context.getPackageManager();
runWithShellPermissionIdentity(() -> {
- mPackageManager.addOnPermissionsChangeListener(permissionsChangedListener);
+ packageManager.addOnPermissionsChangeListener(permissionsChangedListener);
int flag = PackageManager.FLAG_PERMISSION_USER_SET;
- mPackageManager.updatePermissionFlags(PERMISSION_NAME, PACKAGE_NAME, flag, flag,
- mContext.getUser());
+ packageManager.updatePermissionFlags(PERMISSION_NAME, PACKAGE_NAME, flag, flag,
+ mDefaultContext.getUser());
});
permissionsChangedListener.waitForPermissionChangedCallbacks();
runWithShellPermissionIdentity(() -> {
- mPackageManager.removeOnPermissionsChangeListener(permissionsChangedListener);
+ packageManager.removeOnPermissionsChangeListener(permissionsChangedListener);
});
String deviceId = permissionsChangedListener.getNotifiedDeviceId(mTestAppUid);
- assertThat(deviceId).isEqualTo(VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT);
+ assertThat(deviceId).isEqualTo(expectedDeviceId);
}
private class TestOnPermissionsChangedListener