summaryrefslogtreecommitdiffstats
path: root/tests/wifitests/src/com/android/server
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wifitests/src/com/android/server')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/PasspointManagementObjectManagerTest.java36
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java18
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java218
3 files changed, 264 insertions, 8 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/PasspointManagementObjectManagerTest.java b/tests/wifitests/src/com/android/server/wifi/PasspointManagementObjectManagerTest.java
index c76bf91a3..d3022b932 100644
--- a/tests/wifitests/src/com/android/server/wifi/PasspointManagementObjectManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/PasspointManagementObjectManagerTest.java
@@ -193,6 +193,21 @@ public class PasspointManagementObjectManagerTest {
assertEquals("testIdentity1", homeSP.getCredential().getUserName());
}
+ /** Verify IOException is thrown when trying to add a SP from a null XML string. */
+ @Test(expected = IOException.class)
+ public void addSPFromNullXmlString() throws Exception {
+ File file = tempFolder.newFile("PerProviderSubscription.conf");
+ PasspointManagementObjectManager moMgr = new PasspointManagementObjectManager(file, true);
+ String xml = null; // Needed to avoid ambiguity on function call.
+ moMgr.addSP(xml);
+ }
+
+ /** Verify IOException is thrown when trying to build a SP from a null XML string. */
+ @Test(expected = IOException.class)
+ public void buildSPFromNullXmlString() throws Exception {
+ PasspointManagementObjectManager.buildSP(null);
+ }
+
/** verify that xml serialization/deserialization works */
public void checkXml() throws Exception {
InputStream in = getClass().getClassLoader().getResourceAsStream(R2_TTLS_XML_FILE);
@@ -268,6 +283,27 @@ public class PasspointManagementObjectManagerTest {
assertEquals(9, homeSP.getUpdateIdentifier());
}
+ /** Verify IOException is thrown when trying to modify a SP using a null XML string. */
+ @Test(expected = IOException.class)
+ public void modifySPFromNullXmlString() throws Exception {
+ File file = createFileFromResource(R2_CONFIG_FILE);
+ PasspointManagementObjectManager moMgr = new PasspointManagementObjectManager(file, true);
+ List<HomeSP> homeSPs = moMgr.loadAllSPs();
+ assertEquals(2, homeSPs.size());
+
+ /* PasspointManagementObjectDefinition with null xmlTree. */
+ String urn = "wfa:mo:hotspot2dot0-perprovidersubscription:1.0";
+ String baseUri = "./Wi-Fi/wi-fi.org/PerProviderSubscription/UpdateIdentifier";
+ String xmlTree = null;
+
+ PasspointManagementObjectDefinition moDef =
+ new PasspointManagementObjectDefinition(baseUri, urn, xmlTree);
+ List<PasspointManagementObjectDefinition> moDefs =
+ new ArrayList<PasspointManagementObjectDefinition>();
+ moDefs.add(moDef);
+ moMgr.modifySP("wi-fi.org", moDefs);
+ }
+
/** verify removing an existing service provider works */
@Test
public void removeSP() throws Exception {
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
index a5850005f..fab06bd56 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
@@ -1060,9 +1060,12 @@ public class WifiConfigManagerTest {
config.priority = rand.nextInt(10000);
config.getNetworkSelectionStatus().setNetworkSelectionStatus(
networkSelectionStatusValues.pop());
- networkSelectionStatusToNetworkIdMap.put(
- config.getNetworkSelectionStatus().getNetworkSelectionStatus(),
- config.networkId);
+ // Permanently disabled networks should not be present in PNO scan request.
+ if (!config.getNetworkSelectionStatus().isNetworkPermanentlyDisabled()) {
+ networkSelectionStatusToNetworkIdMap.put(
+ config.getNetworkSelectionStatus().getNetworkSelectionStatus(),
+ config.networkId);
+ }
Log.i(TAG, "networkID: " + config.networkId + ", NetworkSelectionStatus: "
+ config.getNetworkSelectionStatus().getNetworkSelectionStatus());
}
@@ -1150,9 +1153,12 @@ public class WifiConfigManagerTest {
config.priority = rand.nextInt(10000);
config.getNetworkSelectionStatus().setNetworkSelectionStatus(
networkSelectionStatusValues.pop());
- networkSelectionStatusToNetworkIdMap.put(
- config.getNetworkSelectionStatus().getNetworkSelectionStatus(),
- config.networkId);
+ // Permanently disabled networks should not be present in PNO scan request.
+ if (!config.getNetworkSelectionStatus().isNetworkPermanentlyDisabled()) {
+ networkSelectionStatusToNetworkIdMap.put(
+ config.getNetworkSelectionStatus().getNetworkSelectionStatus(),
+ config.networkId);
+ }
Log.i(TAG, "networkID: " + config.networkId + ", NetworkSelectionStatus: "
+ config.getNetworkSelectionStatus().getNetworkSelectionStatus());
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java
index 1726e7d32..957e8c24c 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java
@@ -46,6 +46,7 @@ import android.util.LocalLog;
import com.android.internal.R;
import com.android.server.wifi.MockAnswerUtil.AnswerWithArguments;
+import com.android.server.wifi.util.ScanDetailUtil;
import org.junit.After;
import org.junit.Before;
@@ -79,6 +80,23 @@ public class WifiQualifiedNetworkSelectorTest {
mWifiQualifiedNetworkSelector.setUserPreferredBand(1);
mWifiQualifiedNetworkSelector.setWifiNetworkScoreCache(mScoreCache);
when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime());
+
+ //setup Carrier Networks
+ WifiConfiguration wifiConfig = new WifiConfiguration();
+ wifiConfig.SSID = "\"TEST1\"";
+ wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
+ mCarrierConfiguredNetworks.add(wifiConfig);
+
+ WifiConfiguration wifiConfig1 = new WifiConfiguration();
+ wifiConfig1.SSID = "\"TEST2\"";
+ wifiConfig1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
+ mCarrierConfiguredNetworks.add(wifiConfig1);
+
+ WifiConfiguration wifiConfig2 = new WifiConfiguration();
+ wifiConfig2.SSID = "\"TEST3\"";
+ wifiConfig2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
+ mCarrierConfiguredNetworks.add(wifiConfig2);
+ mWifiQualifiedNetworkSelector.setCarrierConfiguredNetworks(mCarrierConfiguredNetworks);
}
@After
@@ -98,6 +116,7 @@ public class WifiQualifiedNetworkSelectorTest {
private static final String[] DEFAULT_SSIDS = {"\"test1\"", "\"test2\""};
private static final String[] DEFAULT_BSSIDS = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"};
private static final String TAG = "QNS Unit Test";
+ List<WifiConfiguration> mCarrierConfiguredNetworks = new ArrayList<WifiConfiguration>();
private List<ScanDetail> getScanDetails(String[] ssids, String[] bssids, int[] frequencies,
String[] caps, int[] levels) {
@@ -1070,6 +1089,10 @@ public class WifiQualifiedNetworkSelectorTest {
//first QNS
mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, false, scanDetails, false,
false, true, false);
+ when(mWifiInfo.getNetworkId()).thenReturn(1);
+ when(mWifiInfo.getBSSID()).thenReturn(bssids[1]);
+ when(mWifiInfo.is24GHz()).thenReturn(false);
+ when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true);
//immediately second QNS
WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(true,
false, scanDetails, false, true, false, false);
@@ -1879,10 +1902,12 @@ public class WifiQualifiedNetworkSelectorTest {
// The second scan result is for an ephemeral network which was previously deleted
when(mWifiConfigManager
- .wasEphemeralNetworkDeleted(scanDetails.get(0).getScanResult().SSID))
+ .wasEphemeralNetworkDeleted(ScanDetailUtil.createQuotedSSID(
+ scanDetails.get(0).getScanResult().SSID)))
.thenReturn(false);
when(mWifiConfigManager
- .wasEphemeralNetworkDeleted(scanDetails.get(1).getScanResult().SSID))
+ .wasEphemeralNetworkDeleted(ScanDetailUtil.createQuotedSSID(
+ scanDetails.get(1).getScanResult().SSID)))
.thenReturn(true);
WifiConfiguration.NetworkSelectionStatus selectionStatus =
@@ -2325,4 +2350,193 @@ public class WifiQualifiedNetworkSelectorTest {
false, scanDetails, false, true, false, false);
verifySelectedResult(chosenScanResult, candidate);
}
+
+ /**
+ * Case #48 no new QNS if current network doesn't show up in the
+ * scan results.
+ *
+ * In this test. we simulate following scenario:
+ * WifiStateMachine is under connected state and 2.4GHz test1 is connected.
+ * The second scan results contains test2 which is 5GHz but no test1. Skip
+ * QNS to avoid aggressive network switching.
+ *
+ * expected return null
+ */
+ @Test
+ public void noNewQNSCurrentNetworkNotInScanResults() {
+ //Prepare saved network configurations.
+ String[] ssidsConfig = DEFAULT_SSIDS;
+ int[] security = {SECURITY_PSK, SECURITY_PSK};
+ WifiConfiguration[] savedConfigs = generateWifiConfigurations(ssidsConfig, security);
+ prepareConfigStore(savedConfigs);
+ final List<WifiConfiguration> savedNetwork = Arrays.asList(savedConfigs);
+ when(mWifiConfigManager.getSavedNetworks()).thenReturn(savedNetwork);
+
+ //Prepare the first scan results.
+ String[] ssids = {DEFAULT_SSIDS[0]};
+ String[] bssids = {DEFAULT_BSSIDS[0]};
+ int[] frequencies = {2437};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]"};
+ int[] levels = {-78};
+ List<ScanDetail> scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels);
+ scanResultLinkConfiguration(savedConfigs, scanDetails);
+
+ //Connect to test1.
+ mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, false, scanDetails, false,
+ false, true, false);
+
+ when(mWifiInfo.getNetworkId()).thenReturn(1);
+ when(mWifiInfo.getBSSID()).thenReturn(bssids[0]);
+ when(mWifiInfo.is24GHz()).thenReturn(true);
+ mWifiQualifiedNetworkSelector.setWifiNetworkScoreCache(null);
+ when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true);
+ when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000);
+
+ //Prepare the second scan results which doesn't contain test1.
+ ssids[0] = DEFAULT_SSIDS[1];
+ bssids[0] = DEFAULT_BSSIDS[1];
+ frequencies[0] = 5180;
+ caps[0] = "[WPA2-EAP-CCMP][ESS]";
+ levels[0] = WifiQualifiedNetworkSelector.QUALIFIED_RSSI_5G_BAND;
+ scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels);
+ scanResultLinkConfiguration(savedConfigs, scanDetails);
+
+ //Skip the second network selection since current connected network is
+ //missing from the scan results.
+ WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false,
+ false, scanDetails, false, true, false, false);
+ assertEquals("Expect no network selection", null, candidate);
+ }
+
+ /**
+ * Case #49 Between two 2G Carrier networks, choose the one with stronger RSSI value
+ * if other conditions are the same and the RSSI values are not staturated.
+ */
+ @Test
+ public void chooseStrongerRssi2GCarrierNetwork() {
+
+ String[] ssids = {"TEST1", "TEST2"};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"};
+ int[] frequencies = {2470, 2437};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]"};
+ int[] levels = {-65,-55};
+ int[] security = {SECURITY_PSK, SECURITY_PSK};
+
+ List<ScanDetail> scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels);
+
+ WifiConfiguration[] savedConfigs = generateWifiConfigurations(ssids, security);
+ prepareConfigStore(savedConfigs);
+
+ ScanResult chosenScanResult = scanDetails.get(1).getScanResult();
+ WifiConfiguration unTrustedNetworkCandidate = mock(WifiConfiguration.class);
+ unTrustedNetworkCandidate.SSID = null;
+ unTrustedNetworkCandidate.networkId = WifiConfiguration.INVALID_NETWORK_ID;
+ when(mWifiConfigManager.updateSavedNetworkWithNewScanDetail(scanDetails.get(1),
+ false)).thenReturn(null);
+ when(mWifiConfigManager
+ .wifiConfigurationFromScanResult(scanDetails.get(1).getScanResult()))
+ .thenReturn(unTrustedNetworkCandidate);
+ WifiConfiguration.NetworkSelectionStatus selectionStatus =
+ mock(WifiConfiguration.NetworkSelectionStatus.class);
+ when(unTrustedNetworkCandidate.getNetworkSelectionStatus()).thenReturn(selectionStatus);
+ when(selectionStatus.getCandidate()).thenReturn(chosenScanResult);
+
+ WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false,
+ true, scanDetails, false, false, true, false);
+ assertSame(unTrustedNetworkCandidate, candidate);
+ }
+
+ /**
+ * Case #50 Choose 5G over 2G.
+ */
+ @Test
+ public void choose5GNetworkOver2GNetwork() {
+
+ String[] ssids = {"TEST1", "TEST2"};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"};
+ int[] frequencies = {2437, 5240};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]"};
+ int[] levels = {-65,-55};
+
+ List<ScanDetail> scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels);
+ ScanResult chosenScanResult = scanDetails.get(1).getScanResult();
+ WifiConfiguration unTrustedNetworkCandidate = mock(WifiConfiguration.class);
+ unTrustedNetworkCandidate.SSID = null;
+ unTrustedNetworkCandidate.networkId = WifiConfiguration.INVALID_NETWORK_ID;
+ when(mWifiConfigManager.updateSavedNetworkWithNewScanDetail(scanDetails.get(1),
+ false)).thenReturn(null);
+ when(mWifiConfigManager
+ .wifiConfigurationFromScanResult(scanDetails.get(1).getScanResult()))
+ .thenReturn(unTrustedNetworkCandidate);
+ WifiConfiguration.NetworkSelectionStatus selectionStatus =
+ mock(WifiConfiguration.NetworkSelectionStatus.class);
+ when(unTrustedNetworkCandidate.getNetworkSelectionStatus()).thenReturn(selectionStatus);
+ when(selectionStatus.getCandidate()).thenReturn(chosenScanResult);
+
+ WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false,
+ true, scanDetails, false, false, true, false);
+ assertSame(unTrustedNetworkCandidate, candidate);
+ }
+
+ /**
+ * Case #51 Stay on same BSSID & SSID.
+ */
+ @Test
+ public void chooseSameNetwork() {
+
+ String[] ssids = {"TEST1", "TEST2"};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"};
+ int[] frequencies = {2470, 2437};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]"};
+ int[] levels = {-65,-55};
+ int[] security = {SECURITY_PSK, SECURITY_PSK};
+
+ List<ScanDetail> scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels);
+ WifiConfiguration[] savedConfigs = generateWifiConfigurations(ssids, security);
+ prepareConfigStore(savedConfigs);
+
+ ScanResult chosenScanResult = scanDetails.get(0).getScanResult();
+ WifiConfiguration unTrustedNetworkCandidate = mock(WifiConfiguration.class);
+ unTrustedNetworkCandidate.SSID = null;
+ unTrustedNetworkCandidate.networkId = WifiConfiguration.INVALID_NETWORK_ID;
+
+ when(mWifiInfo.getNetworkId()).thenReturn(0);
+ when(mWifiInfo.getBSSID()).thenReturn(bssids[0]);
+ when(mWifiConfigManager.updateSavedNetworkWithNewScanDetail(scanDetails.get(0),
+ true)).thenReturn(null);
+ when(mWifiConfigManager
+ .wifiConfigurationFromScanResult(scanDetails.get(0).getScanResult()))
+ .thenReturn(unTrustedNetworkCandidate);
+ WifiConfiguration.NetworkSelectionStatus selectionStatus =
+ mock(WifiConfiguration.NetworkSelectionStatus.class);
+ when(unTrustedNetworkCandidate.getNetworkSelectionStatus()).thenReturn(selectionStatus);
+ when(selectionStatus.getCandidate()).thenReturn(chosenScanResult);
+
+ WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false,
+ true, scanDetails, false, true, false, false);
+ assertSame(unTrustedNetworkCandidate, candidate);
+ }
+
+ /**
+ * Case #52 Test condition where no Carrier networks are defined.
+ */
+ @Test
+ public void testNoCarrierNetworks() {
+
+ String[] ssids = {"TEST1", "TEST2"};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"};
+ int[] frequencies = {5200, 5240};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]"};
+ // test2 has slightly stronger RSSI value than test1
+ int[] levels = {-65,-53};
+
+ List<ScanDetail> scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels);
+
+ List<WifiConfiguration> nullCarrierConfiguredNetworks = new ArrayList<WifiConfiguration>();
+ mWifiQualifiedNetworkSelector.setCarrierConfiguredNetworks(nullCarrierConfiguredNetworks);
+
+ WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false,
+ true, scanDetails, false, false, true, false);
+ assertEquals("Expect no network selection", null, candidate);
+ }
}