aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2017-03-03 16:46:14 -0800
committerMakoto Onuki <omakoto@google.com>2017-03-06 09:07:57 -0800
commitfcc2655b0fca7032fcde306660da303c85125218 (patch)
tree14b0eac80fb0e5eb6ceca5d0c0531bab4dda7cf4 /tests
parentb95db86983d47262f670ad11b83d6f254f17f229 (diff)
downloadContactsProvider-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')
-rw-r--r--tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java7
-rw-r--r--tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java64
-rw-r--r--tests/src/com/android/providers/contacts/ContactsActor.java2
-rw-r--r--tests/src/com/android/providers/contacts/ContactsMockPackageManager.java35
-rw-r--r--tests/src/com/android/providers/contacts/DirectoryTest.java10
-rw-r--r--tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java2
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.