summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/providers/contacts/VoicemailProviderTest.java')
-rw-r--r--tests/src/com/android/providers/contacts/VoicemailProviderTest.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
index 8fdbccf..451d1ac 100644
--- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
+++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
@@ -195,6 +195,20 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest {
insertVoicemailForSourcePackage("another-package");
}
});
+
+ setUpForNoPermission();
+ mUseSourceUri = false;
+ // With the READ_ALL_VOICEMAIL permission, we should now be able to read all voicemails
+ mActor.addPermissions(READ_ALL_VOICEMAIL_PERMISSION);
+ assertEquals(2, getCount(voicemailUri(), null, null));
+
+ // An insert for another package should still fail
+ EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
+ @Override
+ public void run() {
+ insertVoicemailForSourcePackage("another-package");
+ }
+ });
}
public void testPermissions_UpdateAndDelete() {
@@ -224,6 +238,25 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest {
mResolver.delete(anotherVoicemail, null, null);
}
});
+
+ // If we have the manage voicemail permission, we should be able to both update and delete
+ // voicemails from all packages
+ setUpForNoPermission();
+ mActor.addPermissions(MANAGE_VOICEMAIL_PERMISSION);
+ mResolver.update(anotherVoicemail, getTestVoicemailValues(), null, null);
+
+ // Now add the read voicemail permission temporarily to verify that the update actually
+ // worked
+ mActor.addPermissions(READ_ALL_VOICEMAIL_PERMISSION);
+ assertStoredValues(anotherVoicemail, getTestVoicemailValues());
+ mActor.removePermissions(READ_ALL_VOICEMAIL_PERMISSION);
+
+ mResolver.delete(anotherVoicemail, null, null);
+
+ // Now add the read voicemail permission temporarily to verify that the delete actually
+ // worked
+ mActor.addPermissions(READ_ALL_VOICEMAIL_PERMISSION);
+ assertEquals(0, getCount(anotherVoicemail, null, null));
}
private Uri withSourcePackageParam(Uri uri) {
@@ -250,6 +283,35 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest {
mActor.removeUriPermissions(uri1);
}
+ /*
+ * Checks that the READ_ALL_VOICEMAIL permission provides read access to a uri.
+ */
+ public void testUriPermissions_ReadAccess() {
+ setUpForFullPermission();
+ final Uri uri1 = insertVoicemail();
+ // Give away all permissions before querying. Access should be denied.
+ setUpForNoPermission();
+ mUseSourceUri = false;
+ checkHasNoAccessToUri(uri1);
+
+ mActor.addPermissions(READ_ALL_VOICEMAIL_PERMISSION);
+ checkHasReadAccessToUri(uri1);
+ }
+
+ /*
+ * Checks that the MANAGE_VOICEMAIL permission provides write access to a uri.
+ */
+ public void testUriPermissions_WriteAccess() {
+ setUpForFullPermission();
+ final Uri uri1 = insertVoicemail();
+ // Give away all permissions before querying. Access should be denied.
+ setUpForNoPermission();
+ checkHasNoAccessToUri(uri1);
+
+ mActor.addPermissions(MANAGE_VOICEMAIL_PERMISSION);
+ checkHasUpdateAndDeleteAccessToUri(uri1);
+ }
+
private void checkHasNoAccessToUri(final Uri uri) {
checkHasNoReadAccessToUri(uri);
checkHasNoWriteAccessToUri(uri);
@@ -298,6 +360,11 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest {
});
}
+ private void checkHasUpdateAndDeleteAccessToUri(final Uri uri) {
+ mResolver.update(uri, getTestVoicemailValues(), null, null);
+ mResolver.delete(uri, null, null);
+ }
+
private void checkHasNoWriteAccessToUri(final Uri uri) {
EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
@Override