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