summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java4
-rw-r--r--service/java/com/android/server/wifi/SavedNetworkEvaluator.java8
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java69
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java11
-rw-r--r--service/java/com/android/server/wifi/hotspot2/PasspointManager.java17
-rw-r--r--service/java/com/android/server/wifi/hotspot2/PasspointNetworkEvaluator.java8
-rw-r--r--service/java/com/android/server/wifi/util/TelephonyUtil.java7
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/SavedNetworkEvaluatorTest.java6
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java120
-rw-r--r--tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java30
-rw-r--r--tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java23
12 files changed, 166 insertions, 139 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index dbbd385b4..f9b7eba59 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -4540,8 +4540,8 @@ public class ClientModeImpl extends StateMachine {
boolean simPresent = message.arg1 == 1;
if (!simPresent) {
mPasspointManager.removeEphemeralProviders();
+ mWifiConfigManager.resetSimNetworks();
}
- mWifiConfigManager.resetSimNetworks(simPresent);
break;
case CMD_BLUETOOTH_ADAPTER_STATE_CHANGE:
mBluetoothConnectionActive = (message.arg1
@@ -5185,6 +5185,8 @@ public class ClientModeImpl extends StateMachine {
if (TelephonyUtil.isSimConfig(config)) {
mWifiMetrics.logStaEvent(StaEvent.TYPE_FRAMEWORK_DISCONNECT,
StaEvent.DISCONNECT_RESET_SIM_NETWORKS);
+ // TODO(b/132385576): STA may immediately connect back to the network
+ // that we just disconnected from
mWifiNative.disconnect(mInterfaceName);
transitionTo(mDisconnectingState);
}
diff --git a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
index d02256a74..f77403b80 100644
--- a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
+++ b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
@@ -21,6 +21,7 @@ import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.os.Process;
+import android.telephony.SubscriptionManager;
import android.util.LocalLog;
import com.android.internal.R;
@@ -39,6 +40,7 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
private final Clock mClock;
private final LocalLog mLocalLog;
private final WifiConnectivityHelper mConnectivityHelper;
+ private final SubscriptionManager mSubscriptionManager;
private final int mRssiScoreSlope;
private final int mRssiScoreOffset;
private final int mSameBssidAward;
@@ -57,12 +59,14 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
SavedNetworkEvaluator(final Context context, ScoringParams scoringParams,
WifiConfigManager configManager, Clock clock,
- LocalLog localLog, WifiConnectivityHelper connectivityHelper) {
+ LocalLog localLog, WifiConnectivityHelper connectivityHelper,
+ SubscriptionManager subscriptionManager) {
mScoringParams = scoringParams;
mWifiConfigManager = configManager;
mClock = clock;
mLocalLog = localLog;
mConnectivityHelper = connectivityHelper;
+ mSubscriptionManager = subscriptionManager;
mRssiScoreSlope = context.getResources().getInteger(
R.integer.config_wifi_framework_RSSI_SCORE_SLOPE);
@@ -290,7 +294,7 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
+ scanResult.BSSID);
continue;
} else if (TelephonyUtil.isSimConfig(network)
- && !mWifiConfigManager.isSimPresent()) {
+ && !TelephonyUtil.isSimPresent(mSubscriptionManager)) {
// Don't select if security type is EAP SIM/AKA/AKA' when SIM is not present.
continue;
}
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index 310117ac5..c48601010 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -339,10 +339,6 @@ public class WifiConfigManager {
*/
private boolean mDeferredUserUnlockRead = false;
/**
- * Flag to indicate if SIM is present.
- */
- private boolean mSimPresent = false;
- /**
* This is keeping track of the next network ID to be assigned. Any new networks will be
* assigned |mNextNetworkId| as network ID.
*/
@@ -2786,46 +2782,33 @@ public class WifiConfigManager {
/**
* Resets all sim networks state.
*/
- public void resetSimNetworks(boolean simPresent) {
+ public void resetSimNetworks() {
if (mVerboseLoggingEnabled) localLog("resetSimNetworks");
- if (simPresent) {
- for (WifiConfiguration config : getInternalConfiguredNetworks()) {
- if (TelephonyUtil.isSimConfig(config)) {
- Pair<String, String> currentIdentity =
- TelephonyUtil.getSimIdentity(mTelephonyManager,
- new TelephonyUtil(), config,
- mWifiInjector.getCarrierNetworkConfig());
- if (mVerboseLoggingEnabled) {
- Log.d(TAG, "New identity for config " + config + ": " + currentIdentity);
- }
-
- // Update the loaded config
- if (currentIdentity == null) {
- Log.d(TAG, "Identity is null");
- break;
- }
- if (config.enterpriseConfig.getEapMethod() == WifiEnterpriseConfig.Eap.PEAP) {
- config.enterpriseConfig.setIdentity(currentIdentity.first);
- // do not reset anonymous identity since it may be dependent on user-entry
- // (i.e. cannot re-request on every reboot/SIM re-entry)
- } else {
- // reset identity as well: supplicant will ask us for it
- config.enterpriseConfig.setIdentity("");
- config.enterpriseConfig.setAnonymousIdentity("");
- }
+ for (WifiConfiguration config : getInternalConfiguredNetworks()) {
+ if (!TelephonyUtil.isSimConfig(config)) {
+ continue;
+ }
+ if (config.enterpriseConfig.getEapMethod() == WifiEnterpriseConfig.Eap.PEAP) {
+ Pair<String, String> currentIdentity = TelephonyUtil.getSimIdentity(
+ mTelephonyManager, new TelephonyUtil(), config,
+ mWifiInjector.getCarrierNetworkConfig());
+ if (mVerboseLoggingEnabled) {
+ Log.d(TAG, "New identity for config " + config + ": " + currentIdentity);
}
+ // Update the loaded config
+ if (currentIdentity == null) {
+ Log.d(TAG, "Identity is null");
+ } else {
+ config.enterpriseConfig.setIdentity(currentIdentity.first);
+ }
+ // do not reset anonymous identity since it may be dependent on user-entry
+ // (i.e. cannot re-request on every reboot/SIM re-entry)
+ } else {
+ // reset identity as well: supplicant will ask us for it
+ config.enterpriseConfig.setIdentity("");
+ config.enterpriseConfig.setAnonymousIdentity("");
}
}
- mSimPresent = simPresent;
- }
-
- /**
- * Check if SIM is present.
- *
- * @return True if SIM is present, otherwise false.
- */
- public boolean isSimPresent() {
- return mSimPresent;
}
/**
@@ -3077,8 +3060,10 @@ 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);
+ // reset identity & anonymous identity for networks using SIM-based authentication
+ // on load (i.e. boot) so that if the user changed SIMs while the device was powered off,
+ // we do not reuse stale credentials that would lead to authentication failure.
+ resetSimNetworks();
sendConfiguredNetworksChangedBroadcast();
mPendingStoreRead = false;
}
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index e5391839f..8e88ca559 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -43,6 +43,7 @@ import android.os.SystemProperties;
import android.os.UserManager;
import android.provider.Settings.Secure;
import android.security.KeyStore;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.LocalLog;
@@ -239,6 +240,8 @@ public class WifiInjector {
mWifiConfigStore = new WifiConfigStore(
mContext, clientModeImplLooper, mClock, mWifiMetrics,
WifiConfigStore.createSharedFile());
+ SubscriptionManager subscriptionManager =
+ mContext.getSystemService(SubscriptionManager.class);
// Config Manager
mWifiConfigManager = new WifiConfigManager(mContext, mClock,
UserManager.get(mContext), makeTelephonyManager(),
@@ -263,7 +266,8 @@ public class WifiInjector {
mWifiNetworkSelector.registerCandidateScorer(bubbleFunScorer);
mWifiMetrics.setWifiNetworkSelector(mWifiNetworkSelector);
mSavedNetworkEvaluator = new SavedNetworkEvaluator(mContext, mScoringParams,
- mWifiConfigManager, mClock, mConnectivityLocalLog, mWifiConnectivityHelper);
+ mWifiConfigManager, mClock, mConnectivityLocalLog, mWifiConnectivityHelper,
+ subscriptionManager);
mWifiNetworkSuggestionsManager = new WifiNetworkSuggestionsManager(mContext,
new Handler(mWifiCoreHandlerThread.getLooper()), this,
mWifiPermissionsUtil, mWifiConfigManager, mWifiConfigStore, mWifiMetrics);
@@ -278,10 +282,10 @@ public class WifiInjector {
mPasspointManager = new PasspointManager(mContext, this,
new Handler(mWifiCoreHandlerThread.getLooper()), mWifiNative, mWifiKeyStore, mClock,
mSimAccessor, new PasspointObjectFactory(), mWifiConfigManager, mWifiConfigStore,
- mWifiMetrics, makeTelephonyManager());
+ mWifiMetrics, makeTelephonyManager(), subscriptionManager);
mPasspointNetworkEvaluator = new PasspointNetworkEvaluator(
mPasspointManager, mWifiConfigManager, mConnectivityLocalLog,
- mCarrierNetworkConfig, this);
+ mCarrierNetworkConfig, this, subscriptionManager);
mWifiMetrics.setPasspointManager(mPasspointManager);
mScanRequestProxy = new ScanRequestProxy(mContext,
(AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE),
@@ -502,7 +506,6 @@ public class WifiInjector {
return mWifiScoreCard;
}
- /** Gets a TelephonyManager, which may not be available early on. */
public TelephonyManager makeTelephonyManager() {
return (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
}
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
index 917093ac2..75596b548 100644
--- a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
+++ b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
@@ -71,6 +71,7 @@ import com.android.server.wifi.hotspot2.anqp.HSOsuProvidersElement;
import com.android.server.wifi.hotspot2.anqp.NAIRealmElement;
import com.android.server.wifi.hotspot2.anqp.OsuProviderInfo;
import com.android.server.wifi.util.InformationElementUtil;
+import com.android.server.wifi.util.TelephonyUtil;
import java.io.PrintWriter;
import java.security.cert.X509Certificate;
@@ -128,6 +129,7 @@ public class PasspointManager {
private final PasspointProvisioner mPasspointProvisioner;
private final TelephonyManager mTelephonyManager;
private final AppOpsManager mAppOps;
+ private final SubscriptionManager mSubscriptionManager;
/**
* Map of package name of an app to the app ops changed listener for the app.
@@ -333,7 +335,8 @@ public class PasspointManager {
WifiNative wifiNative, WifiKeyStore keyStore, Clock clock, SIMAccessor simAccessor,
PasspointObjectFactory objectFactory, WifiConfigManager wifiConfigManager,
WifiConfigStore wifiConfigStore,
- WifiMetrics wifiMetrics, TelephonyManager telephonyManager) {
+ WifiMetrics wifiMetrics,
+ TelephonyManager telephonyManager, SubscriptionManager subscriptionManager) {
mPasspointEventHandler = objectFactory.makePasspointEventHandler(wifiNative,
new CallbackHandler(context));
mWifiInjector = wifiInjector;
@@ -349,6 +352,7 @@ public class PasspointManager {
mWifiMetrics = wifiMetrics;
mProviderIndex = 0;
mTelephonyManager = telephonyManager;
+ mSubscriptionManager = subscriptionManager;
wifiConfigStore.registerStoreData(objectFactory.makePasspointConfigUserStoreData(
mKeyStore, mSimAccessor, new UserDataSourceHandler()));
wifiConfigStore.registerStoreData(objectFactory.makePasspointConfigSharedStoreData(
@@ -448,7 +452,7 @@ public class PasspointManager {
* realm is found, {@code -1} otherwise.
*/
public int findEapMethodFromNAIRealmMatchedWithCarrier(List<ScanDetail> scanDetails) {
- if (!mWifiConfigManager.isSimPresent()) {
+ if (!TelephonyUtil.isSimPresent(mSubscriptionManager)) {
return -1;
}
if (scanDetails == null || scanDetails.isEmpty()) {
@@ -611,7 +615,7 @@ public class PasspointManager {
Log.e(TAG, "PasspointConfiguration for carrier is null");
return false;
}
- if (!mWifiConfigManager.isSimPresent()) {
+ if (!TelephonyUtil.isSimPresent(mSubscriptionManager)) {
Log.e(TAG, "Sim is not presented on the device");
return false;
}
@@ -683,13 +687,14 @@ public class PasspointManager {
* Remove the ephemeral providers that are created temporarily for a carrier.
*/
public void removeEphemeralProviders() {
- for (Map.Entry<String, PasspointProvider> entry : mProviders.entrySet()) {
+ mProviders.entrySet().removeIf(entry -> {
PasspointProvider provider = entry.getValue();
if (provider != null && provider.isEphemeral()) {
- mProviders.remove(entry.getKey());
mWifiConfigManager.removePasspointConfiguredNetwork(entry.getKey());
+ return true;
}
- }
+ return false;
+ });
}
/**
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointNetworkEvaluator.java b/service/java/com/android/server/wifi/hotspot2/PasspointNetworkEvaluator.java
index 5e6fa8ca2..5629ec573 100644
--- a/service/java/com/android/server/wifi/hotspot2/PasspointNetworkEvaluator.java
+++ b/service/java/com/android/server/wifi/hotspot2/PasspointNetworkEvaluator.java
@@ -55,6 +55,7 @@ public class PasspointNetworkEvaluator implements WifiNetworkSelector.NetworkEva
private final CarrierNetworkConfig mCarrierNetworkConfig;
private final WifiInjector mWifiInjector;
private TelephonyManager mTelephonyManager;
+ private SubscriptionManager mSubscriptionManager;
/**
* Contained information for a Passpoint network candidate.
*/
@@ -72,12 +73,14 @@ public class PasspointNetworkEvaluator implements WifiNetworkSelector.NetworkEva
public PasspointNetworkEvaluator(PasspointManager passpointManager,
WifiConfigManager wifiConfigManager, LocalLog localLog,
- CarrierNetworkConfig carrierNetworkConfig, WifiInjector wifiInjector) {
+ CarrierNetworkConfig carrierNetworkConfig, WifiInjector wifiInjector,
+ SubscriptionManager subscriptionManager) {
mPasspointManager = passpointManager;
mWifiConfigManager = wifiConfigManager;
mLocalLog = localLog;
mCarrierNetworkConfig = carrierNetworkConfig;
mWifiInjector = wifiInjector;
+ mSubscriptionManager = subscriptionManager;
}
private TelephonyManager getTelephonyManager() {
@@ -132,7 +135,8 @@ public class PasspointNetworkEvaluator implements WifiNetworkSelector.NetworkEva
Pair<PasspointProvider, PasspointMatch> bestProvider =
mPasspointManager.matchProvider(scanResult);
if (bestProvider != null) {
- if (bestProvider.first.isSimCredential() && !mWifiConfigManager.isSimPresent()) {
+ if (bestProvider.first.isSimCredential()
+ && !TelephonyUtil.isSimPresent(mSubscriptionManager)) {
// Skip providers backed by SIM credential when SIM is not present.
continue;
}
diff --git a/service/java/com/android/server/wifi/util/TelephonyUtil.java b/service/java/com/android/server/wifi/util/TelephonyUtil.java
index abaeabe44..1d19c9f5e 100644
--- a/service/java/com/android/server/wifi/util/TelephonyUtil.java
+++ b/service/java/com/android/server/wifi/util/TelephonyUtil.java
@@ -774,4 +774,11 @@ public class TelephonyUtil {
}
return CARRIER_MVNO_TYPE;
}
+
+ /**
+ * Returns true if at least one SIM is present on the device, false otherwise.
+ */
+ public static boolean isSimPresent(@Nonnull SubscriptionManager sm) {
+ return sm.getActiveSubscriptionIdList().length > 0;
+ }
}
diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
index f0e0daefc..0fd040c7e 100644
--- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -3413,7 +3413,7 @@ public class ClientModeImplTest {
mLooper.dispatchAll();
verify(mPasspointManager).removeEphemeralProviders();
- verify(mWifiConfigManager).resetSimNetworks(eq(false));
+ verify(mWifiConfigManager).resetSimNetworks();
}
/**
diff --git a/tests/wifitests/src/com/android/server/wifi/SavedNetworkEvaluatorTest.java b/tests/wifitests/src/com/android/server/wifi/SavedNetworkEvaluatorTest.java
index 15b64c4df..ff8c8250a 100644
--- a/tests/wifitests/src/com/android/server/wifi/SavedNetworkEvaluatorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/SavedNetworkEvaluatorTest.java
@@ -27,6 +27,7 @@ import android.content.res.Resources;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.os.SystemClock;
+import android.telephony.SubscriptionManager;
import android.util.LocalLog;
import androidx.test.filters.SmallTest;
@@ -76,7 +77,9 @@ public class SavedNetworkEvaluatorTest {
mSavedNetworkEvaluator = new SavedNetworkEvaluator(mContext,
new ScoringParams(mContext), mWifiConfigManager,
- mClock, mLocalLog, mWifiConnectivityHelper);
+ mClock, mLocalLog, mWifiConnectivityHelper, mSubscriptionManager);
+ // SIM is absent
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[0]);
}
/** Cleans up test. */
@@ -92,6 +95,7 @@ public class SavedNetworkEvaluatorTest {
@Mock private Resources mResource;
@Mock private Clock mClock;
@Mock private OnConnectableListener mOnConnectableListener;
+ @Mock private SubscriptionManager mSubscriptionManager;
private LocalLog mLocalLog;
private int mThresholdMinimumRssi2G;
private int mThresholdMinimumRssi5G;
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
index b8f6c57fc..3b86be887 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
@@ -51,6 +51,7 @@ import androidx.test.filters.SmallTest;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.internal.R;
+import com.android.server.wifi.util.TelephonyUtil;
import com.android.server.wifi.util.WifiPermissionsUtil;
import com.android.server.wifi.util.WifiPermissionsWrapper;
@@ -4308,71 +4309,79 @@ public class WifiConfigManagerTest {
verifyAddNetworkToWifiConfigManager(simNetwork);
verifyAddNetworkToWifiConfigManager(peapSimNetwork);
- // Verify SIM is not present initially.
- assertFalse(mWifiConfigManager.isSimPresent());
+ // SIM was removed, resetting SIM Networks
+ mWifiConfigManager.resetSimNetworks();
- // 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());
+ // Verify SIM configs are reset and non-SIM configs are not changed.
WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate(
network,
mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId));
WifiConfiguration retrievedSimNetwork =
mWifiConfigManager.getConfiguredNetwork(simNetwork.networkId);
- assertTrue(retrievedSimNetwork.enterpriseConfig.getAnonymousIdentity().isEmpty());
- assertTrue(retrievedSimNetwork.enterpriseConfig.getIdentity().isEmpty());
+ assertEquals("", retrievedSimNetwork.enterpriseConfig.getAnonymousIdentity());
+ assertEquals("", retrievedSimNetwork.enterpriseConfig.getIdentity());
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(mDataTelephonyManager.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));
+ assertNotEquals("", retrievedPeapSimNetwork.enterpriseConfig.getAnonymousIdentity());
}
/**
- * Verifies that the method resetSimNetworks updates SIM presence status if
- * getSimIdentity returns null.
+ * {@link WifiConfigManager#resetSimNetworks()} should reset all non-PEAP SIM networks, no
+ * matter if {@link com.android.server.wifi.util.TelephonyUtil#getSimIdentity(TelephonyManager,
+ * TelephonyUtil, WifiConfiguration, CarrierNetworkConfig) TelephonyUtil#getSimIdentity}
+ * returns null or not.
*/
@Test
- public void testResetSimNetworksWithNullIdentity() {
+ public void testResetSimNetworks_getSimIdentityNull_shouldResetAllNonPeapSimIdentities() {
+ when(mDataTelephonyManager.getSubscriberId()).thenReturn("3214561234567890");
+ when(mDataTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
+ when(mDataTelephonyManager.getSimOperator()).thenReturn("321456");
+ when(mDataTelephonyManager.getCarrierInfoForImsiEncryption(anyInt())).thenReturn(null);
+ // null CarrierNetworkConfig => getSimIdentity returns null => PEAP identity unchanged
+ when(mWifiInjector.getCarrierNetworkConfig()).thenReturn(null);
+
+ WifiConfiguration peapSimNetwork = WifiConfigurationTestUtil.createEapNetwork(
+ WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.SIM);
+ peapSimNetwork.enterpriseConfig.setIdentity("identity_peap");
+ peapSimNetwork.enterpriseConfig.setAnonymousIdentity("anonymous_identity_peap");
+ verifyAddNetworkToWifiConfigManager(peapSimNetwork);
+
+ WifiConfiguration network = WifiConfigurationTestUtil.createEapNetwork();
+ network.enterpriseConfig.setIdentity("identity");
+ network.enterpriseConfig.setAnonymousIdentity("anonymous_identity");
+ verifyAddNetworkToWifiConfigManager(network);
+
WifiConfiguration simNetwork = WifiConfigurationTestUtil.createEapNetwork(
WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.NONE);
+ simNetwork.enterpriseConfig.setIdentity("identity_eap_sim");
+ simNetwork.enterpriseConfig.setAnonymousIdentity("anonymous_identity_eap_sim");
verifyAddNetworkToWifiConfigManager(simNetwork);
- assertFalse(mWifiConfigManager.isSimPresent());
-
- mWifiConfigManager.resetSimNetworks(true);
- assertTrue(mWifiConfigManager.isSimPresent());
+ // SIM was removed, resetting SIM Networks
+ mWifiConfigManager.resetSimNetworks();
- mWifiConfigManager.resetSimNetworks(false);
- assertFalse(mWifiConfigManager.isSimPresent());
+ // EAP non-SIM network should be unchanged
+ WifiConfigurationTestUtil.assertConfigurationEqualForConfigManagerAddOrUpdate(
+ network, mWifiConfigManager.getConfiguredNetworkWithPassword(network.networkId));
+ // EAP-SIM network should have identity & anonymous identity reset
+ WifiConfiguration retrievedSimNetwork =
+ mWifiConfigManager.getConfiguredNetwork(simNetwork.networkId);
+ assertEquals("", retrievedSimNetwork.enterpriseConfig.getAnonymousIdentity());
+ assertEquals("", retrievedSimNetwork.enterpriseConfig.getIdentity());
+ // PEAP network should have unchanged identity & anonymous identity
+ WifiConfiguration retrievedPeapSimNetwork =
+ mWifiConfigManager.getConfiguredNetwork(peapSimNetwork.networkId);
+ assertEquals("identity_peap", retrievedPeapSimNetwork.enterpriseConfig.getIdentity());
+ assertEquals("anonymous_identity_peap",
+ retrievedPeapSimNetwork.enterpriseConfig.getAnonymousIdentity());
}
/**
- * Verifies that SIM config is reset if store is read after the method resetSimNetworks
- * is called.
+ * Verifies that SIM configs are reset on {@link WifiConfigManager#loadFromStore()}.
*/
@Test
- public void testResetSimNetworksIsCalledAgainAfterLoadFromStore() {
- String expectedIdentity = "13214561234567890@wlan.mnc456.mcc321.3gppnetwork.org";
+ public void testLoadFromStoreResetsSimIdentity() {
when(mDataTelephonyManager.getSubscriberId()).thenReturn("3214561234567890");
when(mDataTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
when(mDataTelephonyManager.getSimOperator()).thenReturn("321456");
@@ -4397,27 +4406,20 @@ public class WifiConfigManagerTest {
};
setupStoreDataForRead(sharedNetworks, new ArrayList<>(), new HashMap<>());
- // 1. Call resetSimNetworks with true(SIM is present).
- mWifiConfigManager.resetSimNetworks(true);
-
- // Verify SIM is present.
- assertTrue(mWifiConfigManager.isSimPresent());
-
- // 2. Read from store now.
+ // read from store now
assertTrue(mWifiConfigManager.loadFromStore());
- // Verify SIM is present just in case and SIM config is reset.
- assertTrue(mWifiConfigManager.isSimPresent());
-
+ // assert that the expected identities are reset
WifiConfiguration retrievedSimNetwork =
mWifiConfigManager.getConfiguredNetwork(simNetwork.networkId);
- assertTrue(retrievedSimNetwork.enterpriseConfig.getIdentity().isEmpty());
- assertTrue(retrievedSimNetwork.enterpriseConfig.getAnonymousIdentity().isEmpty());
+ assertEquals("", retrievedSimNetwork.enterpriseConfig.getIdentity());
+ assertEquals("", retrievedSimNetwork.enterpriseConfig.getAnonymousIdentity());
WifiConfiguration retrievedPeapNetwork =
mWifiConfigManager.getConfiguredNetwork(peapSimNetwork.networkId);
- assertEquals(retrievedPeapNetwork.enterpriseConfig.getIdentity(), "identity");
- assertFalse(retrievedPeapNetwork.enterpriseConfig.getAnonymousIdentity().isEmpty());
+ assertEquals("identity", retrievedPeapNetwork.enterpriseConfig.getIdentity());
+ assertEquals("anonymous_identity",
+ retrievedPeapNetwork.enterpriseConfig.getAnonymousIdentity());
}
/**
@@ -4631,14 +4633,6 @@ public class WifiConfigManagerTest {
WifiConfigManager.createDebugTimeStampString(TEST_WALLCLOCK_UPDATE_TIME_MILLIS);
}
- private void assertNotEquals(Object expected, Object actual) {
- if (actual != null) {
- assertFalse(actual.equals(expected));
- } else {
- assertNotNull(expected);
- }
- }
-
/**
* Modifies the provided WifiConfiguration with the specified bssid value. Also, asserts that
* the existing |BSSID| field is not the same value as the one being set
diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
index bf71b927e..338f7bc40 100644
--- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
@@ -72,6 +72,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.UserHandle;
import android.os.test.TestLooper;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Base64;
import android.util.Pair;
@@ -186,6 +187,7 @@ public class PasspointManagerTest {
@Mock ClientModeImpl mClientModeImpl;
@Mock TelephonyManager mTelephonyManager;
@Mock TelephonyManager mDataTelephonyManager;
+ @Mock SubscriptionManager mSubscriptionManager;
Handler mHandler;
TestLooper mLooper;
@@ -216,7 +218,7 @@ public class PasspointManagerTest {
mHandler = new Handler(mLooper.getLooper());
mManager = new PasspointManager(mContext, mWifiInjector, mHandler, mWifiNative,
mWifiKeyStore, mClock, mSimAccessor, mObjectFactory, mWifiConfigManager,
- mWifiConfigStore, mWifiMetrics, mTelephonyManager);
+ mWifiConfigStore, mWifiMetrics, mTelephonyManager, mSubscriptionManager);
ArgumentCaptor<PasspointEventHandler.Callbacks> callbacks =
ArgumentCaptor.forClass(PasspointEventHandler.Callbacks.class);
verify(mObjectFactory).makePasspointEventHandler(any(WifiNative.class),
@@ -231,6 +233,8 @@ public class PasspointManagerTest {
mCallbacks = callbacks.getValue();
mSharedDataSource = sharedDataSource.getValue();
mUserDataSource = userDataSource.getValue();
+ // SIM is absent
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[0]);
}
/**
@@ -1626,7 +1630,8 @@ public class PasspointManagerTest {
when(mDataTelephonyManager.getSimOperator()).thenReturn("123456");
PasspointManager passpointManager = new PasspointManager(mContext, mWifiInjector,
mHandler, mWifiNative, mWifiKeyStore, mClock, mSimAccessor, mObjectFactory,
- mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager);
+ mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager,
+ mSubscriptionManager);
assertNull(passpointManager.createEphemeralPasspointConfigForCarrier(
EAPConstants.EAP_TLS));
@@ -1643,7 +1648,8 @@ public class PasspointManagerTest {
when(mDataTelephonyManager.getSimOperatorName()).thenReturn("test");
PasspointManager passpointManager = new PasspointManager(mContext, mWifiInjector,
mHandler, mWifiNative, mWifiKeyStore, mClock, mSimAccessor, mObjectFactory,
- mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager);
+ mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager,
+ mSubscriptionManager);
PasspointConfiguration result =
passpointManager.createEphemeralPasspointConfigForCarrier(
@@ -1660,7 +1666,8 @@ public class PasspointManagerTest {
*/
@Test
public void verifyInstallEphemeralPasspointConfigurationWithNonCarrierEapMethod() {
- when(mWifiConfigManager.isSimPresent()).thenReturn(true);
+ // SIM is present
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[1]);
PasspointConfiguration config = createTestConfigWithUserCredential("abc.com", "test");
PasspointProvider provider = createMockProvider(config);
when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore),
@@ -1674,7 +1681,8 @@ public class PasspointManagerTest {
*/
@Test
public void verifyInstallEphemeralPasspointConfiguration() {
- when(mWifiConfigManager.isSimPresent()).thenReturn(true);
+ // SIM is present
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[1]);
PasspointConfiguration config = createTestConfigWithSimCredential(TEST_FQDN, TEST_IMSI,
TEST_REALM);
PasspointProvider provider = createMockProvider(config);
@@ -1719,7 +1727,8 @@ public class PasspointManagerTest {
when(mTelephonyManager.createForSubscriptionId(anyInt()))
.thenReturn(mDataTelephonyManager);
when(mDataTelephonyManager.getSimOperator()).thenReturn(TEST_MCC_MNC);
- when(mWifiConfigManager.isSimPresent()).thenReturn(true);
+ // SIM is present
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[1]);
List<ScanDetail> scanDetails = new ArrayList<>();
scanDetails.add(generateScanDetail(TEST_SSID, TEST_BSSID_STRING, TEST_HESSID,
TEST_ANQP_DOMAIN_ID, true));
@@ -1740,7 +1749,8 @@ public class PasspointManagerTest {
PasspointManager passpointManager = new PasspointManager(mContext, mWifiInjector,
mHandler, mWifiNative, mWifiKeyStore, mClock, mSimAccessor, mObjectFactory,
- mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager);
+ mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager,
+ mSubscriptionManager);
assertEquals(EAPConstants.EAP_AKA,
passpointManager.findEapMethodFromNAIRealmMatchedWithCarrier(scanDetails));
} finally {
@@ -1761,13 +1771,15 @@ public class PasspointManagerTest {
when(mTelephonyManager.createForSubscriptionId(anyInt()))
.thenReturn(mDataTelephonyManager);
when(mDataTelephonyManager.getSimOperator()).thenReturn(TEST_MCC_MNC);
- when(mWifiConfigManager.isSimPresent()).thenReturn(true);
+ // SIM is present
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[1]);
List<ScanDetail> scanDetails = new ArrayList<>();
scanDetails.add(generateScanDetail(TEST_SSID, TEST_BSSID_STRING, 0, 0, false));
PasspointManager passpointManager = new PasspointManager(mContext, mWifiInjector,
mHandler, mWifiNative, mWifiKeyStore, mClock, mSimAccessor, mObjectFactory,
- mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager);
+ mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mTelephonyManager,
+ mSubscriptionManager);
assertEquals(-1,
passpointManager.findEapMethodFromNAIRealmMatchedWithCarrier(scanDetails));
diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java
index f9d6a1c8d..3048abae0 100644
--- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java
@@ -37,6 +37,7 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiEnterpriseConfig;
import android.net.wifi.hotspot2.PasspointConfiguration;
import android.net.wifi.hotspot2.pps.HomeSp;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.LocalLog;
import android.util.Pair;
@@ -59,6 +60,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
/**
@@ -84,6 +86,7 @@ public class PasspointNetworkEvaluatorTest {
@Mock OnConnectableListener mOnConnectableListener;
@Mock TelephonyManager mTelephonyManager;
@Mock TelephonyManager mDataTelephonyManager;
+ @Mock SubscriptionManager mSubscriptionManager;
@Mock CarrierNetworkConfig mCarrierNetworkConfig;
@Mock WifiInjector mWifiInjector;
LocalLog mLocalLog;
@@ -149,10 +152,11 @@ public class PasspointNetworkEvaluatorTest {
initMocks(this);
mLocalLog = new LocalLog(512);
mEvaluator = new PasspointNetworkEvaluator(mPasspointManager, mWifiConfigManager, mLocalLog,
- mCarrierNetworkConfig, mWifiInjector);
+ mCarrierNetworkConfig, mWifiInjector, mSubscriptionManager);
when(mWifiInjector.makeTelephonyManager()).thenReturn(mTelephonyManager);
when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mDataTelephonyManager);
- when(mWifiConfigManager.isSimPresent()).thenReturn(true);
+ // SIM is present
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[1]);
when(mDataTelephonyManager.getSimOperator()).thenReturn("123456");
when(mDataTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
}
@@ -382,7 +386,8 @@ public class PasspointNetworkEvaluatorTest {
when(mPasspointManager.matchProvider(any(ScanResult.class))).thenReturn(homeProvider);
when(testProvider.isSimCredential()).thenReturn(true);
- when(mWifiConfigManager.isSimPresent()).thenReturn(false);
+ // SIM is absent
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[0]);
assertEquals(null, mEvaluator.evaluateNetworks(
scanDetails, null, null, false, false, mOnConnectableListener));
@@ -413,7 +418,8 @@ public class PasspointNetworkEvaluatorTest {
mTelephonyManager);
when(mPasspointManager.matchProvider(any(ScanResult.class))).thenReturn(homeProvider);
when(testProvider.isSimCredential()).thenReturn(true);
- when(mWifiConfigManager.isSimPresent()).thenReturn(true);
+ // SIM is present
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[1]);
when(mCarrierNetworkConfig.isCarrierEncryptionInfoAvailable()).thenReturn(true);
when(mCarrierNetworkConfig.isSupportAnonymousIdentity()).thenReturn(true);
when(mWifiConfigManager.addOrUpdateNetwork(any(WifiConfiguration.class), anyInt()))
@@ -452,13 +458,14 @@ public class PasspointNetworkEvaluatorTest {
@Test
public void skipCreateEphemeralPasspointConfigurationWithoutSIMCard() {
// Setup ScanDetail and match providers.
- List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] {
- generateScanDetail(TEST_SSID1, TEST_BSSID1)});
- when(mWifiConfigManager.isSimPresent()).thenReturn(false);
+ List<ScanDetail> scanDetails = Collections.singletonList(
+ generateScanDetail(TEST_SSID1, TEST_BSSID1));
+ // SIM is absent
+ when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[0]);
when(mPasspointManager.hasCarrierProvider(anyString())).thenReturn(false);
when(mCarrierNetworkConfig.isCarrierEncryptionInfoAvailable()).thenReturn(true);
- assertEquals(null, mEvaluator.evaluateNetworks(
+ assertNull(mEvaluator.evaluateNetworks(
scanDetails, null, null, false, false, mOnConnectableListener));
verify(mPasspointManager, never()).createEphemeralPasspointConfigForCarrier(anyInt());
}