• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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