Merge "Temporary fix for SimPhonebook continuous test failures"
diff --git a/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_ElementaryFilesTest.java b/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_ElementaryFilesTest.java
index 981ca3e..acdb215 100644
--- a/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_ElementaryFilesTest.java
+++ b/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_ElementaryFilesTest.java
@@ -21,6 +21,7 @@
import static com.android.internal.telephony.testing.CursorSubject.assertThat;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
import android.Manifest;
import android.content.ContentResolver;
@@ -32,6 +33,7 @@
import android.provider.SimPhonebookContract.SimRecords;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.util.SparseBooleanArray;
import androidx.annotation.NonNull;
import androidx.test.core.app.ApplicationProvider;
@@ -40,6 +42,7 @@
import com.android.compatibility.common.util.RequiredFeatureRule;
import com.android.compatibility.common.util.SystemUtil;
+import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -47,6 +50,7 @@
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
+import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -81,6 +85,37 @@
List<SubscriptionInfo> subscriptionInfos = SystemUtil.callWithShellPermissionIdentity(
() -> mSubscriptionManager.getActiveSubscriptionInfoList(),
Manifest.permission.READ_PHONE_STATE);
+ // FDN and SDN support are more rare and less important than ADN so we allow the test to
+ // work on a SIM where they are unsupported. This does leave a gap in coverage but given
+ // their relatively low importance as compared to ADN and the fact that the implementation
+ // should be very similar for each type it's OK to just assume good faith on the part of the
+ // implementation.
+ SparseBooleanArray fdnSupportedBySubId = new SparseBooleanArray();
+ SparseBooleanArray sdnSupportedBySubId = new SparseBooleanArray();
+ for (SubscriptionInfo info : subscriptionInfos) {
+ int subscriptionId = info.getSubscriptionId();
+ try (Cursor cursor = mResolver.query(
+ ElementaryFiles.getItemUri(subscriptionId, ElementaryFiles.EF_FDN),
+ new String[]{ElementaryFiles.SUBSCRIPTION_ID}, null, null)) {
+ // If the EF is unsupported the item Uri will return an empty cursor
+ if (cursor.moveToFirst()) {
+ assertWithMessage("subscriptionId")
+ .that(subscriptionId).isEqualTo(cursor.getInt(0));
+ fdnSupportedBySubId.append(subscriptionId, true);
+ }
+ }
+ try (Cursor cursor = mResolver.query(
+ ElementaryFiles.getItemUri(subscriptionId, ElementaryFiles.EF_SDN),
+ new String[]{ElementaryFiles.SUBSCRIPTION_ID}, null, null)) {
+ // If the EF is unsupported the item Uri will return an empty cursor
+ if (cursor.moveToFirst()) {
+ assertWithMessage("subscriptionId")
+ .that(subscriptionId).isEqualTo(cursor.getInt(0));
+ sdnSupportedBySubId.append(subscriptionId, true);
+ }
+ }
+ }
+
try (Cursor cursor = query(ElementaryFiles.CONTENT_URI,
new String[]{
ElementaryFiles.SLOT_INDEX,
@@ -91,12 +126,19 @@
ElementaryFiles.PHONE_NUMBER_MAX_LENGTH
})) {
- assertThat(cursor).hasCount(subscriptionInfos.size() * 3);
+ assertThat(cursor).hasCount(subscriptionInfos.size() + fdnSupportedBySubId.size()
+ + sdnSupportedBySubId.size());
cursor.moveToPosition(-1);
for (SubscriptionInfo info : subscriptionInfos) {
- for (int efType : new int[]{
- ElementaryFiles.EF_ADN, ElementaryFiles.EF_FDN, ElementaryFiles.EF_SDN
- }) {
+ List<Integer> supportedEfs = new ArrayList<>(3);
+ supportedEfs.add(ElementaryFiles.EF_ADN);
+ if (fdnSupportedBySubId.get(info.getSubscriptionId())) {
+ supportedEfs.add(ElementaryFiles.EF_FDN);
+ }
+ if (sdnSupportedBySubId.get(info.getSubscriptionId())) {
+ supportedEfs.add(ElementaryFiles.EF_SDN);
+ }
+ for (int efType : supportedEfs) {
assertThat(cursor.moveToNext()).isTrue();
assertThat(cursor)
.hasRowValue(ElementaryFiles.SLOT_INDEX, info.getSimSlotIndex())
@@ -142,24 +184,42 @@
}
@Test
- public void query_itemUri_returnsCorrectRow() {
- String[] projection = {
- ElementaryFiles.SUBSCRIPTION_ID,
- ElementaryFiles.EF_TYPE
- };
- try (Cursor adn = query(
+ public void query_adnItemUri_returnsCorrectRow() {
+ try (Cursor cursor = query(
ElementaryFiles.getItemUri(mValidSubscriptionId, ElementaryFiles.EF_ADN),
- projection);
- Cursor fdn = query(
- ElementaryFiles.getItemUri(mValidSubscriptionId, ElementaryFiles.EF_FDN),
- projection);
- Cursor sdn = query(
- ElementaryFiles.getItemUri(mValidSubscriptionId, ElementaryFiles.EF_SDN),
- projection)
- ) {
- assertThat(adn).hasSingleRow(mValidSubscriptionId, ElementaryFiles.EF_ADN);
- assertThat(fdn).hasSingleRow(mValidSubscriptionId, ElementaryFiles.EF_FDN);
- assertThat(sdn).hasSingleRow(mValidSubscriptionId, ElementaryFiles.EF_SDN);
+ new String[]{
+ ElementaryFiles.SUBSCRIPTION_ID,
+ ElementaryFiles.EF_TYPE
+ })) {
+ assertThat(cursor).hasSingleRow(mValidSubscriptionId, ElementaryFiles.EF_ADN);
+ }
+ }
+
+ @Test
+ public void query_fdnItemUri_returnsCorrectRow() {
+ try (Cursor cursor = query(
+ ElementaryFiles.getItemUri(mValidSubscriptionId, ElementaryFiles.EF_FDN),
+ new String[]{
+ ElementaryFiles.SUBSCRIPTION_ID,
+ ElementaryFiles.EF_TYPE
+ })) {
+ // Use an assumption so that the tests don't fail if the SIM doesn't support FDN.
+ Assume.assumeTrue("SIM should support EF_FDN but does not.", cursor.moveToFirst());
+ assertThat(cursor).hasSingleRow(mValidSubscriptionId, ElementaryFiles.EF_FDN);
+ }
+ }
+
+ @Test
+ public void query_sdnItemUri_returnsCorrectRow() {
+ try (Cursor cursor = query(
+ ElementaryFiles.getItemUri(mValidSubscriptionId, ElementaryFiles.EF_SDN),
+ new String[]{
+ ElementaryFiles.SUBSCRIPTION_ID,
+ ElementaryFiles.EF_TYPE
+ })) {
+ // Use an assumption so that the tests don't fail if the SIM doesn't support SDN.
+ Assume.assumeTrue("SIM should support EF_SDN but does not.", cursor.moveToFirst());
+ assertThat(cursor).hasSingleRow(mValidSubscriptionId, ElementaryFiles.EF_SDN);
}
}
diff --git a/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_SimRecordsTest.java b/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_SimRecordsTest.java
index 7031023..d231ad2 100644
--- a/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_SimRecordsTest.java
+++ b/tests/tests/simphonebookprovider/src/android/provider/cts/simphonebook/SimPhonebookContract_SimRecordsTest.java
@@ -51,6 +51,7 @@
import com.google.common.collect.ImmutableList;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.RuleChain;
@@ -84,8 +85,7 @@
public final TestRule mRule = RuleChain
.outerRule(new RequiredFeatureRule(PackageManager.FEATURE_TELEPHONY))
.around(new SimPhonebookRequirementsRule())
- .around(mAdnCleanupRule)
- .around(mFdnCleanupRule);
+ .around(mAdnCleanupRule);
/**
* The number of records in the SDN file for the SIM card.
*
@@ -170,6 +170,7 @@
}
}
+ @Ignore
@Test
public void querySdn_returnsCursorWithSdnRecords() {
// Create an ADN contact to validate that this query at least returns something different
@@ -208,6 +209,7 @@
}
}
+ @Ignore
@Test
public void queryFdn_nonEmpty_returnsFdnRecordsFromSim() throws Exception {
insertFdn(mDefaultSubscriptionId, "Name1", "5550101");