• 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.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