diff options
Diffstat (limited to 'tests/src')
4 files changed, 108 insertions, 21 deletions
diff --git a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java index 512455b..45af26c 100644 --- a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java +++ b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java @@ -79,6 +79,19 @@ import java.util.Set; */ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase { + static final String ADD_VOICEMAIL_PERMISSION = + "com.android.voicemail.permission.ADD_VOICEMAIL"; + /* + * Permission to allow querying voicemails + */ + static final String READ_ALL_VOICEMAIL_PERMISSION = + "com.android.voicemail.permission.READ_ALL_VOICEMAIL"; + /* + * Permission to allow deleting and updating voicemails + */ + static final String MANAGE_VOICEMAIL_PERMISSION = + "com.android.voicemail.permission.MANAGE_VOICEMAIL"; + protected static final String PACKAGE = "ContactsProvider2Test"; public static final String READ_ONLY_ACCOUNT_TYPE = SynchronousContactsProvider2.READ_ONLY_ACCOUNT_TYPE; diff --git a/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java b/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java index 5f02e3f..9373dc0 100644 --- a/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java +++ b/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java @@ -34,10 +34,6 @@ import java.util.List; * Base class for all tests that require interacting with the voicemail content provider. */ public class BaseVoicemailProviderTest extends BaseContactsProvider2Test { - private static final String READ_WRITE_ALL_PERMISSION = - "com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL"; - private static final String ADD_VOICEMAIL_PERMISSION = - "com.android.voicemail.permission.ADD_VOICEMAIL"; protected boolean mUseSourceUri = false; private File mTestDirectory; @@ -66,21 +62,23 @@ public class BaseVoicemailProviderTest extends BaseContactsProvider2Test { } protected void setUpForOwnPermission() { - // Give away full permission, in case it was granted previously. - mActor.removePermissions(READ_WRITE_ALL_PERMISSION); + mActor.removePermissions(READ_ALL_VOICEMAIL_PERMISSION); + mActor.removePermissions(MANAGE_VOICEMAIL_PERMISSION); mActor.addPermissions(ADD_VOICEMAIL_PERMISSION); mUseSourceUri = true; } protected void setUpForFullPermission() { mActor.addPermissions(ADD_VOICEMAIL_PERMISSION); - mActor.addPermissions(READ_WRITE_ALL_PERMISSION); + mActor.addPermissions(READ_ALL_VOICEMAIL_PERMISSION); + mActor.addPermissions(MANAGE_VOICEMAIL_PERMISSION); mUseSourceUri = false; } protected void setUpForNoPermission() { mActor.removePermissions(ADD_VOICEMAIL_PERMISSION); - mActor.removePermissions(READ_WRITE_ALL_PERMISSION); + mActor.removePermissions(READ_ALL_VOICEMAIL_PERMISSION); + mActor.removePermissions(MANAGE_VOICEMAIL_PERMISSION); mUseSourceUri = true; } diff --git a/tests/src/com/android/providers/contacts/CallLogProviderTest.java b/tests/src/com/android/providers/contacts/CallLogProviderTest.java index 072b572..2d11dc4 100644 --- a/tests/src/com/android/providers/contacts/CallLogProviderTest.java +++ b/tests/src/com/android/providers/contacts/CallLogProviderTest.java @@ -52,11 +52,6 @@ import java.util.List; */ @MediumTest public class CallLogProviderTest extends BaseContactsProvider2Test { - private static final String READ_WRITE_ALL_PERMISSION = - "com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL"; - private static final String ADD_VOICEMAIL_PERMISSION = - "com.android.voicemail.permission.ADD_VOICEMAIL"; - /** Fields specific to voicemail provider that should not be exposed by call_log*/ private static final String[] VOICEMAIL_PROVIDER_SPECIFIC_COLUMNS = new String[] { Voicemails._DATA, @@ -101,12 +96,8 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { private void setUpWithVoicemailPermissions() { mActor.addPermissions(ADD_VOICEMAIL_PERMISSION); - mActor.addPermissions(READ_WRITE_ALL_PERMISSION); - } - - private void setUpWithNoVoicemailPermissions() { - mActor.removePermissions(ADD_VOICEMAIL_PERMISSION); - mActor.removePermissions(READ_WRITE_ALL_PERMISSION); + mActor.addPermissions(READ_ALL_VOICEMAIL_PERMISSION); + mActor.addPermissions(MANAGE_VOICEMAIL_PERMISSION); } public void testInsert_VoicemailCallRecord() { @@ -349,7 +340,13 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { null, null); } }); - // Should now succeed with permissions granted. + + // Should succeed with manage permission granted + mActor.addPermissions(MANAGE_VOICEMAIL_PERMISSION); + mResolver.update(Calls.CONTENT_URI_WITH_VOICEMAIL, getDefaultCallValues(), null, null); + mActor.removePermissions(MANAGE_VOICEMAIL_PERMISSION); + + // Should also succeed with full permissions granted. setUpWithVoicemailPermissions(); mResolver.update(Calls.CONTENT_URI_WITH_VOICEMAIL, getDefaultCallValues(), null, null); } @@ -361,7 +358,13 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { mResolver.query(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null, null, null); } }); - // Should now succeed with permissions granted. + + // Should succeed with read_all permission granted + mActor.addPermissions(READ_ALL_VOICEMAIL_PERMISSION); + mResolver.query(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null, null, null); + mActor.removePermissions(READ_ALL_VOICEMAIL_PERMISSION); + + // Should also succeed with full permissions granted. setUpWithVoicemailPermissions(); mResolver.query(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null, null, null); } @@ -373,6 +376,12 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { mResolver.delete(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null); } }); + + // Should succeed with manage permission granted + mActor.addPermissions(MANAGE_VOICEMAIL_PERMISSION); + mResolver.delete(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null); + mActor.removePermissions(MANAGE_VOICEMAIL_PERMISSION); + // Should now succeed with permissions granted. setUpWithVoicemailPermissions(); mResolver.delete(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null); 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 |