diff options
Diffstat (limited to 'tests/wifitests/src/com/android/server')
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); + } } |