diff options
author | Ta-wei Yen <twyen@google.com> | 2017-01-17 19:11:14 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-01-17 19:11:14 +0000 |
commit | 79733da1e995680e27393c68755cf4e0762805cb (patch) | |
tree | 50f9bb04e247df1f72324fd2423ef2d7cdd21f74 /tests | |
parent | 70e57ed0a7bcb5192debf58729830ab8eaa6dee5 (diff) | |
parent | 687bef960a8309410ee1ba0da06a012914bef88e (diff) | |
download | ContactsProvider-79733da1e995680e27393c68755cf4e0762805cb.tar.gz |
Prevent LAST_MODIFIED from changing after deletion
am: 687bef960a
Change-Id: I4ca82707fccd6672f7b0f5f2fb8727da3df8b1fb
Diffstat (limited to 'tests')
3 files changed, 51 insertions, 12 deletions
diff --git a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java index 86dff66a..09241549 100644 --- a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java +++ b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java @@ -31,6 +31,7 @@ import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.provider.BaseColumns; import android.provider.CallLog; +import android.provider.CallLog.Calls; import android.provider.ContactsContract; import android.provider.ContactsContract.AggregationExceptions; import android.provider.ContactsContract.CommonDataKinds.Email; @@ -1355,16 +1356,21 @@ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase { } } - protected void assertLastModified(Uri uri) { - assertLastModified(uri, System.currentTimeMillis(), 1000); - } - - protected void assertLastModified(Uri uri, long time, long tolerance) { + protected void assertLastModified(Uri uri, long time) { Cursor c = mResolver.query(uri, null, null, null, null); c.moveToFirst(); int index = c.getColumnIndex(CallLog.Calls.LAST_MODIFIED); long timeStamp = c.getLong(index); - assertTrue(Math.abs(time - timeStamp) < tolerance); + assertEquals(timeStamp, time); + } + + protected void setTimeForTest(Long time) { + Uri uri = Calls.CONTENT_URI.buildUpon() + .appendQueryParameter(CallLogProvider.PARAM_KEY_QUERY_FOR_TESTING, "1") + .appendQueryParameter(CallLogProvider.PARAM_KEY_SET_TIME_FOR_TESTING, + time == null ? "null" : time.toString()) + .build(); + mResolver.query(uri, null, null, null, null); } /** * A contact in the database, and the attributes used to create it. Construct using diff --git a/tests/src/com/android/providers/contacts/CallLogProviderTest.java b/tests/src/com/android/providers/contacts/CallLogProviderTest.java index f492e736..8ee7a5be 100644 --- a/tests/src/com/android/providers/contacts/CallLogProviderTest.java +++ b/tests/src/com/android/providers/contacts/CallLogProviderTest.java @@ -85,16 +85,18 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { protected void tearDown() throws Exception { setUpWithVoicemailPermissions(); mResolver.delete(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null); + setTimeForTest(null); super.tearDown(); } public void testInsert_RegularCallRecord() { + setTimeForTest(1000L); ContentValues values = getDefaultCallValues(); Uri uri = mResolver.insert(Calls.CONTENT_URI, values); values.put(Calls.COUNTRY_ISO, "us"); assertStoredValues(uri, values); assertSelection(uri, values, Calls._ID, ContentUris.parseId(uri)); - assertLastModified(uri); + assertLastModified(uri, 1000); } private void setUpWithVoicemailPermissions() { @@ -105,6 +107,7 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { public void testInsert_VoicemailCallRecord() { setUpWithVoicemailPermissions(); + setTimeForTest(1000L); final ContentValues values = getDefaultCallValues(); values.put(Calls.TYPE, Calls.VOICEMAIL_TYPE); values.put(Calls.VOICEMAIL_URI, "content://foo/voicemail/2"); @@ -121,10 +124,11 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { Uri uri = mResolver.insert(Calls.CONTENT_URI_WITH_VOICEMAIL, values); assertStoredValues(uri, values); assertSelection(uri, values, Calls._ID, ContentUris.parseId(uri)); - assertLastModified(uri); + assertLastModified(uri, 1000); } public void testUpdate() { + setTimeForTest(1000L); Uri uri = insertCallRecord(); ContentValues values = new ContentValues(); values.put(Calls.TYPE, Calls.OUTGOING_TYPE); @@ -139,7 +143,7 @@ public class CallLogProviderTest extends BaseContactsProvider2Test { int count = mResolver.update(uri, values, null, null); assertEquals(1, count); assertStoredValues(uri, values); - assertLastModified(uri); + assertLastModified(uri, 1000); } public void testDelete() { diff --git a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java index b4c9e049..72667314 100644 --- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java +++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java @@ -20,8 +20,10 @@ import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; +import android.os.BatteryStats.Uid.Proc; import android.os.ParcelFileDescriptor; import android.os.Process; +import android.provider.CallLog; import android.provider.CallLog.Calls; import android.provider.VoicemailContract; import android.provider.VoicemailContract.Status; @@ -65,6 +67,7 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { protected void setUp() throws Exception { super.setUp(); setUpForOwnPermission(); + addProvider(CallLogProviderTestable.class, CallLog.AUTHORITY); } /** Returns the appropriate /voicemail URI. */ @@ -80,6 +83,7 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { } public void testInsert() throws Exception { + setTimeForTest(1000L); Uri uri = mResolver.insert(voicemailUri(), getTestVoicemailValues()); // We create on purpose a new set of ContentValues here, because the code above modifies // the copy it gets. @@ -87,7 +91,7 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { assertSelection(uri, getTestVoicemailValues(), Voicemails._ID, ContentUris.parseId(uri)); assertEquals(1, countFilesInTestDirectory()); - assertLastModified(uri); + assertLastModified(uri, 1000); } public void testInsertReadMessageIsNotNew() throws Exception { @@ -131,6 +135,7 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { } public void testUpdate() { + setTimeForTest(1000L); Uri uri = insertVoicemail(); ContentValues values = new ContentValues(); values.put(Voicemails.NUMBER, "1-800-263-7643"); @@ -145,7 +150,7 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { int count = mResolver.update(uri, values, null, null); assertEquals(1, count); assertStoredValues(uri, values); - assertLastModified(uri); + assertLastModified(uri, 1000); } public void testUpdateOwnPackageVoicemail_NotDirty() { @@ -182,6 +187,7 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { public void testDeleteOtherPackageVoicemail_SetsDirtyStatus() { setUpForFullPermission(); + setTimeForTest(1000L); final Uri anotherVoicemail = insertVoicemailForSourcePackage("another-package"); assertEquals(1, getCount(voicemailUri(), null, null)); @@ -195,7 +201,7 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { assertEquals(1, getCount(anotherVoicemail, null, null)); assertStoredValues(anotherVoicemail, values); - assertLastModified(anotherVoicemail); + assertLastModified(anotherVoicemail, 1000); } public void testDelete() { @@ -206,6 +212,29 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { assertEquals(0, getCount(uri, null, null)); } + public void testUpdateAfterDelete_lastModifiedNotChanged() { + setUpForFullPermission(); + setTimeForTest(1000L); + final Uri anotherVoicemail = insertVoicemailForSourcePackage("another-package"); + assertEquals(1, getCount(voicemailUri(), null, null)); + + // Clear the mapping for our own UID so that this doesn't look like an internal transaction. + mPackageManager.removePackage(Process.myUid()); + mResolver.delete(anotherVoicemail, null, null); + assertLastModified(anotherVoicemail, 1000); + + mPackageManager.addPackage(Process.myUid(), mActor.packageName); + setTimeForTest(2000L); + mResolver.update(anotherVoicemail, new ContentValues(), null, null); + assertLastModified(anotherVoicemail, 1000); + + setTimeForTest(3000L); + ContentValues values = new ContentValues(); + values.put(Voicemails.DELETED, "0"); + mResolver.update(anotherVoicemail, values, null, null); + assertLastModified(anotherVoicemail, 3000); + } + public void testGetType_ItemUri() throws Exception { // Random item uri. assertEquals(Voicemails.ITEM_TYPE, |