aboutsummaryrefslogtreecommitdiff
path: root/tests2
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2016-10-17 16:27:15 -0700
committerMakoto Onuki <omakoto@google.com>2016-10-17 16:57:16 -0700
commit355b24b56cc6cad20cf028c8339ce09045313407 (patch)
tree04fb775872fd4e1b63c20555f657c73d38df8af5 /tests2
parent633530760cb2110489598352ab831563e7b8f2cf (diff)
downloadContactsProvider-355b24b56cc6cad20cf028c8339ce09045313407.tar.gz
Follow-up to Ief2b93ce and more tests
Bug 31753890 Test: CTS, ./run-all-tests.sh cts-tradefed run cts-dev --skip-device-info --skip-preconditions \ --skip-system-status-check \ com.android.compatibility.common.tradefed.targetprep.NetworkConnectivityChecker \ -a armeabi-v7a -m CtsProviderTestCases Change-Id: I9f60647ac1d7214f82a2ea59ece5649e5bf26463
Diffstat (limited to 'tests2')
-rw-r--r--tests2/src/com/android/providers/contacts/tests2/AllUriTest.java (renamed from tests2/src/com/android/providers/contacts/tests2/AllUrlTest.java)212
1 files changed, 153 insertions, 59 deletions
diff --git a/tests2/src/com/android/providers/contacts/tests2/AllUrlTest.java b/tests2/src/com/android/providers/contacts/tests2/AllUriTest.java
index 920243ad..a38a4a63 100644
--- a/tests2/src/com/android/providers/contacts/tests2/AllUrlTest.java
+++ b/tests2/src/com/android/providers/contacts/tests2/AllUriTest.java
@@ -19,11 +19,14 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.CancellationSignal;
import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.RawContacts;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.util.Log;
+import junit.framework.AssertionFailedError;
+
import java.util.ArrayList;
/**
@@ -31,7 +34,7 @@ import java.util.ArrayList;
* TODO Copy it to CTS
*/
@LargeTest
-public class AllUrlTest extends AndroidTestCase {
+public class AllUriTest extends AndroidTestCase {
private static final String TAG = "AllUrlTest";
// "-" : Query not supported.
@@ -43,11 +46,13 @@ public class AllUrlTest extends AndroidTestCase {
// "i" : supports insert.
// "r" : supports read.
// "w" : supports write.
+ // "s" : has x_times_contacted and x_last_time_contacted.
+ // "t" : has x_times_used and x_last_time_used.
private static final String[][] URIs = {
- {"content://com.android.contacts/contacts"},
- {"content://com.android.contacts/contacts/1"},
- {"content://com.android.contacts/contacts/1/data"},
- {"content://com.android.contacts/contacts/1/entities"},
+ {"content://com.android.contacts/contacts", "s"},
+ {"content://com.android.contacts/contacts/1", "s"},
+ {"content://com.android.contacts/contacts/1/data", "t"},
+ {"content://com.android.contacts/contacts/1/entities", "t"},
{"content://com.android.contacts/contacts/1/suggestions"},
{"content://com.android.contacts/contacts/1/suggestions/XXX"},
{"content://com.android.contacts/contacts/1/photo"},
@@ -55,12 +60,12 @@ public class AllUrlTest extends AndroidTestCase {
{"content://com.android.contacts/contacts_corp/1/photo", "-rw"},
{"content://com.android.contacts/contacts_corp/1/display_photo", "-rw"},
{"content://com.android.contacts/contacts/1/stream_items"},
- {"content://com.android.contacts/contacts/filter"},
- {"content://com.android.contacts/contacts/filter/XXX"},
- {"content://com.android.contacts/contacts/lookup/nlookup"},
- {"content://com.android.contacts/contacts/lookup/nlookup/data"},
- {"content://com.android.contacts/contacts/lookup/nlookup/photo"},
- {"content://com.android.contacts/contacts/lookup/nlookup/1"},
+ {"content://com.android.contacts/contacts/filter", "s"},
+ {"content://com.android.contacts/contacts/filter/XXX", "s"},
+ {"content://com.android.contacts/contacts/lookup/nlookup", "s"},
+ {"content://com.android.contacts/contacts/lookup/nlookup/data", "t"},
+ {"content://com.android.contacts/contacts/lookup/nlookup/photo", "t"},
+ {"content://com.android.contacts/contacts/lookup/nlookup/1", "s"},
{"content://com.android.contacts/contacts/lookup/nlookup/1/data"},
{"content://com.android.contacts/contacts/lookup/nlookup/1/photo"},
{"content://com.android.contacts/contacts/lookup/nlookup/display_photo", "-rw"},
@@ -71,53 +76,54 @@ public class AllUrlTest extends AndroidTestCase {
{"content://com.android.contacts/contacts/lookup/nlookup/1/stream_items"},
{"content://com.android.contacts/contacts/as_vcard/nlookup"},
{"content://com.android.contacts/contacts/as_multi_vcard/XXX"},
- {"content://com.android.contacts/contacts/strequent/"},
- {"content://com.android.contacts/contacts/strequent/filter/XXX"},
+ {"content://com.android.contacts/contacts/strequent/", "s"},
+ {"content://com.android.contacts/contacts/strequent/filter/XXX", "s"},
{"content://com.android.contacts/contacts/group/XXX"},
- {"content://com.android.contacts/contacts/frequent"},
+ {"content://com.android.contacts/contacts/frequent", "s"},
{"content://com.android.contacts/contacts/delete_usage", "-d"},
- {"content://com.android.contacts/contacts/filter_enterprise?directory=0"},
- {"content://com.android.contacts/contacts/filter_enterprise/XXX?directory=0"},
- {"content://com.android.contacts/raw_contacts"},
- {"content://com.android.contacts/raw_contacts/1"},
- {"content://com.android.contacts/raw_contacts/1/data"},
+ {"content://com.android.contacts/contacts/filter_enterprise?directory=0", "s"},
+ {"content://com.android.contacts/contacts/filter_enterprise/XXX?directory=0", "s"},
+ {"content://com.android.contacts/raw_contacts", "s"},
+ {"content://com.android.contacts/raw_contacts/1", "s"},
+ {"content://com.android.contacts/raw_contacts/1/data", "t"},
{"content://com.android.contacts/raw_contacts/1/display_photo", "-rw"},
{"content://com.android.contacts/raw_contacts/1/entity"},
{"content://com.android.contacts/raw_contacts/1/stream_items"},
{"content://com.android.contacts/raw_contacts/1/stream_items/1"},
{"content://com.android.contacts/raw_contact_entities"},
{"content://com.android.contacts/raw_contact_entities_corp", "!"},
- {"content://com.android.contacts/data"},
- {"content://com.android.contacts/data/1"},
- {"content://com.android.contacts/data/phones"},
+ {"content://com.android.contacts/data", "t"},
+ {"content://com.android.contacts/data/1", "t"},
+ {"content://com.android.contacts/data/phones", "t"},
{"content://com.android.contacts/data_enterprise/phones", "!"},
- {"content://com.android.contacts/data/phones/1"},
- {"content://com.android.contacts/data/phones/filter"},
- {"content://com.android.contacts/data/phones/filter/XXX"},
- {"content://com.android.contacts/data/phones/filter_enterprise?directory=0"},
- {"content://com.android.contacts/data/phones/filter_enterprise/XXX?directory=0"},
- {"content://com.android.contacts/data/emails"},
- {"content://com.android.contacts/data/emails/1"},
- {"content://com.android.contacts/data/emails/lookup"},
- {"content://com.android.contacts/data/emails/lookup/XXX"},
- {"content://com.android.contacts/data/emails/filter"},
- {"content://com.android.contacts/data/emails/filter/XXX"},
- {"content://com.android.contacts/data/emails/filter_enterprise?directory=0"},
- {"content://com.android.contacts/data/emails/filter_enterprise/XXX?directory=0"},
- {"content://com.android.contacts/data/emails/lookup_enterprise"},
- {"content://com.android.contacts/data/emails/lookup_enterprise/XXX"},
- {"content://com.android.contacts/data/postals"},
- {"content://com.android.contacts/data/postals/1"},
+ {"content://com.android.contacts/data/phones/1", "t"},
+ {"content://com.android.contacts/data/phones/filter", "t"},
+ {"content://com.android.contacts/data/phones/filter/XXX", "t"},
+ {"content://com.android.contacts/data/phones/filter_enterprise?directory=0", "t"},
+ {"content://com.android.contacts/data/phones/filter_enterprise/XXX?directory=0", "t"},
+ {"content://com.android.contacts/data/emails", "t"},
+ {"content://com.android.contacts/data/emails/1", "t"},
+ {"content://com.android.contacts/data/emails/lookup", "t"},
+ {"content://com.android.contacts/data/emails/lookup/XXX", "t"},
+ {"content://com.android.contacts/data/emails/filter", "t"},
+ {"content://com.android.contacts/data/emails/filter/XXX", "t"},
+ {"content://com.android.contacts/data/emails/filter_enterprise?directory=0", "t"},
+ {"content://com.android.contacts/data/emails/filter_enterprise/XXX?directory=0", "t"},
+ {"content://com.android.contacts/data/emails/lookup_enterprise", "t"},
+ {"content://com.android.contacts/data/emails/lookup_enterprise/XXX", "t"},
+ {"content://com.android.contacts/data/postals", "t"},
+ {"content://com.android.contacts/data/postals/1", "t"},
{"content://com.android.contacts/data/usagefeedback/XXX", "-u"},
- {"content://com.android.contacts/data/callables/"},
- {"content://com.android.contacts/data/callables/1"},
- {"content://com.android.contacts/data/callables/filter"},
- {"content://com.android.contacts/data/callables/filter/XXX"},
- {"content://com.android.contacts/data/callables/filter_enterprise?directory=0"},
- {"content://com.android.contacts/data/callables/filter_enterprise/XXX?directory=0"},
- {"content://com.android.contacts/data/contactables/"},
- {"content://com.android.contacts/data/contactables/filter"},
- {"content://com.android.contacts/data/contactables/filter/XXX"},
+ {"content://com.android.contacts/data/callables/", "t"},
+ {"content://com.android.contacts/data/callables/1", "t"},
+ {"content://com.android.contacts/data/callables/filter", "t"},
+ {"content://com.android.contacts/data/callables/filter/XXX", "t"},
+ {"content://com.android.contacts/data/callables/filter_enterprise?directory=0", "t"},
+ {"content://com.android.contacts/data/callables/filter_enterprise/XXX?directory=0",
+ "t"},
+ {"content://com.android.contacts/data/contactables/", "t"},
+ {"content://com.android.contacts/data/contactables/filter", "t"},
+ {"content://com.android.contacts/data/contactables/filter/XXX", "t"},
{"content://com.android.contacts/groups"},
{"content://com.android.contacts/groups/1"},
{"content://com.android.contacts/groups_summary"},
@@ -139,16 +145,16 @@ public class AllUrlTest extends AndroidTestCase {
{"content://com.android.contacts/directories_enterprise"},
{"content://com.android.contacts/directories_enterprise/1"},
{"content://com.android.contacts/complete_name"},
- {"content://com.android.contacts/profile"},
- {"content://com.android.contacts/profile/entities"},
- {"content://com.android.contacts/profile/data"},
- {"content://com.android.contacts/profile/data/1"},
- {"content://com.android.contacts/profile/photo"},
+ {"content://com.android.contacts/profile", "s"},
+ {"content://com.android.contacts/profile/entities", "s"},
+ {"content://com.android.contacts/profile/data", "t"},
+ {"content://com.android.contacts/profile/data/1", "t"},
+ {"content://com.android.contacts/profile/photo", "t"},
{"content://com.android.contacts/profile/display_photo", "-rw"},
{"content://com.android.contacts/profile/as_vcard"},
- {"content://com.android.contacts/profile/raw_contacts"},
- {"content://com.android.contacts/profile/raw_contacts/1"},
- {"content://com.android.contacts/profile/raw_contacts/1/data"},
+ {"content://com.android.contacts/profile/raw_contacts", "s"},
+ {"content://com.android.contacts/profile/raw_contacts/1", "s"},
+ {"content://com.android.contacts/profile/raw_contacts/1/data", "t"},
{"content://com.android.contacts/profile/raw_contacts/1/entity"},
{"content://com.android.contacts/profile/status_updates"},
{"content://com.android.contacts/profile/raw_contact_entities"},
@@ -172,7 +178,7 @@ public class AllUrlTest extends AndroidTestCase {
{"content://contacts/groups/system_id/XXX/members"},
{"content://contacts/groupmembership"},
{"content://contacts/groupmembership/1"},
- {"content://contacts/people"},
+ {"content://contacts/people", "s"},
{"content://contacts/people/filter/XXX"},
{"content://contacts/people/1"},
{"content://contacts/people/1/extensions"},
@@ -207,7 +213,6 @@ public class AllUrlTest extends AndroidTestCase {
private static final String[] ARG1 = {"-1"};
-
private ArrayList<String> mFailures;
@Override
@@ -253,6 +258,7 @@ public class AllUrlTest extends AndroidTestCase {
message.append(s);
}
}
+ mFailures = null;
fail("Following test(s) failed:\n" + message);
}
mFailures = null;
@@ -319,12 +325,13 @@ public class AllUrlTest extends AndroidTestCase {
try {
try (Cursor c = getContext().getContentResolver().query(uri, projection, selection,
selectionArgs, sortOrder)) {
+ c.moveToFirst();
}
} catch (Throwable th) {
// pass.
return;
}
- addFailure("Query on " + uri + " expeced to fail, but succeeded.");
+ addFailure("Query on " + uri + " expected to fail, but succeeded.");
}
/**
@@ -499,4 +506,91 @@ public class AllUrlTest extends AndroidTestCase {
}
failIfFailed();
}
+
+ private static boolean supportsTimesContacted(String[] path) {
+ return path.length > 1 && path[1].contains("s");
+ }
+
+ private static boolean supportsTimesUsed(String[] path) {
+ return path.length > 1 && path[1].contains("t");
+ }
+
+ private void checkColumnAccessible(Uri uri, String column) {
+ try {
+ try (Cursor c = getContext().getContentResolver().query(
+ uri, new String[]{column}, column + "=0", null, column
+ )) {
+ c.moveToFirst();
+ }
+ } catch (Throwable th) {
+ addFailure("Query failed: URI=" + uri + " Message=" + th.getMessage());
+ }
+ }
+
+ /** Test for {@link #checkColumnAccessible} */
+ public void testCheckColumnAccessible() {
+ checkColumnAccessible(Contacts.CONTENT_URI, "x_times_contacted");
+ try {
+ failIfFailed();
+ } catch (AssertionFailedError expected) {
+ return; // expected.
+ }
+ fail("Failed to detect issue.");
+ }
+
+ private void checkColumnNotAccessibleInner(Uri uri, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder) {
+ try {
+ try (Cursor c = getContext().getContentResolver().query(uri, projection, selection,
+ selectionArgs, sortOrder)) {
+ c.moveToFirst();
+ }
+ } catch (IllegalArgumentException th) {
+ // pass.
+ return;
+ }
+ addFailure("Query on " + uri +
+ " expected to throw IllegalArgumentException, but succeeded.");
+ }
+
+ private void checkColumnNotAccessible(Uri uri, String column) {
+ checkColumnNotAccessibleInner(uri, new String[] {column}, null, null, null);
+ checkColumnNotAccessibleInner(uri, null, column + "=1", null, null);
+ checkColumnNotAccessibleInner(uri, null, null, null, /* order by */ column);
+ }
+
+ /** Test for {@link #checkColumnNotAccessible} */
+ public void testCheckColumnNotAccessible() {
+ checkColumnNotAccessible(Contacts.CONTENT_URI, "times_contacted");
+ try {
+ failIfFailed();
+ } catch (AssertionFailedError expected) {
+ return; // expected.
+ }
+ fail("Failed to detect issue.");
+ }
+
+ /**
+ * Make sure the x_ columns are not accessible.
+ */
+ public void testProhibitedColumns() {
+ for (String[] path : URIs) {
+ final Uri uri = getUri(path);
+ if (supportsTimesContacted(path)) {
+ checkColumnAccessible(uri, "times_contacted");
+ checkColumnAccessible(uri, "last_time_contacted");
+
+ checkColumnNotAccessible(uri, "X_times_contacted");
+ checkColumnNotAccessible(uri, "X_slast_time_contacted");
+ }
+ if (supportsTimesUsed(path)) {
+ checkColumnAccessible(uri, "times_used");
+ checkColumnAccessible(uri, "last_time_used");
+
+ checkColumnNotAccessible(uri, "X_times_used");
+ checkColumnNotAccessible(uri, "X_last_time_used");
+ }
+ }
+ failIfFailed();
+ }
}