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(