diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-17 03:07:17 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-17 03:07:17 +0000 |
commit | fc5572715b9901ba4b1cec081eea28896346ad58 (patch) | |
tree | c453c84db4ad6173d359006761f9beddded5d97b | |
parent | f17f4f110a00dad5496d6aa3330ad65b7326cf75 (diff) | |
parent | e93db40636d9cca57797fa5a338851ba779c0d24 (diff) | |
download | ims-android-security-12.0.0_r34.tar.gz |
Snap for 7557983 from e93db40636d9cca57797fa5a338851ba779c0d24 to sc-releaseandroid-vts-12.0_r9android-vts-12.0_r8android-vts-12.0_r7android-vts-12.0_r6android-vts-12.0_r5android-vts-12.0_r4android-vts-12.0_r3android-vts-12.0_r2android-vts-12.0_r12android-vts-12.0_r11android-vts-12.0_r10android-vts-12.0_r1android-security-12.0.0_r60android-security-12.0.0_r59android-security-12.0.0_r58android-security-12.0.0_r57android-security-12.0.0_r56android-security-12.0.0_r55android-security-12.0.0_r54android-security-12.0.0_r53android-security-12.0.0_r52android-security-12.0.0_r51android-security-12.0.0_r50android-security-12.0.0_r49android-security-12.0.0_r48android-security-12.0.0_r47android-security-12.0.0_r46android-security-12.0.0_r45android-security-12.0.0_r44android-security-12.0.0_r43android-security-12.0.0_r42android-security-12.0.0_r41android-security-12.0.0_r40android-security-12.0.0_r39android-security-12.0.0_r38android-security-12.0.0_r37android-security-12.0.0_r36android-security-12.0.0_r35android-security-12.0.0_r34android-platform-12.0.0_r1android-cts-12.0_r9android-cts-12.0_r8android-cts-12.0_r7android-cts-12.0_r6android-cts-12.0_r5android-cts-12.0_r4android-cts-12.0_r3android-cts-12.0_r2android-cts-12.0_r12android-cts-12.0_r11android-cts-12.0_r10android-cts-12.0_r1android-12.0.0_r9android-12.0.0_r8android-12.0.0_r34android-12.0.0_r33android-12.0.0_r31android-12.0.0_r30android-12.0.0_r3android-12.0.0_r25android-12.0.0_r2android-12.0.0_r11android-12.0.0_r10android-12.0.0_r1android12-tests-releaseandroid12-security-releaseandroid12-s5-releaseandroid12-s4-releaseandroid12-s3-releaseandroid12-s2-releaseandroid12-s1-releaseandroid12-release
Change-Id: Ie99200f6e00d7139899e0fdc48909eb50b2b6888
3 files changed, 90 insertions, 27 deletions
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabProvider.java b/src/java/com/android/ims/rcs/uce/eab/EabProvider.java index 60283c22..da70349a 100644 --- a/src/java/com/android/ims/rcs/uce/eab/EabProvider.java +++ b/src/java/com/android/ims/rcs/uce/eab/EabProvider.java @@ -81,7 +81,7 @@ public class EabProvider extends ContentProvider { public static final String AUTHORITY = "eab"; private static final String TAG = "EabProvider"; - private static final int DATABASE_VERSION = 2; + private static final int DATABASE_VERSION = 3; public static final String EAB_CONTACT_TABLE_NAME = "eab_contact"; public static final String EAB_COMMON_TABLE_NAME = "eab_common"; @@ -332,8 +332,6 @@ public class EabProvider extends ContentProvider { static { CONTACT_UNIQUE_FIELDS.add(ContactColumns.PHONE_NUMBER); - - COMMON_UNIQUE_FIELDS.add(EabCommonColumns.EAB_CONTACT_ID); } @VisibleForTesting @@ -356,8 +354,7 @@ public class EabProvider extends ContentProvider { + EabCommonColumns.EAB_CONTACT_ID + " INTEGER DEFAULT -1, " + EabCommonColumns.MECHANISM + " INTEGER DEFAULT NULL, " + EabCommonColumns.REQUEST_RESULT + " INTEGER DEFAULT -1, " - + EabCommonColumns.SUBSCRIPTION_ID + " INTEGER DEFAULT -1, " - + "UNIQUE (" + TextUtils.join(", ", COMMON_UNIQUE_FIELDS) + ")" + + EabCommonColumns.SUBSCRIPTION_ID + " INTEGER DEFAULT -1 " + ");"; @VisibleForTesting @@ -410,6 +407,46 @@ public class EabProvider extends ContentProvider { + ContactColumns.CONTACT_ID + " INTEGER DEFAULT -1;"); oldVersion = 2; } + + if (oldVersion < 3) { + // Drop UNIQUE constraint in EAB_COMMON_TABLE, SQLite didn't support DROP + // constraint, so drop the old one and migrate data to new one + + // Create temp table + final String createTempTableCommand = "CREATE TABLE temp" + + " (" + + EabCommonColumns._ID + " INTEGER PRIMARY KEY, " + + EabCommonColumns.EAB_CONTACT_ID + " INTEGER DEFAULT -1, " + + EabCommonColumns.MECHANISM + " INTEGER DEFAULT NULL, " + + EabCommonColumns.REQUEST_RESULT + " INTEGER DEFAULT -1, " + + EabCommonColumns.SUBSCRIPTION_ID + " INTEGER DEFAULT -1 " + + ");"; + sqLiteDatabase.execSQL(createTempTableCommand); + + // Migrate data to temp table + sqLiteDatabase.execSQL("INSERT INTO temp (" + + EabCommonColumns._ID + ", " + + EabCommonColumns.EAB_CONTACT_ID + ", " + + EabCommonColumns.MECHANISM + ", " + + EabCommonColumns.REQUEST_RESULT + ", " + + EabCommonColumns.SUBSCRIPTION_ID + ") " + + " SELECT " + + EabCommonColumns._ID + ", " + + EabCommonColumns.EAB_CONTACT_ID + ", " + + EabCommonColumns.MECHANISM + ", " + + EabCommonColumns.REQUEST_RESULT + ", " + + EabCommonColumns.SUBSCRIPTION_ID + " " + + " FROM " + + EAB_COMMON_TABLE_NAME + +";"); + + // Drop old one + sqLiteDatabase.execSQL("DROP TABLE " + EAB_COMMON_TABLE_NAME + ";"); + + // Rename temp to eab_common + sqLiteDatabase.execSQL("ALTER TABLE temp RENAME TO " + EAB_COMMON_TABLE_NAME + ";"); + oldVersion = 3; + } } } diff --git a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java index 5138445f..96147b43 100644 --- a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java +++ b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java @@ -66,7 +66,8 @@ import java.util.concurrent.TimeUnit; @RunWith(AndroidJUnit4.class) public class EabControllerTest extends ImsTestBase { EabProviderTestable mEabProviderTestable = new EabProviderTestable(); - EabControllerImpl mEabController; + EabControllerImpl mEabControllerSub1; + EabControllerImpl mEabControllerSub2; PersistableBundle mBundle; ExecutorService mExecutor = Executors.newSingleThreadExecutor(); @@ -74,6 +75,7 @@ public class EabControllerTest extends ImsTestBase { EabControllerImpl.ExpirationTimeFactory mExpirationTimeFactory; private static final int TEST_SUB_ID = 1; + private static final int TEST_SECOND_SUB_ID = 2; private static final String TEST_PHONE_NUMBER = "16661234567"; private static final String TEST_SERVICE_STATUS = "status"; private static final String TEST_SERVICE_SERVICE_ID = "serviceId"; @@ -94,9 +96,14 @@ public class EabControllerTest extends ImsTestBase { mockContentResolver.addProvider(EabProvider.AUTHORITY, mEabProviderTestable); insertContactInfoToDB(); - mEabController = new EabControllerImpl( + mEabControllerSub1 = new EabControllerImpl( mContext, TEST_SUB_ID, null, Looper.getMainLooper()); - mEabController.setExpirationTimeFactory(mExpirationTimeFactory); + mEabControllerSub1.setExpirationTimeFactory(mExpirationTimeFactory); + + mEabControllerSub2 = new EabControllerImpl( + mContext, TEST_SECOND_SUB_ID, null, Looper.getMainLooper()); + mEabControllerSub2.setExpirationTimeFactory(mExpirationTimeFactory); + doReturn(Instant.now().getEpochSecond()).when(mExpirationTimeFactory).getExpirationTime(); mBundle = mContextFixture.getTestCarrierConfigBundle(); @@ -113,9 +120,9 @@ public class EabControllerTest extends ImsTestBase { List<RcsContactUceCapability> contactList = new ArrayList<>(); contactList.add(createPresenceCapability()); - mEabController.saveCapabilities(contactList); + mEabControllerSub1.saveCapabilities(contactList); - EabCapabilityResult result = mEabController.getAvailability(TEST_CONTACT_URI); + EabCapabilityResult result = mEabControllerSub1.getAvailability(TEST_CONTACT_URI); Assert.assertEquals(EabCapabilityResult.EAB_QUERY_SUCCESSFUL, result.getStatus()); Assert.assertEquals(TEST_CONTACT_URI, result.getContactCapabilities().getContactUri()); @@ -127,14 +134,14 @@ public class EabControllerTest extends ImsTestBase { List<RcsContactUceCapability> contactList = new ArrayList<>(); contactList.add(createPresenceCapability()); - mEabController.saveCapabilities(contactList); + mEabControllerSub1.saveCapabilities(contactList); List<Uri> contactUriList = new ArrayList<>(); contactUriList.add(TEST_CONTACT_URI); Assert.assertEquals(1, - mEabController.getCapabilities(contactUriList).size()); + mEabControllerSub1.getCapabilities(contactUriList).size()); Assert.assertEquals(EabCapabilityResult.EAB_QUERY_SUCCESSFUL, - mEabController.getCapabilities(contactUriList).get(0).getStatus()); + mEabControllerSub1.getCapabilities(contactUriList).get(0).getStatus()); } @Test @@ -145,14 +152,14 @@ public class EabControllerTest extends ImsTestBase { contactList.add(createPresenceCapability()); - mEabController.saveCapabilities(contactList); + mEabControllerSub1.saveCapabilities(contactList); List<Uri> contactUriList = new ArrayList<>(); contactUriList.add(TEST_CONTACT_URI); Assert.assertEquals(1, - mEabController.getCapabilities(contactUriList).size()); + mEabControllerSub1.getCapabilities(contactUriList).size()); Assert.assertEquals(EabCapabilityResult.EAB_CONTACT_EXPIRED_FAILURE, - mEabController.getCapabilities(contactUriList).get(0).getStatus()); + mEabControllerSub1.getCapabilities(contactUriList).get(0).getStatus()); } @Test @@ -164,16 +171,16 @@ public class EabControllerTest extends ImsTestBase { List<RcsContactUceCapability> contactList = new ArrayList<>(); contactList.add(createPresenceNonRcsCapability()); - mEabController.saveCapabilities(contactList); + mEabControllerSub1.saveCapabilities(contactList); List<Uri> contactUriList = new ArrayList<>(); contactUriList.add(TEST_CONTACT_URI); // Verify result is not expired Assert.assertEquals(1, - mEabController.getCapabilities(contactUriList).size()); + mEabControllerSub1.getCapabilities(contactUriList).size()); Assert.assertEquals(EabCapabilityResult.EAB_QUERY_SUCCESSFUL, - mEabController.getCapabilities(contactUriList).get(0).getStatus()); + mEabControllerSub1.getCapabilities(contactUriList).get(0).getStatus()); } @Test @@ -187,15 +194,15 @@ public class EabControllerTest extends ImsTestBase { List<RcsContactUceCapability> contactList = new ArrayList<>(); contactList.add(createPresenceNonRcsCapability()); - mEabController.saveCapabilities(contactList); + mEabControllerSub1.saveCapabilities(contactList); // Verify result is expired List<Uri> contactUriList = new ArrayList<>(); contactUriList.add(TEST_CONTACT_URI); Assert.assertEquals(1, - mEabController.getCapabilities(contactUriList).size()); + mEabControllerSub1.getCapabilities(contactUriList).size()); Assert.assertEquals(EabCapabilityResult.EAB_CONTACT_EXPIRED_FAILURE, - mEabController.getCapabilities(contactUriList).get(0).getStatus()); + mEabControllerSub1.getCapabilities(contactUriList).get(0).getStatus()); } @Test @@ -209,7 +216,7 @@ public class EabControllerTest extends ImsTestBase { data.put(EabProvider.EabCommonColumns.SUBSCRIPTION_ID, -1); mContext.getContentResolver().insert(COMMON_URI, data); - mExecutor.execute(mEabController.mCapabilityCleanupRunnable); + mExecutor.execute(mEabControllerSub1.mCapabilityCleanupRunnable); mExecutor.awaitTermination(TIME_OUT_IN_SEC, TimeUnit.SECONDS); // Verify the entry that cannot map to presence/option table has been removed @@ -242,7 +249,7 @@ public class EabControllerTest extends ImsTestBase { expiredDate.getTime().getTime() / 1000); mContext.getContentResolver().insert(PRESENCE_URI, data); - mExecutor.execute(mEabController.mCapabilityCleanupRunnable); + mExecutor.execute(mEabControllerSub1.mCapabilityCleanupRunnable); mExecutor.awaitTermination(TIME_OUT_IN_SEC, TimeUnit.SECONDS); // Verify the invalid data has been removed after save capabilities @@ -275,7 +282,7 @@ public class EabControllerTest extends ImsTestBase { expiredDate.getTime().getTime() / 1000); mContext.getContentResolver().insert(OPTIONS_URI, data); - mExecutor.execute(mEabController.mCapabilityCleanupRunnable); + mExecutor.execute(mEabControllerSub1.mCapabilityCleanupRunnable); mExecutor.awaitTermination(TIME_OUT_IN_SEC, TimeUnit.SECONDS); // Verify the invalid data has been removed after save capabilities @@ -289,6 +296,23 @@ public class EabControllerTest extends ImsTestBase { } } + @Test + @SmallTest + public void testSaveCapabilityForDifferentSubId() { + List<RcsContactUceCapability> contactList = new ArrayList<>(); + contactList.add(createPresenceCapability()); + + mEabControllerSub1.saveCapabilities(contactList); + mEabControllerSub2.saveCapabilities(contactList); + + List<Uri> contactUriList = new ArrayList<>(); + contactUriList.add(TEST_CONTACT_URI); + Assert.assertEquals(1, + mEabControllerSub1.getCapabilities(contactUriList).size()); + Assert.assertEquals(1, + mEabControllerSub2.getCapabilities(contactUriList).size()); + } + private RcsContactUceCapability createPresenceCapability() { RcsContactPresenceTuple.ServiceCapabilities.Builder serviceCapabilitiesBuilder = new RcsContactPresenceTuple.ServiceCapabilities.Builder(TEST_AUDIO_CAPABLE, diff --git a/tests/src/com/android/ims/rcs/uce/eab/EabProviderTest.java b/tests/src/com/android/ims/rcs/uce/eab/EabProviderTest.java index 3c22e0ed..6d09ebf8 100644 --- a/tests/src/com/android/ims/rcs/uce/eab/EabProviderTest.java +++ b/tests/src/com/android/ims/rcs/uce/eab/EabProviderTest.java @@ -117,17 +117,19 @@ public class EabProviderTest extends ImsTestBase { @Test @SmallTest - public void testCommonIsUnique() { + public void testCommonIsNotUnique() { ContentValues data = new ContentValues(); data.put(EabProvider.EabCommonColumns.EAB_CONTACT_ID, 1); data.put(EabProvider.EabCommonColumns.MECHANISM, CAPABILITY_MECHANISM_PRESENCE); data.put(EabProvider.EabCommonColumns.REQUEST_RESULT, REQUEST_RESULT_FOUND); + data.put(EabProvider.EabCommonColumns.SUBSCRIPTION_ID, 1); mContext.getContentResolver().insert(COMMON_URI, data); data = new ContentValues(); data.put(EabProvider.EabCommonColumns.EAB_CONTACT_ID, 1); data.put(EabProvider.EabCommonColumns.MECHANISM, CAPABILITY_MECHANISM_PRESENCE); data.put(EabProvider.EabCommonColumns.REQUEST_RESULT, REQUEST_RESULT_FOUND); + data.put(EabProvider.EabCommonColumns.SUBSCRIPTION_ID, 2); mContext.getContentResolver().insert(COMMON_URI, data); Cursor cursor = mContext.getContentResolver().query(COMMON_URI, @@ -136,7 +138,7 @@ public class EabProviderTest extends ImsTestBase { null, null); - assertEquals(1, cursor.getCount()); + assertEquals(2, cursor.getCount()); } @Test |