diff options
author | Makoto Onuki <omakoto@google.com> | 2017-03-03 16:46:14 -0800 |
---|---|---|
committer | Makoto Onuki <omakoto@google.com> | 2017-03-06 09:07:57 -0800 |
commit | fcc2655b0fca7032fcde306660da303c85125218 (patch) | |
tree | 14b0eac80fb0e5eb6ceca5d0c0531bab4dda7cf4 /tests | |
parent | b95db86983d47262f670ad11b83d6f254f17f229 (diff) | |
download | ContactsProvider-fcc2655b0fca7032fcde306660da303c85125218.tar.gz |
Rescan all GAL providers when GAL provider packages have...
been added or removed at startup.
Bug 35388445
Test: adb shell am instrument -w com.android.providers.contacts.tests
Change-Id: Ifc8a9498151e5523e3657cd006e7831d68389f67
Diffstat (limited to 'tests')
6 files changed, 103 insertions, 17 deletions
diff --git a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java index 4d06c4b3..74642cb7 100644 --- a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java +++ b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java @@ -128,7 +128,8 @@ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase { protected void setUp() throws Exception { super.setUp(); - mActor = new ContactsActor(getContext(), PACKAGE_GREY, getProviderClass(), getAuthority()); + mActor = new ContactsActor( + getContext(), getContextPackageName(), getProviderClass(), getAuthority()); mResolver = mActor.resolver; if (mActor.provider instanceof SynchronousContactsProvider2) { getContactsProvider().wipeData(); @@ -143,6 +144,10 @@ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase { "android.permission.WRITE_SOCIAL_STREAM"); } + protected String getContextPackageName() { + return PACKAGE_GREY; + } + @Override protected void tearDown() throws Exception { mActor.shutdown(); diff --git a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java index 8ad5ca17..b15d01ae 100644 --- a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java +++ b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java @@ -16,6 +16,8 @@ package com.android.providers.contacts; +import static com.android.providers.contacts.ContactsActor.PACKAGE_GREY; + import android.accounts.Account; import android.content.ContentValues; import android.content.Context; @@ -120,6 +122,13 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { .getContext().getPackageManager(); } + @Override + protected String getContextPackageName() { + // In this test, we need to use the real package name, because that'll be recorded in the + // directory table, and if it's wrong, the tests would get confused. + return getContext().getPackageName(); + } + public void testIsDirectoryProvider() { ProviderInfo provider = new ProviderInfo(); @@ -172,7 +181,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL); - mDirectoryManager.scanAllPackages(); + assertEquals(3, mDirectoryManager.scanAllPackages(/* rescan=*/ false)); Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, /* order by=*/ Directory.DIRECTORY_AUTHORITY + "," + Directory.ACCOUNT_NAME + @@ -197,18 +206,51 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL); assertTrue(cursor.moveToPosition(3)); - assertDirectoryRow(cursor, "contactsTestPackage", "com.android.contacts", null, null, + assertDirectoryRow(cursor, getContext().getPackageName(), + "com.android.contacts", null, null, null, -1 /* =any */, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL); assertTrue(cursor.moveToPosition(4)); - assertDirectoryRow(cursor, "contactsTestPackage", "com.android.contacts", null, null, + assertDirectoryRow(cursor, getContext().getPackageName(), + "com.android.contacts", null, null, null, -1 /* =any */, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL); cursor.close(); } + public void testScanAllProviders_scanCondition() throws Exception { + testScanAllProviders(); + + // Nothing has changed, so no scanning. + assertEquals(0, mDirectoryManager.scanAllPackages(/* rescan=*/ false)); + + // rescan = true, so a full-scan should happen. + assertEquals(3, mDirectoryManager.scanAllPackages(/* rescan=*/ true)); + + // Change GAL packages, a scan should happen. + mPackageManager.setInstalledPackages( + Lists.newArrayList( + createProviderPackage("test.package2", "authority2"), + createPackage("test.packageX", "authorityX", false))); + assertEquals(1, mDirectoryManager.scanAllPackages(/* rescan=*/ false)); + + // Remove the non-GAL package, no scan should happen. + mPackageManager.setInstalledPackages( + Lists.newArrayList( + createProviderPackage("test.package2", "authority2"))); + assertEquals(0, mDirectoryManager.scanAllPackages(/* rescan=*/ false)); + + // Remove GAL package 2 and add 1, a scan should happen. + mPackageManager.setInstalledPackages( + Lists.newArrayList( + createProviderPackage("test.package1", "authority1"), + createPackage("test.packageX", "authorityX", false))); + assertEquals(2, mDirectoryManager.scanAllPackages(/* rescan=*/ false)); + + } + public void testPackageInstalled() throws Exception { mPackageManager.setInstalledPackages( Lists.newArrayList(createProviderPackage("test.package1", "authority1"), @@ -222,7 +264,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE, Directory.PHOTO_SUPPORT_FULL); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); // At this point the manager has discovered a single directory (plus two // standard ones). @@ -283,7 +325,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); // At this point the manager has discovered two custom directories. Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null); @@ -329,7 +371,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); // At this point the manager has discovered two custom directories. Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null); @@ -387,7 +429,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); // At this point the manager has discovered two custom directories. Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null); @@ -451,7 +493,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_ANY_ACCOUNT, Directory.SHORTCUT_SUPPORT_DATA_ITEMS_ONLY, Directory.PHOTO_SUPPORT_FULL_SIZE_ONLY); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); accounts = new Account[]{new Account("account-name1", "account-type1")}; mActor.setAccounts(accounts); @@ -481,7 +523,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE, Directory.PHOTO_SUPPORT_NONE); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); // Pretend to replace the package with a different provider inside MatrixCursor response2 = provider1.createResponseCursor(); @@ -515,7 +557,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE, Directory.PHOTO_SUPPORT_NONE); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); Cursor cursor = mResolver.query( Directory.CONTENT_URI, new String[] { Directory._ID }, null, null, null); @@ -555,7 +597,7 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE, Directory.PHOTO_SUPPORT_NONE); - mDirectoryManager.scanAllPackages(); + mDirectoryManager.scanAllPackages(/* rescan=*/ false); Cursor cursor = mResolver.query( Directory.CONTENT_URI, new String[] { Directory._ID }, null, null, null); diff --git a/tests/src/com/android/providers/contacts/ContactsActor.java b/tests/src/com/android/providers/contacts/ContactsActor.java index 8aa9b39d..11a13c27 100644 --- a/tests/src/com/android/providers/contacts/ContactsActor.java +++ b/tests/src/com/android/providers/contacts/ContactsActor.java @@ -458,7 +458,7 @@ public class ContactsActor { mGrantedPermissions = grantedPermissions; mGrantedUriPermissions = grantedUriPermissions; - mPackageManager = new ContactsMockPackageManager(); + mPackageManager = new ContactsMockPackageManager(overallContext); mPackageManager.addPackage(1000, PACKAGE_GREY); mPackageManager.addPackage(2000, PACKAGE_RED); mPackageManager.addPackage(3000, PACKAGE_GREEN); diff --git a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java index 1f3f52e3..9a8c98b0 100644 --- a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java +++ b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java @@ -20,6 +20,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.os.Binder; @@ -36,11 +37,15 @@ import java.util.List; * {@link Context#getPackageName()}. */ public class ContactsMockPackageManager extends MockPackageManager { + + private final Context mRealContext; + private final HashMap<Integer, String> mForward = new HashMap<Integer, String>(); private final HashMap<String, Integer> mReverse = new HashMap<String, Integer>(); private List<PackageInfo> mPackages; - public ContactsMockPackageManager() { + public ContactsMockPackageManager(Context realContext) { + mRealContext = realContext; } /** @@ -109,6 +114,34 @@ public class ContactsMockPackageManager extends MockPackageManager { @Override public Resources getResourcesForApplication(String appPackageName) { + if (mRealContext.getPackageName().equals(appPackageName)) { + return mRealContext.getResources(); + } return new ContactsMockResources(); } + + @Override + public List<ProviderInfo> queryContentProviders(String processName, int uid, int flags, + String metaDataKey) { + final List<ProviderInfo> ret = new ArrayList<>(); + final List<PackageInfo> packages = getInstalledPackages(flags); + if (packages == null) { + return ret; + } + for (PackageInfo pkg : packages) { + if (pkg.providers == null) { + continue; + } + for (ProviderInfo proi : pkg.providers) { + if (metaDataKey == null) { + ret.add(proi); + } else { + if (proi.metaData != null && proi.metaData.containsKey(metaDataKey)) { + ret.add(proi); + } + } + } + } + return ret; + } } diff --git a/tests/src/com/android/providers/contacts/DirectoryTest.java b/tests/src/com/android/providers/contacts/DirectoryTest.java index 99f05ce8..a832a95b 100644 --- a/tests/src/com/android/providers/contacts/DirectoryTest.java +++ b/tests/src/com/android/providers/contacts/DirectoryTest.java @@ -16,6 +16,8 @@ package com.android.providers.contacts; +import static com.android.providers.contacts.ContactsActor.PACKAGE_GREY; + import android.accounts.Account; import android.content.ContentUris; import android.content.ContentValues; @@ -43,12 +45,16 @@ import com.android.providers.contacts.testutil.RawContactUtil; @MediumTest public class DirectoryTest extends BaseContactsProvider2Test { + protected String getContextPackageName() { + return getContext().getPackageName(); + } + public void testDefaultDirectory() { ContentValues values = new ContentValues(); Uri defaultDirectoryUri = ContentUris.withAppendedId(Directory.CONTENT_URI, Directory.DEFAULT); - values.put(Directory.PACKAGE_NAME, "contactsTestPackage"); + values.put(Directory.PACKAGE_NAME, getContext().getPackageName()); values.put(Directory.DIRECTORY_AUTHORITY, ContactsContract.AUTHORITY); values.put(Directory.TYPE_RESOURCE_ID, R.string.default_directory); values.put(Directory.EXPORT_SUPPORT, Directory.EXPORT_SUPPORT_NONE); @@ -64,7 +70,7 @@ public class DirectoryTest extends BaseContactsProvider2Test { Uri defaultDirectoryUri = ContentUris.withAppendedId(Directory.CONTENT_URI, Directory.LOCAL_INVISIBLE); - values.put(Directory.PACKAGE_NAME, "contactsTestPackage"); + values.put(Directory.PACKAGE_NAME, getContext().getPackageName()); values.put(Directory.DIRECTORY_AUTHORITY, ContactsContract.AUTHORITY); values.put(Directory.TYPE_RESOURCE_ID, R.string.local_invisible_directory); values.put(Directory.EXPORT_SUPPORT, Directory.EXPORT_SUPPORT_NONE); diff --git a/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java b/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java index 6ed8711c..f674dd5b 100644 --- a/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java +++ b/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java @@ -217,7 +217,7 @@ public class SynchronousContactsProvider2 extends ContactsProvider2 { db.execSQL("replace into SQLITE_SEQUENCE (name,seq) values('contacts', 2009)"); db.execSQL("replace into SQLITE_SEQUENCE (name,seq) values('data', 777)"); - getContactDirectoryManagerForTest().scanAllPackages(); + getContactDirectoryManagerForTest().scanAllPackages(/* rescan= */ true); } // Flags to remember which transaction callback has been called for which mode. |