diff options
Diffstat (limited to 'tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java')
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java | 353 |
1 files changed, 331 insertions, 22 deletions
diff --git a/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java b/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java index aea79656c1..eecaf903c4 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/subscription/SubscriptionManagerServiceTest.java @@ -104,7 +104,10 @@ import com.android.internal.telephony.RILConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.euicc.EuiccController; +import com.android.internal.telephony.flags.FeatureFlags; +import com.android.internal.telephony.subscription.SubscriptionDatabaseManager.SubscriptionDatabaseManagerCallback; import com.android.internal.telephony.subscription.SubscriptionDatabaseManagerTest.SubscriptionProvider; +import com.android.internal.telephony.subscription.SubscriptionManagerService.BinderWrapper; import com.android.internal.telephony.subscription.SubscriptionManagerService.SubscriptionManagerServiceCallback; import com.android.internal.telephony.subscription.SubscriptionManagerService.SubscriptionMap; import com.android.internal.telephony.uicc.IccCardStatus; @@ -153,7 +156,8 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { // mocked private SubscriptionManagerServiceCallback mMockedSubscriptionManagerServiceCallback; private EuiccController mEuiccController; - + private FeatureFlags mFlags; + private BinderWrapper mBinder; private Set<Integer> mActiveSubs = new ArraySet<>(); @Rule @@ -194,12 +198,18 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { doReturn(FAKE_ICCID1).when(mUiccController).convertToCardString(eq(1)); doReturn(FAKE_ICCID2).when(mUiccController).convertToCardString(eq(2)); + mBinder = Mockito.mock(BinderWrapper.class); + doReturn(FAKE_USER_HANDLE).when(mBinder).getCallingUserHandle(); + replaceInstance(SubscriptionManagerService.class, "BINDER_WRAPPER", null, mBinder); + doReturn(new int[0]).when(mSubscriptionManager).getCompleteActiveSubscriptionIdList(); ((MockContentResolver) mContext.getContentResolver()).addProvider( Telephony.Carriers.CONTENT_URI.getAuthority(), mSubscriptionProvider); - mSubscriptionManagerServiceUT = new SubscriptionManagerService(mContext, Looper.myLooper()); + mFlags = Mockito.mock(FeatureFlags.class); + mSubscriptionManagerServiceUT = new SubscriptionManagerService(mContext, Looper.myLooper(), + mFlags); monitorTestableLooper(new TestableLooper(getBackgroundHandler().getLooper())); monitorTestableLooper(new TestableLooper(getSubscriptionDatabaseManager().getLooper())); @@ -253,6 +263,12 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { return (SubscriptionDatabaseManager) field.get(mSubscriptionManagerServiceUT); } + private SubscriptionDatabaseManagerCallback getSubscriptionDatabaseCallback() throws Exception { + Field field = SubscriptionDatabaseManager.class.getDeclaredField("mCallback"); + field.setAccessible(true); + return (SubscriptionDatabaseManagerCallback) field.get(getSubscriptionDatabaseManager()); + } + /** * Insert the subscription info to the database. This is an instant insertion method. For real * insertion sequence please use {@link #testInsertNewSim()}. @@ -262,7 +278,6 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { */ private int insertSubscription(@NonNull SubscriptionInfoInternal subInfo) { try { - mContextFixture.addCallingOrSelfPermission(Manifest.permission.MODIFY_PHONE_STATE); subInfo = new SubscriptionInfoInternal.Builder(subInfo) .setId(SubscriptionManager.INVALID_SUBSCRIPTION_ID).build(); int subId = getSubscriptionDatabaseManager().insertSubscriptionInfo(subInfo); @@ -274,17 +289,12 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { field.setAccessible(true); SubscriptionMap<Integer, Integer> map = (SubscriptionMap<Integer, Integer>) field.get(mSubscriptionManagerServiceUT); - Class[] cArgs = new Class[2]; - cArgs[0] = Object.class; - cArgs[1] = Object.class; if (subInfo.getSimSlotIndex() >= 0) { // Change the slot -> subId mapping map.put(subInfo.getSimSlotIndex(), subId); } - mContextFixture.removeCallingOrSelfPermission(Manifest.permission.MODIFY_PHONE_STATE); - processAllMessages(); verify(mMockedSubscriptionManagerServiceCallback).onSubscriptionChanged(eq(subId)); Mockito.clearInvocations(mMockedSubscriptionManagerServiceCallback); @@ -756,13 +766,13 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { // Should get an empty list without READ_PHONE_STATE. assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoList( - CALLING_PACKAGE, CALLING_FEATURE)).isEmpty(); + CALLING_PACKAGE, CALLING_FEATURE, true)).isEmpty(); // Grant READ_PHONE_STATE permission for insertion. mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PHONE_STATE); List<SubscriptionInfo> subInfos = mSubscriptionManagerServiceUT - .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE); + .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE, true); assertThat(subInfos).hasSize(1); assertThat(subInfos.get(0).getIccId()).isEmpty(); assertThat(subInfos.get(0).getCardString()).isEmpty(); @@ -773,7 +783,7 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { setCarrierPrivilegesForSubId(true, 1); subInfos = mSubscriptionManagerServiceUT - .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE); + .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE, true); assertThat(subInfos).hasSize(1); assertThat(subInfos.get(0)).isEqualTo(FAKE_SUBSCRIPTION_INFO1.toSubscriptionInfo()); } @@ -953,15 +963,15 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { // Should fail without READ_PHONE_STATE assertThrows(SecurityException.class, () -> mSubscriptionManagerServiceUT - .getActiveSubInfoCount(CALLING_PACKAGE, CALLING_FEATURE)); + .getActiveSubInfoCount(CALLING_PACKAGE, CALLING_FEATURE, true)); mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE); assertThat(mSubscriptionManagerServiceUT.getActiveSubInfoCount( - CALLING_PACKAGE, CALLING_FEATURE)).isEqualTo(2); + CALLING_PACKAGE, CALLING_FEATURE, true)).isEqualTo(2); } @Test - public void testSetIconTint() throws Exception { + public void testSetIconTint() { insertSubscription(FAKE_SUBSCRIPTION_INFO1); // Should fail without MODIFY_PHONE_STATE @@ -1110,8 +1120,6 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { @Test public void testIsSubscriptionAssociatedWithUser() { - insertSubscription(FAKE_SUBSCRIPTION_INFO1); - // Should fail without MANAGE_SUBSCRIPTION_USER_ASSOCIATION assertThrows(SecurityException.class, () -> mSubscriptionManagerServiceUT .isSubscriptionAssociatedWithUser(1, FAKE_USER_HANDLE)); @@ -1122,6 +1130,12 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { Manifest.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION); mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE); + // Should fail for non-existent sub Id + assertThrows(IllegalArgumentException.class, () -> mSubscriptionManagerServiceUT + .isSubscriptionAssociatedWithUser(1, FAKE_USER_HANDLE)); + + insertSubscription(FAKE_SUBSCRIPTION_INFO1); + mSubscriptionManagerServiceUT.setSubscriptionUserHandle(FAKE_USER_HANDLE, 1); processAllMessages(); verify(mMockedSubscriptionManagerServiceCallback).onSubscriptionChanged(eq(1)); @@ -1143,6 +1157,300 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { } @Test + @EnableCompatChanges({SubscriptionManagerService.REQUIRE_DEVICE_IDENTIFIERS_FOR_GROUP_UUID, + SubscriptionManagerService.FILTER_ACCESSIBLE_SUBS_BY_USER}) + public void testIsSubscriptionAssociatedWithUserMultiSubs() { + doReturn(true).when(mFlags).workProfileApiSplit(); + mContextFixture.addCallingOrSelfPermission( + Manifest.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION); + insertSubscription(FAKE_SUBSCRIPTION_INFO1); + mSubscriptionManagerServiceUT.setSubscriptionUserHandle( + UserHandle.of(UserHandle.USER_NULL), 1); + + // Verify sub 1 unassociated is visible to all profiles + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_USER_HANDLE)).isEqualTo(true); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_MANAGED_PROFILE_USER_HANDLE)).isEqualTo(true); + + // Assign sub 2 to work profile + insertSubscription(FAKE_SUBSCRIPTION_INFO2); + mSubscriptionManagerServiceUT.setSubscriptionUserHandle( + FAKE_MANAGED_PROFILE_USER_HANDLE, 2); + processAllMessages(); + // Verify work profile can only see its dedicated sub 2 + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(2, + FAKE_MANAGED_PROFILE_USER_HANDLE)).isEqualTo(true); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_MANAGED_PROFILE_USER_HANDLE)).isEqualTo(false); + // Verify personal profile can only see the unassigned sub 1 + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_USER_HANDLE)).isEqualTo(true); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(2, + FAKE_USER_HANDLE)).isEqualTo(false); + + // Sub 2 is deactivated, but still on device, verify visibility doesn't change. + mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE); + mSubscriptionManagerServiceUT.updateSimState( + 1, TelephonyManager.SIM_STATE_NOT_READY, null, null); + processAllMessages(); + // Verify work profile can only see its dedicated sub 2 + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(2, + FAKE_MANAGED_PROFILE_USER_HANDLE)).isEqualTo(true); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_MANAGED_PROFILE_USER_HANDLE)).isEqualTo(false); + // Verify personal profile can only see the unassigned sub 1 + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_USER_HANDLE)).isEqualTo(true); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(2, + FAKE_USER_HANDLE)).isEqualTo(false); + + // Sub 2 is removed from the device. + mSubscriptionManagerServiceUT.updateSimState( + 1, TelephonyManager.SIM_STATE_ABSENT, null, null); + processAllMessages(); + // Verify the visibility of the unassigned sub 1 is restored to both profiles. + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_USER_HANDLE)).isEqualTo(true); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionAssociatedWithUser(1, + FAKE_MANAGED_PROFILE_USER_HANDLE)).isEqualTo(true); + } + + @Test + @EnableCompatChanges({SubscriptionManagerService.REQUIRE_DEVICE_IDENTIFIERS_FOR_GROUP_UUID, + SubscriptionManagerService.FILTER_ACCESSIBLE_SUBS_BY_USER}) + public void testSubscriptionAssociationWorkProfileCallerVisibility() { + // Split mode is defined as when a profile owns a dedicated sub, it loses the visibility to + // the unassociated sub. + doReturn(true).when(mFlags).workProfileApiSplit(); + mContextFixture.addCallingOrSelfPermission( + Manifest.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION); + // Sub 1 is associated with work profile; Sub 2 is unassociated. + int subId1 = insertSubscription(FAKE_SUBSCRIPTION_INFO1); + mSubscriptionManagerServiceUT.setSubscriptionUserHandle( + FAKE_MANAGED_PROFILE_USER_HANDLE, subId1); + int subId2 = insertSubscription(FAKE_SUBSCRIPTION_INFO2); + mSubscriptionManagerServiceUT.setSubscriptionUserHandle( + UserHandle.of(UserHandle.USER_NULL), subId2); + // Set Sub 1 default data sub + mContextFixture.addCallingOrSelfPermission(Manifest.permission.MODIFY_PHONE_STATE); + mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE); + mSubscriptionManagerServiceUT.setDefaultDataSubId(subId1); + processAllMessages(); + + // Calling from work profile + doReturn(FAKE_MANAGED_PROFILE_USER_HANDLE).when(mBinder).getCallingUserHandle(); + + // Test getAccessibleSubscriptionInfoList + doReturn(true).when(mEuiccManager).isEnabled(); + doReturn(true).when(mSubscriptionManager).canManageSubscription( + any(SubscriptionInfo.class), eq(CALLING_PACKAGE)); + assertThat(mSubscriptionManagerServiceUT.getAccessibleSubscriptionInfoList( + CALLING_PACKAGE)).isEqualTo(List.of(FAKE_SUBSCRIPTION_INFO1.toSubscriptionInfo())); + // Test getActiveSubIdList, System + assertThat(mSubscriptionManagerServiceUT.getActiveSubIdList(false/*visible only*/)) + .isEqualTo(new int[]{subId1, subId2}); + // Test get getActiveSubInfoCount + assertThat(mSubscriptionManagerServiceUT.getActiveSubInfoCount( + CALLING_PACKAGE, CALLING_FEATURE, false)).isEqualTo(1); + // Test getActiveSubscriptionInfo + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfo( + subId1, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()).isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfo( + subId2, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()).isEqualTo(subId2); + // Test getActiveSubscriptionInfoForIccId + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForIccId( + FAKE_ICCID1, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForIccId( + FAKE_ICCID2, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId2); + // Test getActiveSubscriptionInfoForSimSlotIndex + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForSimSlotIndex( + 0, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForSimSlotIndex( + 1, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId2); + // Test getActiveSubscriptionInfoList + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoList( + CALLING_PACKAGE, CALLING_FEATURE, false) + .stream().map(SubscriptionInfo::getSubscriptionId) + .toList()).isEqualTo(List.of(subId1)); + // Test getAllSubInfoList + assertThat(mSubscriptionManagerServiceUT.getAllSubInfoList(CALLING_PACKAGE, + CALLING_FEATURE).stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1)); + // Test getAvailableSubscriptionInfoList + assertThat(mSubscriptionManagerServiceUT.getAvailableSubscriptionInfoList(CALLING_PACKAGE, + CALLING_FEATURE).stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1, subId2)); + // Test getDefaultDataSubId + assertThat(mSubscriptionManagerServiceUT.getDefaultDataSubId()).isEqualTo(subId1); + // Test getDefault<Sms/Voice>SubIdAsUser + assertThat(mSubscriptionManagerServiceUT.getDefaultSmsSubIdAsUser( + FAKE_MANAGED_PROFILE_USER_HANDLE.getIdentifier())).isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getDefaultSubIdAsUser( + FAKE_MANAGED_PROFILE_USER_HANDLE.getIdentifier())).isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getDefaultVoiceSubIdAsUser( + FAKE_MANAGED_PROFILE_USER_HANDLE.getIdentifier())).isEqualTo(subId1); + // Test getEnabledSubscriptionId + assertThat(mSubscriptionManagerServiceUT.getEnabledSubscriptionId(0)).isEqualTo( + subId1); + assertThat(mSubscriptionManagerServiceUT.getEnabledSubscriptionId(1)).isEqualTo( + subId2); + // Test getOpportunisticSubscriptions + mSubscriptionManagerServiceUT.setOpportunistic(true, subId1, CALLING_PACKAGE); + mSubscriptionManagerServiceUT.setOpportunistic(true, subId2, CALLING_PACKAGE); + processAllMessages(); + assertThat(mSubscriptionManagerServiceUT.getOpportunisticSubscriptions(CALLING_PACKAGE, + CALLING_FEATURE).stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1, subId2)); + // Test getSubscriptionInfo - can get both as it's an internal getter + assertThat(mSubscriptionManagerServiceUT.getSubscriptionInfo(subId1).getSubscriptionId()) + .isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getSubscriptionInfo(subId2).getSubscriptionId()) + .isEqualTo(subId2); + // Test getSubscriptionInfoListAssociatedWithUser + mContextFixture.addCallingOrSelfPermission( + Manifest.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION); + assertThat(mSubscriptionManagerServiceUT.getSubscriptionInfoListAssociatedWithUser( + FAKE_MANAGED_PROFILE_USER_HANDLE).stream().map(SubscriptionInfo::getSubscriptionId) + .toList()).isEqualTo(List.of(subId1)); + // Test getSubscriptionsInGroup + setCarrierPrivilegesForSubId(true, subId1); + assertThat(mSubscriptionManagerServiceUT.getSubscriptionsInGroup( + ParcelUuid.fromString(FAKE_UUID1), CALLING_PACKAGE, CALLING_FEATURE) + .stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1)); + // Test isActiveSubId + assertThat(mSubscriptionManagerServiceUT.isActiveSubId(subId1, CALLING_PACKAGE, + CALLING_FEATURE)).isTrue(); + assertThat(mSubscriptionManagerServiceUT.isActiveSubId(subId2, CALLING_PACKAGE, + CALLING_FEATURE)).isTrue(); + // Test isSubscriptionEnabled + assertThat(mSubscriptionManagerServiceUT.isSubscriptionEnabled(subId1)).isTrue(); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionEnabled(subId2)).isTrue(); + } + + @Test + @EnableCompatChanges({SubscriptionManagerService.REQUIRE_DEVICE_IDENTIFIERS_FOR_GROUP_UUID, + SubscriptionManagerService.FILTER_ACCESSIBLE_SUBS_BY_USER}) + public void testSubscriptionAssociationPersonalCallerVisibility() { + // Split mode is defined as when a profile owns a dedicated sub, it loses the visibility to + // the unassociated sub. + doReturn(true).when(mFlags).workProfileApiSplit(); + mContextFixture.addCallingOrSelfPermission( + Manifest.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION); + // Sub 1 is unassociated; Sub 2 is associated with work profile. + int subId1 = insertSubscription(FAKE_SUBSCRIPTION_INFO1); + mSubscriptionManagerServiceUT.setSubscriptionUserHandle( + UserHandle.of(UserHandle.USER_NULL), subId1); + int subId2 = insertSubscription(FAKE_SUBSCRIPTION_INFO2); + mSubscriptionManagerServiceUT.setSubscriptionUserHandle( + FAKE_MANAGED_PROFILE_USER_HANDLE, subId2); + // Set Sub 1 default data sub + mContextFixture.addCallingOrSelfPermission(Manifest.permission.MODIFY_PHONE_STATE); + mContextFixture.addCallingOrSelfPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE); + mSubscriptionManagerServiceUT.setDefaultDataSubId(subId1); + processAllMessages(); + + // Calling from a profile that owns no dedicated subs. + doReturn(FAKE_USER_HANDLE).when(mBinder).getCallingUserHandle(); + + // Test getAccessibleSubscriptionInfoList + doReturn(true).when(mEuiccManager).isEnabled(); + doReturn(true).when(mSubscriptionManager).canManageSubscription( + any(SubscriptionInfo.class), eq(CALLING_PACKAGE)); + assertThat(mSubscriptionManagerServiceUT.getAccessibleSubscriptionInfoList( + CALLING_PACKAGE)).isEqualTo(List.of(FAKE_SUBSCRIPTION_INFO1.toSubscriptionInfo())); + // Test getActiveSubIdList, System + assertThat(mSubscriptionManagerServiceUT.getActiveSubIdList(false/*visible only*/)) + .isEqualTo(new int[]{subId1, subId2}); + // Test get getActiveSubInfoCount + assertThat(mSubscriptionManagerServiceUT.getActiveSubInfoCount( + CALLING_PACKAGE, CALLING_FEATURE, false)).isEqualTo(1); + // Test getActiveSubscriptionInfo + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfo( + subId1, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()).isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfo( + subId2, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()).isEqualTo(subId2); + // Test getActiveSubscriptionInfoForIccId + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForIccId( + FAKE_ICCID1, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForIccId( + FAKE_ICCID2, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId2); + // Test getActiveSubscriptionInfoForSimSlotIndex + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForSimSlotIndex( + 0, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoForSimSlotIndex( + 1, CALLING_PACKAGE, CALLING_FEATURE).getSubscriptionId()) + .isEqualTo(subId2); + // Test getActiveSubscriptionInfoList + assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoList( + CALLING_PACKAGE, CALLING_FEATURE, false).stream() + .map(SubscriptionInfo::getSubscriptionId) + .toList()).isEqualTo(List.of(subId1)); + // Test getAllSubInfoList + assertThat(mSubscriptionManagerServiceUT.getAllSubInfoList(CALLING_PACKAGE, + CALLING_FEATURE).stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1)); + // Test getAvailableSubscriptionInfoList + assertThat(mSubscriptionManagerServiceUT.getAvailableSubscriptionInfoList(CALLING_PACKAGE, + CALLING_FEATURE).stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1, subId2)); + // Test getDefaultDataSubId + assertThat(mSubscriptionManagerServiceUT.getDefaultDataSubId()).isEqualTo(subId1); + // Test getDefault<Sms/Voice>SubIdAsUser + assertThat(mSubscriptionManagerServiceUT.getDefaultSmsSubIdAsUser( + FAKE_USER_HANDLE.getIdentifier())).isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getDefaultSubIdAsUser( + FAKE_USER_HANDLE.getIdentifier())).isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getDefaultVoiceSubIdAsUser( + FAKE_USER_HANDLE.getIdentifier())).isEqualTo(subId1); + // Test getEnabledSubscriptionId + assertThat(mSubscriptionManagerServiceUT.getEnabledSubscriptionId(0)).isEqualTo( + subId1); + assertThat(mSubscriptionManagerServiceUT.getEnabledSubscriptionId(1)).isEqualTo( + subId2); + // Test getOpportunisticSubscriptions + mSubscriptionManagerServiceUT.setOpportunistic(true, subId1, CALLING_PACKAGE); + mSubscriptionManagerServiceUT.setOpportunistic(true, subId2, CALLING_PACKAGE); + processAllMessages(); + assertThat(mSubscriptionManagerServiceUT.getOpportunisticSubscriptions(CALLING_PACKAGE, + CALLING_FEATURE).stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1, subId2)); + // Test getSubscriptionInfo - can get both as it's an internal getter + assertThat(mSubscriptionManagerServiceUT.getSubscriptionInfo(subId1).getSubscriptionId()) + .isEqualTo(subId1); + assertThat(mSubscriptionManagerServiceUT.getSubscriptionInfo(subId2).getSubscriptionId()) + .isEqualTo(subId2); + // Test getSubscriptionInfoListAssociatedWithUser + mContextFixture.addCallingOrSelfPermission( + Manifest.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION); + assertThat(mSubscriptionManagerServiceUT.getSubscriptionInfoListAssociatedWithUser( + FAKE_USER_HANDLE).stream().map(SubscriptionInfo::getSubscriptionId) + .toList()).isEqualTo(List.of(subId1)); + // Test getSubscriptionsInGroup + setCarrierPrivilegesForSubId(true, subId1); + assertThat(mSubscriptionManagerServiceUT.getSubscriptionsInGroup( + ParcelUuid.fromString(FAKE_UUID1), CALLING_PACKAGE, CALLING_FEATURE) + .stream().map(SubscriptionInfo::getSubscriptionId).toList()) + .isEqualTo(List.of(subId1)); + // Test isActiveSubId + assertThat(mSubscriptionManagerServiceUT.isActiveSubId(subId1, CALLING_PACKAGE, + CALLING_FEATURE)).isTrue(); + assertThat(mSubscriptionManagerServiceUT.isActiveSubId(subId2, CALLING_PACKAGE, + CALLING_FEATURE)).isTrue(); + // Test isSubscriptionEnabled + assertThat(mSubscriptionManagerServiceUT.isSubscriptionEnabled(subId1)).isTrue(); + assertThat(mSubscriptionManagerServiceUT.isSubscriptionEnabled(subId2)).isTrue(); + } + + @Test public void testSetUsageSetting() { insertSubscription(FAKE_SUBSCRIPTION_INFO1); @@ -1844,7 +2152,7 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { assertThat(mSubscriptionManagerServiceUT.getAllSubInfoList( CALLING_PACKAGE, CALLING_FEATURE).isEmpty()).isTrue(); assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoList( - CALLING_PACKAGE, CALLING_FEATURE)).isEmpty(); + CALLING_PACKAGE, CALLING_FEATURE, true)).isEmpty(); } @Test @@ -2050,7 +2358,7 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { verify(mEuiccController).blockingGetEuiccProfileInfoList(eq(1)); List<SubscriptionInfo> subInfoList = mSubscriptionManagerServiceUT - .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE); + .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE, true); assertThat(subInfoList).hasSize(1); assertThat(subInfoList.get(0).getSimSlotIndex()).isEqualTo(1); assertThat(subInfoList.get(0).getSubscriptionId()).isEqualTo(1); @@ -2168,7 +2476,7 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { processAllMessages(); List<SubscriptionInfo> subInfoList = mSubscriptionManagerServiceUT - .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE); + .getActiveSubscriptionInfoList(CALLING_PACKAGE, CALLING_FEATURE, true); assertThat(subInfoList).hasSize(1); assertThat(subInfoList.get(0).isActive()).isTrue(); @@ -2288,16 +2596,17 @@ public class SubscriptionManagerServiceTest extends TelephonyTest { CALLING_PACKAGE, CALLING_FEATURE)).isEmpty(); assertThat(mSubscriptionManagerServiceUT.getActiveSubIdList(false)).isEmpty(); assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoList( - CALLING_PACKAGE, CALLING_FEATURE)).isEmpty(); + CALLING_PACKAGE, CALLING_FEATURE, true)).isEmpty(); setIdentifierAccess(true); mSubscriptionManagerServiceUT.addSubInfo(FAKE_MAC_ADDRESS2, FAKE_CARRIER_NAME2, 0, SubscriptionManager.SUBSCRIPTION_TYPE_REMOTE_SIM); assertThat(mSubscriptionManagerServiceUT.getActiveSubIdList(false)).isNotEmpty(); assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoList( - CALLING_PACKAGE, CALLING_FEATURE)).isNotEmpty(); + CALLING_PACKAGE, CALLING_FEATURE, true)).isNotEmpty(); assertThat(mSubscriptionManagerServiceUT.getActiveSubscriptionInfoList( - CALLING_PACKAGE, CALLING_FEATURE).get(0).getIccId()).isEqualTo(FAKE_MAC_ADDRESS2); + CALLING_PACKAGE, CALLING_FEATURE, true).get(0).getIccId()) + .isEqualTo(FAKE_MAC_ADDRESS2); } @Test |