diff options
-rw-r--r-- | service/java/com/android/server/wifi/WifiConfigManager.java | 33 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java | 127 |
2 files changed, 145 insertions, 15 deletions
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index 0b70dbf4e..c8c4844cc 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java @@ -2463,21 +2463,22 @@ public class WifiConfigManager { */ public void resetSimNetworks(boolean simPresent) { if (mVerboseLoggingEnabled) localLog("resetSimNetworks"); - for (WifiConfiguration config : getInternalConfiguredNetworks()) { - if (TelephonyUtil.isSimConfig(config)) { - Pair<String, String> currentIdentity = null; - if (simPresent) { - currentIdentity = TelephonyUtil.getSimIdentity(mTelephonyManager, - new TelephonyUtil(), config); - } - // Update the loaded config - if (currentIdentity == null) { - Log.d(TAG, "Identity is null"); - return; - } - config.enterpriseConfig.setIdentity(currentIdentity.first); - if (config.enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.PEAP) { - config.enterpriseConfig.setAnonymousIdentity(""); + if (simPresent) { + for (WifiConfiguration config : getInternalConfiguredNetworks()) { + if (TelephonyUtil.isSimConfig(config)) { + Pair<String, String> currentIdentity = + TelephonyUtil.getSimIdentity(mTelephonyManager, + new TelephonyUtil(), config); + + // Update the loaded config + if (currentIdentity == null) { + Log.d(TAG, "Identity is null"); + break; + } + config.enterpriseConfig.setIdentity(currentIdentity.first); + if (config.enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.PEAP) { + config.enterpriseConfig.setAnonymousIdentity(""); + } } } } @@ -2732,6 +2733,8 @@ public class WifiConfigManager { if (mConfiguredNetworks.sizeForAllUsers() == 0) { Log.w(TAG, "No stored networks found."); } + // resetSimNetworks may already have been called. Call it again to reset loaded SIM configs. + resetSimNetworks(mSimPresent); sendConfiguredNetworksChangedBroadcast(); mPendingStoreRead = false; } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java index a4bc61aa1..76068491d 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java @@ -3563,6 +3563,133 @@ public class WifiConfigManagerTest { assertEquals(newMac, retrievedConfig.getRandomizedMacAddress()); } + /** + * Verifies that the method resetSimNetworks updates SIM presence status and SIM configs. + */ + @Test + public void testResetSimNetworks() { + String expectedIdentity = "13214561234567890@wlan.mnc456.mcc321.3gppnetwork.org"; + when(mTelephonyManager.getSubscriberId()).thenReturn("3214561234567890"); + when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY); + when(mTelephonyManager.getSimOperator()).thenReturn("321456"); + when(mTelephonyManager.getCarrierInfoForImsiEncryption(anyInt())).thenReturn(null); + + WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork(); + WifiConfiguration simNetwork = WifiConfigurationTestUtil.createEapNetwork( + WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.NONE); + WifiConfiguration peapSimNetwork = WifiConfigurationTestUtil.createEapNetwork( + WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.SIM); + network.enterpriseConfig.setIdentity("identity1"); + network.enterpriseConfig.setAnonymousIdentity("anonymous_identity1"); + simNetwork.enterpriseConfig.setIdentity("identity2"); + simNetwork.enterpriseConfig.setAnonymousIdentity("anonymous_identity2"); + peapSimNetwork.enterpriseConfig.setIdentity("identity3"); + peapSimNetwork.enterpriseConfig.setAnonymousIdentity("anonymous_identity3"); + verifyAddNetworkToWifiConfigManager(network); + verifyAddNetworkToWifiConfigManager(simNetwork); + verifyAddNetworkToWifiConfigManager(peapSimNetwork); + + // Verify SIM is not present initially. + assertFalse(mWifiConfigManager.isSimPresent()); + + // Call resetSimNetworks with true(SIM is present). + mWifiConfigManager.resetSimNetworks(true); + + // Verify SIM is present, SIM configs are reset and non-SIM configs are not changed. + assertTrue(mWifiConfigManager.isSimPresent()); + WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( + network, + mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); + WifiConfiguration retrievedSimNetwork = + mWifiConfigManager.getConfiguredNetwork(simNetwork.networkId); + assertEquals(expectedIdentity, retrievedSimNetwork.enterpriseConfig.getIdentity()); + assertTrue(retrievedSimNetwork.enterpriseConfig.getAnonymousIdentity().isEmpty()); + WifiConfiguration retrievedPeapSimNetwork = + mWifiConfigManager.getConfiguredNetwork(peapSimNetwork.networkId); + assertEquals(expectedIdentity, retrievedPeapSimNetwork.enterpriseConfig.getIdentity()); + assertFalse(retrievedPeapSimNetwork.enterpriseConfig.getAnonymousIdentity().isEmpty()); + + // Call resetSimNetworks with false(SIM is not present). + when(mTelephonyManager.getSubscriberId()).thenReturn("3214561234567891"); + retrievedSimNetwork.enterpriseConfig.setAnonymousIdentity("anonymous_identity22"); + verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(retrievedSimNetwork); + mWifiConfigManager.resetSimNetworks(false); + + // Verify SIM is not present and all configs are not changed. + assertFalse(mWifiConfigManager.isSimPresent()); + WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( + network, + mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId)); + WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( + retrievedSimNetwork, + mWifiConfigManager.getConfiguredNetworkWithPassword(simNetwork.networkId)); + WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate( + retrievedPeapSimNetwork, + mWifiConfigManager.getConfiguredNetworkWithPassword(peapSimNetwork.networkId)); + } + + /** + * Verifies that the method resetSimNetworks updates SIM presence status if + * getSimIdentity returns null. + */ + @Test + public void testResetSimNetworksWithNullIdentity() { + WifiConfiguration simNetwork = WifiConfigurationTestUtil.createEapNetwork( + WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.NONE); + verifyAddNetworkToWifiConfigManager(simNetwork); + + assertFalse(mWifiConfigManager.isSimPresent()); + + mWifiConfigManager.resetSimNetworks(true); + assertTrue(mWifiConfigManager.isSimPresent()); + + mWifiConfigManager.resetSimNetworks(false); + assertFalse(mWifiConfigManager.isSimPresent()); + } + + /** + * Verifies that SIM config is reset if store is read after the method resetSimNetworks + * is called. + */ + @Test + public void testResetSimNetworksIsCalledAgainAfterLoadFromStore() { + String expectedIdentity = "13214561234567890@wlan.mnc456.mcc321.3gppnetwork.org"; + when(mTelephonyManager.getSubscriberId()).thenReturn("3214561234567890"); + when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY); + when(mTelephonyManager.getSimOperator()).thenReturn("321456"); + when(mTelephonyManager.getCarrierInfoForImsiEncryption(anyInt())).thenReturn(null); + + WifiConfiguration simNetwork = WifiConfigurationTestUtil.createEapNetwork( + WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.NONE); + simNetwork.enterpriseConfig.setIdentity("identity"); + simNetwork.enterpriseConfig.setAnonymousIdentity("anonymous_identity"); + + // Set up the store data. + List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() { + { + add(simNetwork); + } + }; + setupStoreDataForRead(sharedNetworks, new ArrayList<WifiConfiguration>(), + new HashSet<String>()); + + // 1. Call resetSimNetworks with true(SIM is present). + mWifiConfigManager.resetSimNetworks(true); + + // Verify SIM is present. + assertTrue(mWifiConfigManager.isSimPresent()); + + // 2. Read from store now. + assertTrue(mWifiConfigManager.loadFromStore()); + + // Verify SIM is present just in case and SIM config is reset. + assertTrue(mWifiConfigManager.isSimPresent()); + WifiConfiguration retrievedSimNetwork = + mWifiConfigManager.getConfiguredNetwork(simNetwork.networkId); + assertEquals(expectedIdentity, retrievedSimNetwork.enterpriseConfig.getIdentity()); + assertTrue(retrievedSimNetwork.enterpriseConfig.getAnonymousIdentity().isEmpty()); + } + private NetworkUpdateResult verifyAddOrUpdateNetworkWithProxySettingsAndPermissions( boolean withNetworkSettings, boolean withProfileOwnerPolicy, |