diff options
Diffstat (limited to 'service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java')
-rw-r--r-- | service/javatests/src/com/android/server/deviceconfig/SimPinReplayManagerTest.java | 177 |
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); + } +} |