• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.google.android.iwlan;
18 
19 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
20 
21 import static org.junit.Assert.assertArrayEquals;
22 import static org.junit.Assert.assertEquals;
23 import static org.mockito.Mockito.anyInt;
24 import static org.mockito.Mockito.anyString;
25 import static org.mockito.Mockito.lenient;
26 import static org.mockito.Mockito.when;
27 
28 import android.content.Context;
29 import android.os.PersistableBundle;
30 import android.telephony.CarrierConfigManager;
31 import android.telephony.SubscriptionInfo;
32 import android.telephony.SubscriptionManager;
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 import org.mockito.MockitoSession;
40 
41 public class IwlanCarrierConfigTest {
42     private static final int DEFAULT_SUB_ID = 0;
43     private static final int DEFAULT_SLOT_ID = 1;
44 
45     private static final String KEY_NON_EXISTING = "non_existing_key";
46     private static final String KEY_CONFIG_IN_SUB_INT = "iwlan.key_config_in_sub_int";
47     private static final String KEY_CONFIG_IN_DEFAULT_INT = "iwlan.key_config_in_default_int";
48     private static final String KEY_CONFIG_IN_SUB_LONG = "iwlan.key_config_in_sub_long";
49     private static final String KEY_CONFIG_IN_DEFAULT_LONG = "iwlan.key_config_in_default_long";
50     private static final String KEY_CONFIG_IN_SUB_DOUBLE = "iwlan.key_config_in_sub_double";
51     private static final String KEY_CONFIG_IN_DEFAULT_DOUBLE = "iwlan.key_config_in_default_double";
52     private static final String KEY_CONFIG_IN_SUB_BOOLEAN = "iwlan.key_config_in_sub_boolean";
53     private static final String KEY_CONFIG_IN_DEFAULT_BOOLEAN =
54             "iwlan.key_config_in_default_boolean";
55     private static final String KEY_CONFIG_IN_SUB_STRING = "iwlan.key_config_in_sub_string";
56     private static final String KEY_CONFIG_IN_DEFAULT_STRING = "iwlan.key_config_in_default_string";
57     private static final String KEY_CONFIG_IN_SUB_INT_ARRAY = "iwlan.key_config_in_sub_int_array";
58     private static final String KEY_CONFIG_IN_DEFAULT_INT_ARRAY =
59             "iwlan.key_config_in_default_int_array";
60     private static final String KEY_CONFIG_IN_SUB_LONG_ARRAY = "iwlan.key_config_in_sub_long_array";
61     private static final String KEY_CONFIG_IN_DEFAULT_LONG_ARRAY =
62             "iwlan.key_config_in_default_long_array";
63     private static final String KEY_CONFIG_IN_SUB_DOUBLE_ARRAY =
64             "iwlan.key_config_in_sub_double_array";
65     private static final String KEY_CONFIG_IN_DEFAULT_DOUBLE_ARRAY =
66             "iwlan.key_config_in_default_double_array";
67     private static final String KEY_CONFIG_IN_SUB_BOOLEAN_ARRAY =
68             "iwlan.key_config_in_sub_boolean_array";
69     private static final String KEY_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY =
70             "iwlan.key_config_in_default_boolean_array";
71     private static final String KEY_CONFIG_IN_SUB_STRING_ARRAY =
72             "iwlan.key_config_in_sub_string_array";
73     private static final String KEY_CONFIG_IN_DEFAULT_STRING_ARRAY =
74             "iwlan.key_config_in_default_string_array";
75 
76     private static final int VALUE_CONFIG_IN_SUB_INT = 10;
77     private static final int VALUE_CONFIG_IN_DEFAULT_INT = 20;
78     private static final long VALUE_CONFIG_IN_SUB_LONG = 10;
79     private static final long VALUE_CONFIG_IN_DEFAULT_LONG = 20;
80     private static final double VALUE_CONFIG_IN_SUB_DOUBLE = 10.0;
81     private static final double VALUE_CONFIG_IN_DEFAULT_DOUBLE = 20.0;
82     private static final boolean VALUE_CONFIG_IN_SUB_BOOLEAN = true;
83     private static final boolean VALUE_CONFIG_IN_DEFAULT_BOOLEAN = false;
84     private static final String VALUE_CONFIG_IN_SUB_STRING = "value_config_in_sub_string";
85     private static final String VALUE_CONFIG_IN_DEFAULT_STRING = "value_config_in_default_string";
86     private static final int[] VALUE_CONFIG_IN_SUB_INT_ARRAY = new int[] {10, 20};
87     private static final int[] VALUE_CONFIG_IN_DEFAULT_INT_ARRAY = new int[] {30, 40};
88     private static final long[] VALUE_CONFIG_IN_SUB_LONG_ARRAY = new long[] {10, 20};
89     private static final long[] VALUE_CONFIG_IN_DEFAULT_LONG_ARRAY = new long[] {30, 40};
90     private static final double[] VALUE_CONFIG_IN_SUB_DOUBLE_ARRAY = new double[] {10, 20};
91     private static final double[] VALUE_CONFIG_IN_DEFAULT_DOUBLE_ARRAY = new double[] {30, 40};
92     private static final boolean[] VALUE_CONFIG_IN_SUB_BOOLEAN_ARRAY = new boolean[] {true, true};
93     private static final boolean[] VALUE_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY =
94             new boolean[] {false, false};
95     private static final String[] VALUE_CONFIG_IN_SUB_STRING_ARRAY =
96             new String[] {"value_config_in_sub_string", "second_value_config_in_sub_string"};
97     private static final String[] VALUE_CONFIG_IN_DEFAULT_STRING_ARRAY =
98             new String[] {
99                 "value_config_in_default_string", "second_value_config_in_default_string"
100             };
101 
102     @Mock private Context mMockContext;
103     @Mock private CarrierConfigManager mMockCarrierConfigManager;
104     @Mock private SubscriptionManager mMockSubscriptionManager;
105     @Mock private SubscriptionInfo mMockSubscriptionInfo;
106 
107     private PersistableBundle mBundleForSub;
108     private PersistableBundle mBundleForDefault;
109 
110     MockitoSession mStaticMockSession;
111 
112     @Before
setUp()113     public void setUp() {
114         MockitoAnnotations.initMocks(this);
115 
116         mStaticMockSession =
117                 mockitoSession()
118                         .mockStatic(SubscriptionManager.class)
119                         .mockStatic(CarrierConfigManager.class)
120                         .startMocking();
121 
122         when(mMockContext.getSystemService(CarrierConfigManager.class))
123                 .thenReturn(mMockCarrierConfigManager);
124         when(mMockContext.getSystemService(SubscriptionManager.class))
125                 .thenReturn(mMockSubscriptionManager);
126 
127         when(mMockSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(anyInt()))
128                 .thenReturn(mMockSubscriptionInfo);
129         when(mMockSubscriptionInfo.getSubscriptionId()).thenReturn(DEFAULT_SUB_ID);
130 
131         mBundleForSub = createCarrierConfigForSub();
132         lenient()
133                 .when(mMockCarrierConfigManager.getConfigForSubId(anyInt(), anyString()))
134                 .thenReturn(mBundleForSub);
135 
136         mBundleForDefault = createCarrierConfigForDefault();
137         lenient().when(CarrierConfigManager.getDefaultConfig()).thenReturn(mBundleForDefault);
138     }
139 
140     @After
cleanUp()141     public void cleanUp() throws Exception {
142         mStaticMockSession.finishMocking();
143     }
144 
createCarrierConfigForSub()145     private static PersistableBundle createCarrierConfigForSub() {
146         PersistableBundle bundle = new PersistableBundle();
147         bundle.putInt(KEY_CONFIG_IN_SUB_INT, VALUE_CONFIG_IN_SUB_INT);
148         bundle.putLong(KEY_CONFIG_IN_SUB_LONG, VALUE_CONFIG_IN_SUB_LONG);
149         bundle.putDouble(KEY_CONFIG_IN_SUB_DOUBLE, VALUE_CONFIG_IN_SUB_DOUBLE);
150         bundle.putBoolean(KEY_CONFIG_IN_SUB_BOOLEAN, VALUE_CONFIG_IN_SUB_BOOLEAN);
151         bundle.putString(KEY_CONFIG_IN_SUB_STRING, VALUE_CONFIG_IN_SUB_STRING);
152         bundle.putIntArray(KEY_CONFIG_IN_SUB_INT_ARRAY, VALUE_CONFIG_IN_SUB_INT_ARRAY);
153         bundle.putLongArray(KEY_CONFIG_IN_SUB_LONG_ARRAY, VALUE_CONFIG_IN_SUB_LONG_ARRAY);
154         bundle.putDoubleArray(KEY_CONFIG_IN_SUB_DOUBLE_ARRAY, VALUE_CONFIG_IN_SUB_DOUBLE_ARRAY);
155         bundle.putBooleanArray(KEY_CONFIG_IN_SUB_BOOLEAN_ARRAY, VALUE_CONFIG_IN_SUB_BOOLEAN_ARRAY);
156         bundle.putStringArray(KEY_CONFIG_IN_SUB_STRING_ARRAY, VALUE_CONFIG_IN_SUB_STRING_ARRAY);
157         return bundle;
158     }
159 
createCarrierConfigForDefault()160     private static PersistableBundle createCarrierConfigForDefault() {
161         PersistableBundle bundle = new PersistableBundle();
162         bundle.putInt(KEY_CONFIG_IN_DEFAULT_INT, VALUE_CONFIG_IN_DEFAULT_INT);
163         bundle.putLong(KEY_CONFIG_IN_DEFAULT_LONG, VALUE_CONFIG_IN_DEFAULT_LONG);
164         bundle.putDouble(KEY_CONFIG_IN_DEFAULT_DOUBLE, VALUE_CONFIG_IN_DEFAULT_DOUBLE);
165         bundle.putBoolean(KEY_CONFIG_IN_DEFAULT_BOOLEAN, VALUE_CONFIG_IN_DEFAULT_BOOLEAN);
166         bundle.putString(KEY_CONFIG_IN_DEFAULT_STRING, VALUE_CONFIG_IN_DEFAULT_STRING);
167         bundle.putIntArray(KEY_CONFIG_IN_DEFAULT_INT_ARRAY, VALUE_CONFIG_IN_DEFAULT_INT_ARRAY);
168         bundle.putLongArray(KEY_CONFIG_IN_DEFAULT_LONG_ARRAY, VALUE_CONFIG_IN_DEFAULT_LONG_ARRAY);
169         bundle.putDoubleArray(
170                 KEY_CONFIG_IN_DEFAULT_DOUBLE_ARRAY, VALUE_CONFIG_IN_DEFAULT_DOUBLE_ARRAY);
171         bundle.putBooleanArray(
172                 KEY_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY, VALUE_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY);
173         bundle.putStringArray(
174                 KEY_CONFIG_IN_DEFAULT_STRING_ARRAY, VALUE_CONFIG_IN_DEFAULT_STRING_ARRAY);
175         return bundle;
176     }
177 
178     @Test
testGetConfig_ValidRetrieval()179     public void testGetConfig_ValidRetrieval() {
180         int configInt =
181                 IwlanCarrierConfig.getConfigInt(
182                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_INT);
183         assertEquals(VALUE_CONFIG_IN_SUB_INT, configInt);
184 
185         long configLong =
186                 IwlanCarrierConfig.getConfigLong(
187                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_LONG);
188         assertEquals(VALUE_CONFIG_IN_SUB_LONG, configLong);
189 
190         double configDouble =
191                 IwlanCarrierConfig.getConfigDouble(
192                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_DOUBLE);
193         assertEquals(VALUE_CONFIG_IN_SUB_DOUBLE, configDouble, 0);
194 
195         boolean configBoolean =
196                 IwlanCarrierConfig.getConfigBoolean(
197                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_BOOLEAN);
198         assertEquals(VALUE_CONFIG_IN_SUB_BOOLEAN, configBoolean);
199 
200         String configString =
201                 IwlanCarrierConfig.getConfigString(
202                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_STRING);
203         assertEquals(VALUE_CONFIG_IN_SUB_STRING, configString);
204 
205         int[] configIntArray =
206                 IwlanCarrierConfig.getConfigIntArray(
207                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_INT_ARRAY);
208         assertArrayEquals(VALUE_CONFIG_IN_SUB_INT_ARRAY, configIntArray);
209 
210         long[] configLongArray =
211                 IwlanCarrierConfig.getConfigLongArray(
212                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_LONG_ARRAY);
213         assertArrayEquals(VALUE_CONFIG_IN_SUB_LONG_ARRAY, configLongArray);
214 
215         double[] configDoubleArray =
216                 IwlanCarrierConfig.getConfigDoubleArray(
217                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_DOUBLE_ARRAY);
218         assertArrayEquals(VALUE_CONFIG_IN_SUB_DOUBLE_ARRAY, configDoubleArray, 0);
219 
220         boolean[] configBooleanArray =
221                 IwlanCarrierConfig.getConfigBooleanArray(
222                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_BOOLEAN_ARRAY);
223         assertArrayEquals(VALUE_CONFIG_IN_SUB_BOOLEAN_ARRAY, configBooleanArray);
224 
225         String[] configStringArray =
226                 IwlanCarrierConfig.getConfigStringArray(
227                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_SUB_STRING_ARRAY);
228         assertArrayEquals(VALUE_CONFIG_IN_SUB_STRING_ARRAY, configStringArray);
229     }
230 
231     @Test
testGetConfig_KeyNotFound()232     public void testGetConfig_KeyNotFound() {
233         // Default value from getDefaultConfig
234         int configInt =
235                 IwlanCarrierConfig.getConfigInt(
236                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_INT);
237         assertEquals(VALUE_CONFIG_IN_DEFAULT_INT, configInt);
238 
239         long configLong =
240                 IwlanCarrierConfig.getConfigLong(
241                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_LONG);
242         assertEquals(VALUE_CONFIG_IN_DEFAULT_LONG, configLong);
243 
244         double configDouble =
245                 IwlanCarrierConfig.getConfigDouble(
246                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_DOUBLE);
247         assertEquals(VALUE_CONFIG_IN_DEFAULT_DOUBLE, configDouble, 0);
248 
249         boolean configBoolean =
250                 IwlanCarrierConfig.getConfigBoolean(
251                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_BOOLEAN);
252         assertEquals(VALUE_CONFIG_IN_DEFAULT_BOOLEAN, configBoolean);
253 
254         String configString =
255                 IwlanCarrierConfig.getConfigString(
256                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_STRING);
257         assertEquals(VALUE_CONFIG_IN_DEFAULT_STRING, configString);
258 
259         int[] configIntArray =
260                 IwlanCarrierConfig.getConfigIntArray(
261                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_INT_ARRAY);
262         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_INT_ARRAY, configIntArray);
263 
264         long[] configLongArray =
265                 IwlanCarrierConfig.getConfigLongArray(
266                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_LONG_ARRAY);
267         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_LONG_ARRAY, configLongArray);
268 
269         double[] configDoubleArray =
270                 IwlanCarrierConfig.getConfigDoubleArray(
271                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_DOUBLE_ARRAY);
272         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_DOUBLE_ARRAY, configDoubleArray, 0);
273 
274         boolean[] configBooleanArray =
275                 IwlanCarrierConfig.getConfigBooleanArray(
276                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY);
277         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY, configBooleanArray);
278 
279         String[] configStringArray =
280                 IwlanCarrierConfig.getConfigStringArray(
281                         mMockContext, DEFAULT_SLOT_ID, KEY_CONFIG_IN_DEFAULT_STRING_ARRAY);
282         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_STRING_ARRAY, configStringArray);
283     }
284 
285     @Test
testGetDefaultConfig_KeyFound()286     public void testGetDefaultConfig_KeyFound() {
287         int configInt = IwlanCarrierConfig.getDefaultConfigInt(KEY_CONFIG_IN_DEFAULT_INT);
288         assertEquals(VALUE_CONFIG_IN_DEFAULT_INT, configInt);
289 
290         long configLong = IwlanCarrierConfig.getDefaultConfigLong(KEY_CONFIG_IN_DEFAULT_LONG);
291         assertEquals(VALUE_CONFIG_IN_DEFAULT_LONG, configLong);
292 
293         double configDouble =
294                 IwlanCarrierConfig.getDefaultConfigDouble(KEY_CONFIG_IN_DEFAULT_DOUBLE);
295         assertEquals(VALUE_CONFIG_IN_DEFAULT_DOUBLE, configDouble, 0);
296 
297         boolean configBoolean =
298                 IwlanCarrierConfig.getDefaultConfigBoolean(KEY_CONFIG_IN_DEFAULT_BOOLEAN);
299         assertEquals(VALUE_CONFIG_IN_DEFAULT_BOOLEAN, configBoolean);
300 
301         String configString =
302                 IwlanCarrierConfig.getDefaultConfigString(KEY_CONFIG_IN_DEFAULT_STRING);
303         assertEquals(VALUE_CONFIG_IN_DEFAULT_STRING, configString);
304 
305         int[] configIntArray =
306                 IwlanCarrierConfig.getDefaultConfigIntArray(KEY_CONFIG_IN_DEFAULT_INT_ARRAY);
307         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_INT_ARRAY, configIntArray);
308 
309         long[] configLongArray =
310                 IwlanCarrierConfig.getDefaultConfigLongArray(KEY_CONFIG_IN_DEFAULT_LONG_ARRAY);
311         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_LONG_ARRAY, configLongArray);
312 
313         double[] configDoubleArray =
314                 IwlanCarrierConfig.getDefaultConfigDoubleArray(KEY_CONFIG_IN_DEFAULT_DOUBLE_ARRAY);
315         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_DOUBLE_ARRAY, configDoubleArray, 0);
316 
317         boolean[] configBooleanArray =
318                 IwlanCarrierConfig.getDefaultConfigBooleanArray(
319                         KEY_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY);
320         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_BOOLEAN_ARRAY, configBooleanArray);
321 
322         String[] configStringArray =
323                 IwlanCarrierConfig.getDefaultConfigStringArray(KEY_CONFIG_IN_DEFAULT_STRING_ARRAY);
324         assertArrayEquals(VALUE_CONFIG_IN_DEFAULT_STRING_ARRAY, configStringArray);
325     }
326 
327     @Test
testGetDefaultConfig_KeyInHiddenDefault()328     public void testGetDefaultConfig_KeyInHiddenDefault() {
329         int result =
330                 IwlanCarrierConfig.getDefaultConfigInt(
331                         IwlanCarrierConfig.KEY_HANDOVER_TO_WWAN_RELEASE_DELAY_SECOND_INT);
332         assertEquals(IwlanCarrierConfig.DEFAULT_HANDOVER_TO_WWAN_RELEASE_DELAY_SECOND_INT, result);
333     }
334 
335     @Test(expected = IllegalArgumentException.class)
testGetDefaultConfig_KeyNotFound()336     public void testGetDefaultConfig_KeyNotFound() {
337         IwlanCarrierConfig.getDefaultConfigInt(KEY_NON_EXISTING);
338     }
339 
340     @Test
testGetConfig_invalidSubId()341     public void testGetConfig_invalidSubId() {
342         String configKey = "KeyInvalidSubId";
343 
344         when(mMockSubscriptionInfo.getSubscriptionId())
345                 .thenReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
346         mBundleForSub.putInt(configKey, VALUE_CONFIG_IN_SUB_INT);
347         mBundleForDefault.putInt(configKey, VALUE_CONFIG_IN_DEFAULT_INT);
348 
349         int result = IwlanCarrierConfig.getConfigInt(mMockContext, DEFAULT_SLOT_ID, configKey);
350 
351         assertEquals(VALUE_CONFIG_IN_DEFAULT_INT, result);
352     }
353 
354     @Test
testGetConfig_illegalStateException()355     public void testGetConfig_illegalStateException() {
356         String configKey = "KeyException";
357 
358         when(mMockCarrierConfigManager.getConfigForSubId(DEFAULT_SUB_ID, configKey))
359                 .thenThrow(new IllegalStateException());
360         mBundleForSub.putInt(configKey, VALUE_CONFIG_IN_SUB_INT);
361         mBundleForDefault.putInt(configKey, VALUE_CONFIG_IN_DEFAULT_INT);
362 
363         int result = IwlanCarrierConfig.getConfigInt(mMockContext, DEFAULT_SLOT_ID, configKey);
364 
365         assertEquals(VALUE_CONFIG_IN_DEFAULT_INT, result);
366     }
367 }
368