wifi/CarrierNetworkEvaluator - skip blacklisted networks
Bug: 123923536
Test: atest CarrierNetworkEvaluatorTest
Change-Id: I1c461057b908856414b6d2a06bec2e0597bf4264
diff --git a/service/java/com/android/server/wifi/CarrierNetworkEvaluator.java b/service/java/com/android/server/wifi/CarrierNetworkEvaluator.java
index b052c7d..323cfc0 100644
--- a/service/java/com/android/server/wifi/CarrierNetworkEvaluator.java
+++ b/service/java/com/android/server/wifi/CarrierNetworkEvaluator.java
@@ -110,6 +110,17 @@
}
config.enterpriseConfig.setEapMethod(eapType);
+ // Check if we already have a network with the same credentials in WifiConfigManager
+ // database. If yes, we should check if the network is currently blacklisted.
+ WifiConfiguration existingNetwork =
+ mWifiConfigManager.getConfiguredNetwork(config.configKey());
+ if (existingNetwork != null
+ && !existingNetwork.getNetworkSelectionStatus().isNetworkEnabled()
+ && !mWifiConfigManager.tryEnableNetwork(existingNetwork.networkId)) {
+ mLocalLog.log(TAG + ": Ignoring blacklisted network: "
+ + WifiNetworkSelector.toNetworkString(existingNetwork));
+ continue;
+ }
// Add the newly created WifiConfiguration to WifiConfigManager.
NetworkUpdateResult result = mWifiConfigManager.addOrUpdateNetwork(config,
Process.WIFI_UID);
@@ -131,7 +142,10 @@
config = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId());
- WifiConfiguration.NetworkSelectionStatus nss = config.getNetworkSelectionStatus();
+ WifiConfiguration.NetworkSelectionStatus nss = null;
+ if (config != null) {
+ nss = config.getNetworkSelectionStatus();
+ }
if (nss == null) {
mLocalLog.log(TAG + ": null network selection status for: " + config);
continue;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/CarrierNetworkEvaluatorTest.java b/service/tests/wifitests/src/com/android/server/wifi/CarrierNetworkEvaluatorTest.java
index ef8ceb1..0c61e17 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/CarrierNetworkEvaluatorTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/CarrierNetworkEvaluatorTest.java
@@ -122,8 +122,8 @@
private AddOrUpdateNetworkAnswer mAddOrUpdateNetworkAnswer;
- private void configureNewSsid(int networkId, ScanDetail scanDetail, boolean isEphemeral,
- boolean isSaved) {
+ private WifiConfiguration configureNewSsid(int networkId, ScanDetail scanDetail,
+ boolean isEphemeral, boolean isSaved) {
WifiConfiguration newConfig = ScanResultUtil.createNetworkFromScanResult(
scanDetail.getScanResult());
assertTrue("" + newConfig, WifiConfigurationUtil.validate(newConfig, true));
@@ -140,6 +140,7 @@
anyInt())).thenReturn(true);
when(mWifiConfigManager.getConfiguredNetwork(networkId)).thenReturn(newConfig);
mAddOrUpdateNetworkAnswer.addConfig(newConfig, networkId);
+ return newConfig;
}
/** Sets up test. */
@@ -334,4 +335,41 @@
verify(mConnectableListener, never()).onConnectable(any(), any(), anyInt());
assertNull(selected);
}
+
+ /**
+ * One carrier Wi-Fi networks visible and cert installed but ssid is blacklisted.
+ *
+ * Desired behavior: no networks connectable or selected
+ */
+ @Test
+ public void testAvailableButBlacklisted() {
+ String[] ssids = {CARRIER1_SSID};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3"};
+ int[] freqs = {2470};
+ String[] caps = {"[WPA2-EAP-CCMP]"};
+ int[] levels = {10};
+
+ when(mCarrierNetworkConfig.isCarrierEncryptionInfoAvailable()).thenReturn(true);
+
+ List<ScanDetail> scanDetails = WifiNetworkSelectorTestUtil.buildScanDetails(ssids, bssids,
+ freqs, caps, levels, mClock);
+ WifiConfiguration blacklisted =
+ configureNewSsid(CARRIER1_NET_ID, scanDetails.get(0), true, false);
+ blacklisted.getNetworkSelectionStatus()
+ .setNetworkSelectionStatus(
+ WifiConfiguration.NetworkSelectionStatus
+ .NETWORK_SELECTION_PERMANENTLY_DISABLED);
+ when(mWifiConfigManager.getConfiguredNetwork(eq(blacklisted.configKey())))
+ .thenReturn(blacklisted);
+ when(mWifiConfigManager.tryEnableNetwork(CARRIER1_NET_ID))
+ .thenReturn(false);
+
+ WifiConfiguration selected = mDut.evaluateNetworks(scanDetails, null, null, false, false,
+ mConnectableListener);
+ verify(mWifiConfigManager).getConfiguredNetwork(eq(blacklisted.configKey()));
+
+ verify(mConnectableListener, never()).onConnectable(any(), any(), anyInt());
+ assertNull(selected);
+ }
+
}