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.Context; 25 import android.content.Intent; 26 import android.os.Looper; 27 import android.os.Message; 28 import android.os.ParcelUuid; 29 import android.os.PersistableBundle; 30 import android.telephony.CarrierConfigManager; 31 import android.telephony.SubscriptionInfo; 32 import android.telephony.SubscriptionManager; 33 import android.telephony.TelephonyManager; 34 import android.telephony.euicc.EuiccManager; 35 36 import org.junit.After; 37 import org.junit.Before; 38 import org.junit.Test; 39 import org.mockito.Mock; 40 import org.mockito.MockitoAnnotations; 41 42 import java.util.ArrayList; 43 import java.util.UUID; 44 45 public class ONSProfileConfiguratorTest extends ONSBaseTest { 46 private static final String TAG = ONSProfileConfiguratorTest.class.getName(); 47 private static final int TEST_SUB_ID = 1; 48 @Mock SubscriptionManager mMockSubManager; 49 @Mock SubscriptionInfo mMockSubscriptionInfo1; 50 @Mock SubscriptionInfo mMockSubscriptionInfo2; 51 @Mock EuiccManager mMockEuiccMngr; 52 @Mock TelephonyManager mMockTelephonyManager; 53 @Mock CarrierConfigManager mMockCarrierConfigManager; 54 @Mock private Context mMockContext; 55 @Mock private ONSProfileActivator mMockONSProfileActivator; 56 @Mock private ONSProfileConfigurator.ONSProfConfigListener mMockConfigListener; 57 58 @Before setUp()59 public void setUp() throws Exception { 60 super.setUp("ONSTest"); 61 MockitoAnnotations.initMocks(this); 62 Looper.prepare(); 63 } 64 65 @Test testDeleteSubscription()66 public void testDeleteSubscription() { 67 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 68 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 69 70 Intent intent = new Intent(); 71 intent.putExtra( 72 ONSProfileConfigurator.PARAM_REQUEST_TYPE, 73 ONSProfileConfigurator.REQUEST_CODE_DELETE_SUB); 74 intent.putExtra(ONSProfileConfigurator.PARAM_SUB_ID, TEST_SUB_ID); 75 Message msg = new Message(); 76 msg.obj = intent; 77 msg.arg1 = EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK; 78 mOnsProfileConfigurator.callbackMsgHandler(msg); 79 80 verify(mMockConfigListener).onOppSubscriptionDeleted(TEST_SUB_ID); 81 } 82 83 @Test testGroupSubscriptionAndSetOpportunistic()84 public void testGroupSubscriptionAndSetOpportunistic() { 85 doReturn(TEST_SUB_ID).when(mMockSubscriptionInfo1).getSubscriptionId(); 86 87 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 88 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 89 90 ParcelUuid parcelUuid = new ParcelUuid(new UUID(1, 2)); 91 mOnsProfileConfigurator.groupWithPSIMAndSetOpportunistic( 92 mMockSubscriptionInfo1, parcelUuid); 93 94 ArrayList<Integer> subList = new ArrayList<>(); 95 subList.add(TEST_SUB_ID); 96 verify(mMockSubManager).addSubscriptionsIntoGroup(subList, parcelUuid); 97 } 98 99 @Test testAlreadyGroupedSubscriptions()100 public void testAlreadyGroupedSubscriptions() { 101 doReturn(TEST_SUB_ID).when(mMockSubscriptionInfo1).getSubscriptionId(); 102 doReturn(true).when(mMockSubscriptionInfo1).isOpportunistic(); 103 104 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 105 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 106 107 ParcelUuid uuid = new ParcelUuid(new UUID(1, 2)); 108 doReturn(uuid).when(mMockSubscriptionInfo1).getGroupUuid(); 109 110 mOnsProfileConfigurator.groupWithPSIMAndSetOpportunistic(mMockSubscriptionInfo1, uuid); 111 112 verifyNoMoreInteractions(mMockSubManager); 113 } 114 115 @Test testActivateSubscription()116 public void testActivateSubscription() { 117 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 118 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 119 120 Intent intent = new Intent(mContext, ONSProfileResultReceiver.class); 121 intent.setAction(ONSProfileConfigurator.ACTION_ONS_ESIM_CONFIG); 122 intent.putExtra( 123 ONSProfileConfigurator.PARAM_REQUEST_TYPE, 124 ONSProfileConfigurator.REQUEST_CODE_ACTIVATE_SUB); 125 intent.putExtra(ONSProfileConfigurator.PARAM_SUB_ID, TEST_SUB_ID); 126 PendingIntent callbackIntent = 127 PendingIntent.getBroadcast( 128 mContext, 129 ONSProfileConfigurator.REQUEST_CODE_ACTIVATE_SUB, 130 intent, 131 PendingIntent.FLAG_IMMUTABLE); 132 133 mOnsProfileConfigurator.activateSubscription(TEST_SUB_ID); 134 verify(mMockEuiccMngr).switchToSubscription(TEST_SUB_ID, callbackIntent); 135 } 136 137 @Test testdeleteInactiveOpportunisticSubscriptionsWithNoneSavedOppSubs()138 public void testdeleteInactiveOpportunisticSubscriptionsWithNoneSavedOppSubs() { 139 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 140 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 141 142 PersistableBundle persistableBundle = new PersistableBundle(); 143 persistableBundle.putIntArray( 144 CarrierConfigManager.KEY_OPPORTUNISTIC_CARRIER_IDS_INT_ARRAY, null); 145 doReturn(persistableBundle).when(mMockCarrierConfigManager).getConfigForSubId(TEST_SUB_ID); 146 147 boolean res = mOnsProfileConfigurator.deleteInactiveOpportunisticSubscriptions(TEST_SUB_ID); 148 // verify(mOnsProfileConfigurator).deleteOldOpportunisticESimsOfPSIMOperator(TEST_SUB_ID); 149 assertEquals(res, false); 150 } 151 152 @Test testdeleteInactiveOpportunisticSubscriptionsWithSavedOppSubs()153 public void testdeleteInactiveOpportunisticSubscriptionsWithSavedOppSubs() { 154 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 155 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 156 157 doReturn(1).when(mMockSubscriptionInfo1).getSubscriptionId(); 158 doReturn(true).when(mMockSubManager).isActiveSubscriptionId(1); 159 160 doReturn(2).when(mMockSubscriptionInfo2).getSubscriptionId(); 161 doReturn(false).when(mMockSubManager).isActiveSubscriptionId(2); 162 163 ArrayList<SubscriptionInfo> oppSubList = new ArrayList<>(); 164 oppSubList.add(mMockSubscriptionInfo1); 165 oppSubList.add(mMockSubscriptionInfo2); 166 doReturn(oppSubList).when(mMockSubManager).getOpportunisticSubscriptions(); 167 168 Intent intent = new Intent(mContext, ONSProfileResultReceiver.class); 169 intent.setAction(ONSProfileConfigurator.ACTION_ONS_ESIM_CONFIG); 170 intent.putExtra( 171 ONSProfileConfigurator.PARAM_REQUEST_TYPE, 172 ONSProfileConfigurator.REQUEST_CODE_DELETE_SUB); 173 intent.putExtra(ONSProfileConfigurator.PARAM_SUB_ID, 2); 174 PendingIntent callbackIntent2 = 175 PendingIntent.getBroadcast( 176 mContext, 177 ONSProfileConfigurator.REQUEST_CODE_DELETE_SUB, 178 intent, 179 PendingIntent.FLAG_MUTABLE); 180 181 boolean res = mOnsProfileConfigurator.deleteInactiveOpportunisticSubscriptions(2); 182 verify(mMockEuiccMngr).deleteSubscription(2, callbackIntent2); 183 verifyNoMoreInteractions(mMockEuiccMngr); 184 //verify(mMockEuiccManager).deleteSubscription(2, callbackIntent2); 185 // verify(mOnsProfileConfigurator).deleteOldOpportunisticESimsOfPSIMOperator(TEST_SUB_ID); 186 assertEquals(res, true); 187 } 188 189 @Test testFindOpportunisticSubscription()190 public void testFindOpportunisticSubscription() { 191 ONSProfileConfigurator mOnsProfileConfigurator = new ONSProfileConfigurator(mContext, 192 mMockSubManager, mMockCarrierConfigManager, mMockEuiccMngr, mMockConfigListener); 193 194 int[] oppCarrierList = {2}; 195 PersistableBundle persistableBundle = new PersistableBundle(); 196 persistableBundle.putIntArray( 197 CarrierConfigManager.KEY_OPPORTUNISTIC_CARRIER_IDS_INT_ARRAY, oppCarrierList); 198 doReturn(persistableBundle).when(mMockCarrierConfigManager).getConfigForSubId(TEST_SUB_ID); 199 200 ArrayList<SubscriptionInfo> oppSubList = new ArrayList<>(); 201 oppSubList.add(mMockSubscriptionInfo1); 202 oppSubList.add(mMockSubscriptionInfo2); 203 doReturn(oppSubList).when(mMockSubManager).getAvailableSubscriptionInfoList(); 204 205 ParcelUuid groupUUID = new ParcelUuid(new UUID(0, 100)); 206 doReturn(groupUUID).when(mMockSubscriptionInfo1).getGroupUuid(); 207 doReturn(true).when(mMockSubscriptionInfo1).isEmbedded(); 208 doReturn(1).when(mMockSubscriptionInfo1).getCarrierId(); 209 doReturn(mMockSubscriptionInfo1).when(mMockSubManager) 210 .getActiveSubscriptionInfo(TEST_SUB_ID); 211 doReturn(TEST_SUB_ID).when(mMockSubscriptionInfo1).getSubscriptionId(); 212 213 doReturn(null).when(mMockSubscriptionInfo2).getGroupUuid(); 214 doReturn(true).when(mMockSubscriptionInfo2).isEmbedded(); 215 doReturn(2).when(mMockSubscriptionInfo2).getCarrierId(); 216 doReturn(mMockSubscriptionInfo2).when(mMockSubManager).getActiveSubscriptionInfo(2); 217 doReturn(2).when(mMockSubscriptionInfo2).getSubscriptionId(); 218 219 SubscriptionInfo oppSubscription = mOnsProfileConfigurator 220 .findOpportunisticSubscription(TEST_SUB_ID); 221 assertEquals(oppSubscription, mMockSubscriptionInfo2); 222 223 doReturn(groupUUID).when(mMockSubscriptionInfo2).getGroupUuid(); 224 assertEquals(oppSubscription, mMockSubscriptionInfo2); 225 } 226 227 @After tearDown()228 public void tearDown() throws Exception { 229 super.tearDown(); 230 } 231 } 232