summaryrefslogtreecommitdiff
path: root/service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java')
-rw-r--r--service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java177
1 files changed, 177 insertions, 0 deletions
diff --git a/service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java b/service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java
new file mode 100644
index 0000000..f56a6dd
--- /dev/null
+++ b/service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java
@@ -0,0 +1,177 @@
+package com.android.server.deviceconfig;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+@SmallTest
+public class SimPinReplayManagerTest {
+
+ private static final String TAG = "SimPinReplayManagerTest";
+
+ // A copy of the hidden field CarrierConfigManager#KEY_STORE_SIM_PIN_FOR_UNATTENDED_REBOOT_BOOL.
+ public static final String CARRIER_ENABLE_SIM_PIN_STORAGE_KEY =
+ "store_sim_pin_for_unattended_reboot_bool";
+
+ SimPinReplayManager mSimPinReplayManager;
+ SubscriptionManager mSubscriptionManager;
+ TelephonyManager mTelephonyManager;
+ CarrierConfigManager mCarrierConfigManager;
+
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+
+ mSubscriptionManager = mock(SubscriptionManager.class);
+ mTelephonyManager = mock(TelephonyManager.class);
+ mCarrierConfigManager = mock(CarrierConfigManager.class);
+
+ mContext =
+ new ContextWrapper(getInstrumentation().getTargetContext()) {
+ @Override
+ public Object getSystemService(String name) {
+ if (name.equals(Context.TELEPHONY_SUBSCRIPTION_SERVICE)) {
+ return mSubscriptionManager;
+ } else if (name.equals(Context.TELEPHONY_SERVICE)) {
+ return mTelephonyManager;
+ } else if (name.equals(Context.CARRIER_CONFIG_SERVICE)) {
+ return mCarrierConfigManager;
+ }
+ return super.getSystemService(name);
+ }
+ };
+
+ mSimPinReplayManager = new SimPinReplayManager(mContext);
+ }
+
+ @Test
+ public void prepareSimPinReplay_success() {
+ Log.i(TAG, "prepareSimPinReplay_success");
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1}); // has sim
+ TelephonyManager subIdManager = mock(TelephonyManager.class);
+ when(mTelephonyManager.createForSubscriptionId(1)).thenReturn(subIdManager);
+ when(subIdManager.isIccLockEnabled()).thenReturn(true); // has pin
+ PersistableBundle config = new PersistableBundle(); // empty carrier config
+ when(mCarrierConfigManager.getConfigForSubId(1, CARRIER_ENABLE_SIM_PIN_STORAGE_KEY))
+ .thenReturn(config);
+ when(mTelephonyManager.prepareForUnattendedReboot())
+ .thenReturn(TelephonyManager.PREPARE_UNATTENDED_REBOOT_SUCCESS);
+
+ boolean isPrepared = mSimPinReplayManager.prepareSimPinReplay();
+
+ assertTrue(isPrepared);
+ }
+
+ @Test
+ public void prepareSimPinReplay_noSim() {
+ Log.i(TAG, "prepareSimPinReplay_noSim");
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {}); // no sim
+
+ boolean isPrepared = mSimPinReplayManager.prepareSimPinReplay();
+
+ assertTrue(isPrepared);
+ }
+
+ @Test
+ public void prepareSimPinReplay_noSimPin() {
+ Log.i(TAG, "prepareSimPinReplay_noSimPin");
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1}); // has sim
+ TelephonyManager subIdManager = mock(TelephonyManager.class);
+ when(mTelephonyManager.createForSubscriptionId(1)).thenReturn(subIdManager);
+ when(subIdManager.isIccLockEnabled()).thenReturn(false); // no pin
+
+ boolean isPrepared = mSimPinReplayManager.prepareSimPinReplay();
+
+ assertTrue(isPrepared);
+ }
+
+ @Test
+ public void prepareSimPinReplay_carrierDisableSimPin() {
+ Log.i(TAG, "prepareSimPinReplay_carrierDisableSimPin");
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1}); // has sim
+ TelephonyManager subIdManager = mock(TelephonyManager.class);
+ when(mTelephonyManager.createForSubscriptionId(1)).thenReturn(subIdManager);
+ when(subIdManager.isIccLockEnabled()).thenReturn(true); // has pin
+ PersistableBundle config = new PersistableBundle();
+ config.putBoolean(CARRIER_ENABLE_SIM_PIN_STORAGE_KEY, false); // carrier disabled
+ when(mCarrierConfigManager.getConfigForSubId(1, CARRIER_ENABLE_SIM_PIN_STORAGE_KEY))
+ .thenReturn(config);
+
+ boolean isPrepared = mSimPinReplayManager.prepareSimPinReplay();
+
+ assertFalse(isPrepared);
+ }
+
+ @Test
+ public void prepareSimPinReplay_carrierEnabled() {
+ Log.i(TAG, "prepareSimPinReplay_carrierEnabled");
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1}); // has sim
+ TelephonyManager subIdManager = mock(TelephonyManager.class);
+ when(mTelephonyManager.createForSubscriptionId(1)).thenReturn(subIdManager);
+ when(subIdManager.isIccLockEnabled()).thenReturn(true); // has pin
+ PersistableBundle config = new PersistableBundle();
+ config.putBoolean(CARRIER_ENABLE_SIM_PIN_STORAGE_KEY, true); // carrier enabled
+ when(mCarrierConfigManager.getConfigForSubId(1, CARRIER_ENABLE_SIM_PIN_STORAGE_KEY))
+ .thenReturn(config);
+ when(mTelephonyManager.prepareForUnattendedReboot())
+ .thenReturn(TelephonyManager.PREPARE_UNATTENDED_REBOOT_SUCCESS);
+
+ boolean isPrepared = mSimPinReplayManager.prepareSimPinReplay();
+
+ assertTrue(isPrepared);
+ }
+
+ @Test
+ public void prepareSimPinReplay_prepareError() {
+ Log.i(TAG, "prepareSimPinReplay_prepareError");
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1}); // has sim
+ TelephonyManager subIdManager = mock(TelephonyManager.class);
+ when(mTelephonyManager.createForSubscriptionId(1)).thenReturn(subIdManager);
+ when(subIdManager.isIccLockEnabled()).thenReturn(true); // has pin
+ PersistableBundle config = new PersistableBundle();
+ config.putBoolean(CARRIER_ENABLE_SIM_PIN_STORAGE_KEY, true); // carrier enabled
+ when(mCarrierConfigManager.getConfigForSubId(1, CARRIER_ENABLE_SIM_PIN_STORAGE_KEY))
+ .thenReturn(config);
+ when(mTelephonyManager.prepareForUnattendedReboot())
+ .thenReturn(TelephonyManager.PREPARE_UNATTENDED_REBOOT_ERROR);
+
+ boolean isPrepared = mSimPinReplayManager.prepareSimPinReplay();
+
+ assertFalse(isPrepared);
+ }
+
+ @Test
+ public void prepareSimPinReplay_preparePinRequired() {
+ Log.i(TAG, "prepareSimPinReplay_preparePinRequired");
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[] {1}); // has sim
+ TelephonyManager subIdManager = mock(TelephonyManager.class);
+ when(mTelephonyManager.createForSubscriptionId(1)).thenReturn(subIdManager);
+ when(subIdManager.isIccLockEnabled()).thenReturn(true); // has pin
+ PersistableBundle config = new PersistableBundle();
+ config.putBoolean(CARRIER_ENABLE_SIM_PIN_STORAGE_KEY, true); // carrier enabled
+ when(mCarrierConfigManager.getConfigForSubId(1, CARRIER_ENABLE_SIM_PIN_STORAGE_KEY))
+ .thenReturn(config);
+ when(mTelephonyManager.prepareForUnattendedReboot())
+ .thenReturn(TelephonyManager.PREPARE_UNATTENDED_REBOOT_PIN_REQUIRED);
+
+ boolean isPrepared = mSimPinReplayManager.prepareSimPinReplay();
+
+ assertFalse(isPrepared);
+ }
+}