Add test for isDeviceOwnerApp
Add test to verify that QUERY_ALL_PACKAGES permission required for
calling isDeviceOwnerApp.
Bug: 185896465
Test: NA
Change-Id: I774ec2a09c965449e1690b48344eca2c798187fa
diff --git a/common/device-side/bedstead/testapp/manifests/EmptyTestApp2Manifest.xml b/common/device-side/bedstead/testapp/manifests/EmptyTestApp2Manifest.xml
index 778d8d0..e0c51af 100644
--- a/common/device-side/bedstead/testapp/manifests/EmptyTestApp2Manifest.xml
+++ b/common/device-side/bedstead/testapp/manifests/EmptyTestApp2Manifest.xml
@@ -42,5 +42,5 @@
</intent-filter>
</activity>
</application>
- <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28"/>
+ <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="32"/>
</manifest>
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
index cd421cf..4e3292a 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
@@ -18,6 +18,7 @@
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
+import static android.Manifest.permission.QUERY_ALL_PACKAGES;
import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME;
@@ -31,6 +32,8 @@
import static android.nfc.NfcAdapter.ACTION_NDEF_DISCOVERED;
import static android.nfc.NfcAdapter.EXTRA_NDEF_MESSAGES;
+import static com.android.queryable.queries.StringQuery.string;
+
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -50,6 +53,7 @@
import android.content.pm.PackageManager;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
+import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.UserHandle;
@@ -71,6 +75,9 @@
import com.android.bedstead.harrier.annotations.enterprise.EnsureHasNoDpc;
import com.android.bedstead.nene.TestApis;
import com.android.bedstead.nene.permissions.PermissionContext;
+import com.android.bedstead.testapp.TestApp;
+import com.android.bedstead.testapp.TestAppInstance;
+import com.android.bedstead.testapp.TestAppProvider;
import com.android.compatibility.common.util.SystemUtil;
import org.junit.ClassRule;
@@ -98,6 +105,7 @@
private static final UserManager sUserManager = sContext.getSystemService(UserManager.class);
private static final SharedPreferences sSharedPreferences =
sContext.getSharedPreferences("required-apps.txt", Context.MODE_PRIVATE);
+ private static final TestAppProvider sTestAppProvider = new TestAppProvider();
private static final ComponentName DEVICE_ADMIN_COMPONENT_NAME =
DeviceAdminApp.deviceAdminComponentName(sContext);
@@ -788,6 +796,34 @@
sDeviceState.deviceOwner().componentName());
}
+ @Test
+ public void isDeviceOwnerApp_versionGreaterThanEqual_S_V2_noPermission_throwsException() {
+ TestApp sTestApp = sTestAppProvider.query()
+ .wherePermissions().doesNotContain(
+ string().isEqualTo(QUERY_ALL_PACKAGES))
+ .whereTargetSdkVersion().isGreaterThanOrEqualTo(Build.VERSION_CODES.S_V2).get();
+ try (TestAppInstance testApp = sTestApp.install(
+ TestApis.users().instrumented())) {
+
+ assertThrows(SecurityException.class, () ->
+ testApp.devicePolicyManager().isDeviceOwnerApp(sContext.getPackageName()));
+ }
+ }
+
+ @Test
+ public void isDeviceOwnerApp_versionLessThan_S_V2_noPermission_noException() {
+ TestApp sTestApp = sTestAppProvider.query()
+ .wherePermissions().doesNotContain(
+ string().isEqualTo(QUERY_ALL_PACKAGES))
+ .whereTargetSdkVersion().isLessThan(Build.VERSION_CODES.S_V2).get();
+ try (TestAppInstance testApp = sTestApp.install(
+ TestApis.users().instrumented())) {
+
+ assertThat(testApp.devicePolicyManager().isDeviceOwnerApp(
+ sContext.getPackageName())).isFalse();
+ }
+ }
+
private static HashMap<String, String> createNfcIntentData() {
HashMap<String, String> nfcIntentInput = new HashMap<String, String>();
nfcIntentInput.putAll(