1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.ons; 18 19 import static org.mockito.Mockito.doReturn; 20 import static org.mockito.Mockito.verify; 21 import static org.mockito.Mockito.verifyNoMoreInteractions; 22 23 import android.app.PendingIntent; 24 import android.content.Intent; 25 import android.os.Looper; 26 import android.os.Message; 27 import android.os.ParcelUuid; 28 import android.os.PersistableBundle; 29 import android.telephony.CarrierConfigManager; 30 import android.telephony.SubscriptionInfo; 31 import android.telephony.SubscriptionManager; 32 import android.telephony.euicc.EuiccManager; 33 34 import org.junit.After; 35 import org.junit.Before; 36 import org.junit.Test; 37 import org.mockito.Mock; 38 import org.mockito.MockitoAnnotations; 39 40 import java.util.ArrayList; 41 import java.util.List; 42 import java.util.UUID; 43 44 public class ONSProfileConfiguratorTest extends ONSBaseTest { 45 private static final String TAG = ONSProfileConfiguratorTest.class.getName(); 46 private static final int TEST_SUB_ID = 1; 47 @Mock 48 SubscriptionManager mMockSubManager; 49 @Mock 50 SubscriptionInfo mMockSubscriptionInfo1; 51 @Mock 52 SubscriptionInfo mMockSubscriptionInfo2; 53 @Mock 54 EuiccManager mMockEuiccMngr; 55 @Mock 56 EuiccManager mMockEuiccMngrCard1; 57 @Mock 58 EuiccManager mMockEuiccMngrCard2; 59 @Mock 60 CarrierConfigManager mMockCarrierConfigManager; 61 @Mock 62 private ONSProfileConfigurator.ONSProfConfigListener mMockConfigListener; 63 64 @Before setUp()65 public void setUp() throws Exception { 66 super.setUp("ONSTest"); 67 MockitoAnnotations.initMocks(this); 68 doReturn(mMockEuiccMngrCard1).when(mMockEuiccMngr).createForCardId(1); 69 doReturn(mMockEuiccMngrCard2).when(mMockEuiccMngr).createForCardId(2); 70 Looper.prepare(); 71 } 72 73 @Test testDeleteSubscription()74 public void testDeleteSubscription() { 75 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 76 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 77 78 Intent intent = new Intent(); 79 intent.putExtra( 80 ONSProfileConfigurator.PARAM_REQUEST_TYPE, 81 ONSProfileConfigurator.REQUEST_CODE_DELETE_SUB); 82 intent.putExtra(ONSProfileConfigurator.PARAM_SUB_ID, TEST_SUB_ID); 83 Message msg = new Message(); 84 msg.obj = intent; 85 msg.arg1 = EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK; 86 mOnsProfileConfigurator.callbackMsgHandler(msg); 87 88 verify(mMockConfigListener).onOppSubscriptionDeleted(TEST_SUB_ID); 89 } 90 91 @Test testGroupSubscriptionAndSetOpportunistic()92 public void testGroupSubscriptionAndSetOpportunistic() { 93 doReturn(TEST_SUB_ID).when(mMockSubscriptionInfo1).getSubscriptionId(); 94 95 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 96 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 97 98 ParcelUuid parcelUuid = new ParcelUuid(new UUID(1, 2)); 99 mOnsProfileConfigurator.groupWithPSIMAndSetOpportunistic( 100 mMockSubscriptionInfo1, parcelUuid); 101 102 List<Integer> subList = new ArrayList<>(); 103 subList.add(TEST_SUB_ID); 104 verify(mMockSubManager).addSubscriptionsIntoGroup(subList, parcelUuid); 105 } 106 107 @Test testAlreadyGroupedSubscriptions()108 public void testAlreadyGroupedSubscriptions() { 109 doReturn(TEST_SUB_ID).when(mMockSubscriptionInfo1).getSubscriptionId(); 110 doReturn(true).when(mMockSubscriptionInfo1).isOpportunistic(); 111 112 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 113 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 114 115 ParcelUuid uuid = new ParcelUuid(new UUID(1, 2)); 116 doReturn(uuid).when(mMockSubscriptionInfo1).getGroupUuid(); 117 118 mOnsProfileConfigurator.groupWithPSIMAndSetOpportunistic(mMockSubscriptionInfo1, uuid); 119 120 verifyNoMoreInteractions(mMockSubManager); 121 } 122 123 @Test testActivateSubscription()124 public void testActivateSubscription() { 125 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 126 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 127 128 Intent intent = new Intent(mContext, ONSProfileResultReceiver.class); 129 intent.setAction(ONSProfileConfigurator.ACTION_ONS_ESIM_CONFIG); 130 intent.putExtra( 131 ONSProfileConfigurator.PARAM_REQUEST_TYPE, 132 ONSProfileConfigurator.REQUEST_CODE_ACTIVATE_SUB); 133 intent.putExtra(ONSProfileConfigurator.PARAM_SUB_ID, TEST_SUB_ID); 134 PendingIntent callbackIntent = 135 PendingIntent.getBroadcast( 136 mContext, 137 ONSProfileConfigurator.REQUEST_CODE_ACTIVATE_SUB, 138 intent, 139 PendingIntent.FLAG_IMMUTABLE); 140 141 List<SubscriptionInfo> activeSubInfos = new ArrayList<>(); 142 143 doReturn(1).when(mMockSubscriptionInfo1).getSubscriptionId(); 144 doReturn(1).when(mMockSubscriptionInfo1).getCardId(); 145 activeSubInfos.add(mMockSubscriptionInfo1); 146 147 doReturn(2).when(mMockSubscriptionInfo2).getSubscriptionId(); 148 doReturn(2).when(mMockSubscriptionInfo2).getCardId(); 149 activeSubInfos.add(mMockSubscriptionInfo2); 150 doReturn(activeSubInfos).when(mMockSubManager).getAvailableSubscriptionInfoList(); 151 152 mOnsProfileConfigurator.activateSubscription(TEST_SUB_ID); 153 verify(mMockEuiccMngrCard1).switchToSubscription(TEST_SUB_ID, callbackIntent); 154 } 155 156 @Test testdeleteInactiveOpportunisticSubscriptionsWithNoneSavedOppSubs()157 public void testdeleteInactiveOpportunisticSubscriptionsWithNoneSavedOppSubs() { 158 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 159 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 160 161 PersistableBundle persistableBundle = new PersistableBundle(); 162 persistableBundle.putIntArray( 163 CarrierConfigManager.KEY_OPPORTUNISTIC_CARRIER_IDS_INT_ARRAY, null); 164 doReturn(persistableBundle).when(mMockCarrierConfigManager).getConfigForSubId(TEST_SUB_ID); 165 166 boolean res = mOnsProfileConfigurator.deleteInactiveOpportunisticSubscriptions(TEST_SUB_ID); 167 // verify(mOnsProfileConfigurator).deleteOldOpportunisticESimsOfPSIMOperator(TEST_SUB_ID); 168 assertEquals(res, false); 169 } 170 171 @Test testdeleteInactiveOpportunisticSubscriptionsWithSavedOppSubs()172 public void testdeleteInactiveOpportunisticSubscriptionsWithSavedOppSubs() { 173 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 174 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 175 176 doReturn(1).when(mMockSubscriptionInfo1).getSubscriptionId(); 177 doReturn(1).when(mMockSubscriptionInfo1).getCardId(); 178 doReturn(true).when(mMockSubManager).isActiveSubscriptionId(1); 179 180 doReturn(2).when(mMockSubscriptionInfo2).getSubscriptionId(); 181 doReturn(2).when(mMockSubscriptionInfo2).getCardId(); 182 doReturn(false).when(mMockSubManager).isActiveSubscriptionId(2); 183 184 List<SubscriptionInfo> oppSubList = new ArrayList<>(); 185 oppSubList.add(mMockSubscriptionInfo1); 186 oppSubList.add(mMockSubscriptionInfo2); 187 doReturn(oppSubList).when(mMockSubManager).getOpportunisticSubscriptions(); 188 doReturn(oppSubList).when(mMockSubManager).getAvailableSubscriptionInfoList(); 189 190 Intent intent = new Intent(mContext, ONSProfileResultReceiver.class); 191 intent.setAction(ONSProfileConfigurator.ACTION_ONS_ESIM_CONFIG); 192 intent.putExtra( 193 ONSProfileConfigurator.PARAM_REQUEST_TYPE, 194 ONSProfileConfigurator.REQUEST_CODE_DELETE_SUB); 195 intent.putExtra(ONSProfileConfigurator.PARAM_SUB_ID, 2); 196 PendingIntent callbackIntent2 = 197 PendingIntent.getBroadcast( 198 mContext, 199 ONSProfileConfigurator.REQUEST_CODE_DELETE_SUB, 200 intent, 201 PendingIntent.FLAG_MUTABLE); 202 203 boolean res = mOnsProfileConfigurator.deleteInactiveOpportunisticSubscriptions(2); 204 verify(mMockEuiccMngrCard2).deleteSubscription(2, callbackIntent2); 205 verifyNoMoreInteractions(mMockEuiccMngrCard2); 206 //verify(mMockEuiccManager).deleteSubscription(2, callbackIntent2); 207 // verify(mOnsProfileConfigurator).deleteOldOpportunisticESimsOfPSIMOperator(TEST_SUB_ID); 208 assertEquals(res, true); 209 } 210 211 @Test testFindOpportunisticSubscription()212 public void testFindOpportunisticSubscription() { 213 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 214 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 215 216 int[] oppCarrierList = {2}; 217 PersistableBundle persistableBundle = new PersistableBundle(); 218 persistableBundle.putIntArray( 219 CarrierConfigManager.KEY_OPPORTUNISTIC_CARRIER_IDS_INT_ARRAY, oppCarrierList); 220 doReturn(persistableBundle).when(mMockCarrierConfigManager).getConfigForSubId(TEST_SUB_ID); 221 222 List<SubscriptionInfo> oppSubList = new ArrayList<>(); 223 oppSubList.add(mMockSubscriptionInfo1); 224 oppSubList.add(mMockSubscriptionInfo2); 225 doReturn(oppSubList).when(mMockSubManager).getAvailableSubscriptionInfoList(); 226 227 ParcelUuid groupUUID = new ParcelUuid(new UUID(0, 100)); 228 doReturn(groupUUID).when(mMockSubscriptionInfo1).getGroupUuid(); 229 doReturn(true).when(mMockSubscriptionInfo1).isEmbedded(); 230 doReturn(1).when(mMockSubscriptionInfo1).getCarrierId(); 231 doReturn(mMockSubscriptionInfo1).when(mMockSubManager) 232 .getActiveSubscriptionInfo(TEST_SUB_ID); 233 doReturn(TEST_SUB_ID).when(mMockSubscriptionInfo1).getSubscriptionId(); 234 235 doReturn(null).when(mMockSubscriptionInfo2).getGroupUuid(); 236 doReturn(true).when(mMockSubscriptionInfo2).isEmbedded(); 237 doReturn(2).when(mMockSubscriptionInfo2).getCarrierId(); 238 doReturn(mMockSubscriptionInfo2).when(mMockSubManager).getActiveSubscriptionInfo(2); 239 doReturn(2).when(mMockSubscriptionInfo2).getSubscriptionId(); 240 241 SubscriptionInfo oppSubscription = mOnsProfileConfigurator 242 .findOpportunisticSubscription(TEST_SUB_ID); 243 assertEquals(oppSubscription, mMockSubscriptionInfo2); 244 245 doReturn(groupUUID).when(mMockSubscriptionInfo2).getGroupUuid(); 246 assertEquals(oppSubscription, mMockSubscriptionInfo2); 247 } 248 249 @After tearDown()250 public void tearDown() throws Exception { 251 super.tearDown(); 252 } 253 } 254