diff options
author | Peter Qiu <zqiu@google.com> | 2017-05-05 11:33:14 -0700 |
---|---|---|
committer | Peter Qiu <zqiu@google.com> | 2017-05-24 13:11:43 -0700 |
commit | 375a4fbced9ea86e5b30b457b6f324c63b937dda (patch) | |
tree | 2514f6cb83bb1be339e365d9a71e1743d3398968 /tests/wifitests/src/com/android/server/wifi/hotspot2 | |
parent | f826552e97798aff9f6a66235ea40369b70b1d12 (diff) | |
download | android_frameworks_opt_net_wifi-375a4fbced9ea86e5b30b457b6f324c63b937dda.tar.gz android_frameworks_opt_net_wifi-375a4fbced9ea86e5b30b457b6f324c63b937dda.tar.bz2 android_frameworks_opt_net_wifi-375a4fbced9ea86e5b30b457b6f324c63b937dda.zip |
hotspot2: PasspointNetworkEvaluator: update network candidate for current network
When evaluating ScanResults while connected, PasspointNetworkEvaluator
might decide to stay with the current active network based
on the ScanResults and installed providers. In this scenario,
we need to update the selected BSS info for the current active
network, since it is possible to have multiple BSSes associated
with a given network. It is up to the caller to decide if it wants
to initiate a new connection when new BSS is selected.
Bug: 38031353
Test: manual test
Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Change-Id: I9c43edae23264d779dfa34809590aeae12685faf
Diffstat (limited to 'tests/wifitests/src/com/android/server/wifi/hotspot2')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java | 68 |
1 files changed, 59 insertions, 9 deletions
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 9f61ca09c..7ddddd250 100644 --- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkEvaluatorTest.java @@ -59,6 +59,8 @@ public class PasspointNetworkEvaluatorTest { private static final int TEST_NETWORK_ID = 1; private static final String TEST_SSID1 = "ssid1"; private static final String TEST_SSID2 = "ssid2"; + private static final String TEST_BSSID1 = "01:23:45:56:78:9a"; + private static final String TEST_BSSID2 = "23:12:34:90:81:12"; private static final String TEST_FQDN1 = "test1.com"; private static final String TEST_FQDN2 = "test2.com"; private static final WifiConfiguration TEST_CONFIG1 = generateWifiConfig(TEST_FQDN1); @@ -107,14 +109,18 @@ public class PasspointNetworkEvaluatorTest { * @param rssiLevel The RSSI level associated with the scan * @return {@link ScanDetail} */ - private static ScanDetail generateScanDetail(String ssid) { + private static ScanDetail generateScanDetail(String ssid, String bssid) { NetworkDetail networkDetail = mock(NetworkDetail.class); when(networkDetail.isInterworking()).thenReturn(true); when(networkDetail.getAnt()).thenReturn(NetworkDetail.Ant.FreePublic); ScanDetail scanDetail = mock(ScanDetail.class); + ScanResult scanResult = new ScanResult(); + scanResult.SSID = ssid; + scanResult.BSSID = bssid; when(scanDetail.getSSID()).thenReturn(ssid); - when(scanDetail.getScanResult()).thenReturn(new ScanResult()); + when(scanDetail.getBSSIDString()).thenReturn(bssid); + when(scanDetail.getScanResult()).thenReturn(scanResult); when(scanDetail.getNetworkDetail()).thenReturn(networkDetail); return scanDetail; } @@ -138,7 +144,8 @@ public class PasspointNetworkEvaluatorTest { @Test public void evaluateScansWithNoMatch() throws Exception { List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] { - generateScanDetail(TEST_SSID1), generateScanDetail(TEST_SSID2)}); + generateScanDetail(TEST_SSID1, TEST_BSSID1), + generateScanDetail(TEST_SSID2, TEST_BSSID2)}); List<Pair<ScanDetail, WifiConfiguration>> connectableNetworks = new ArrayList<>(); when(mPasspointManager.matchProvider(any(ScanResult.class))).thenReturn(null); assertEquals(null, mEvaluator.evaluateNetworks( @@ -177,7 +184,8 @@ public class PasspointNetworkEvaluatorTest { @Test public void evaluateScansWithNetworkMatchingHomeProvider() throws Exception { List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] { - generateScanDetail(TEST_SSID1), generateScanDetail(TEST_SSID2)}); + generateScanDetail(TEST_SSID1, TEST_BSSID1), + generateScanDetail(TEST_SSID2, TEST_BSSID2)}); // Setup matching providers for ScanDetail with TEST_SSID1. Pair<PasspointProvider, PasspointMatch> homeProvider = Pair.create( @@ -219,7 +227,8 @@ public class PasspointNetworkEvaluatorTest { @Test public void evaluateScansWithNetworkMatchingRoamingProvider() throws Exception { List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] { - generateScanDetail(TEST_SSID1), generateScanDetail(TEST_SSID2)}); + generateScanDetail(TEST_SSID1, TEST_BSSID1), + generateScanDetail(TEST_SSID2, TEST_BSSID2)}); // Setup matching providers for ScanDetail with TEST_SSID1. Pair<PasspointProvider, PasspointMatch> roamingProvider = Pair.create( @@ -261,7 +270,8 @@ public class PasspointNetworkEvaluatorTest { @Test public void evaluateScansWithHomeProviderNewtorkAndRoamingProviderNetwork() throws Exception { List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] { - generateScanDetail(TEST_SSID1), generateScanDetail(TEST_SSID2)}); + generateScanDetail(TEST_SSID1, TEST_BSSID1), + generateScanDetail(TEST_SSID2, TEST_BSSID2)}); // Setup matching providers for ScanDetail with TEST_SSID1. Pair<PasspointProvider, PasspointMatch> homeProvider = Pair.create( @@ -305,7 +315,8 @@ public class PasspointNetworkEvaluatorTest { @Test public void evaluateScansWithActiveNetworkMatchingHomeProvider() throws Exception { List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] { - generateScanDetail(TEST_SSID1), generateScanDetail(TEST_SSID2)}); + generateScanDetail(TEST_SSID1, TEST_BSSID1), + generateScanDetail(TEST_SSID2, TEST_BSSID2)}); // Setup matching providers for both ScanDetail. Pair<PasspointProvider, PasspointMatch> homeProvider = Pair.create( @@ -315,7 +326,7 @@ public class PasspointNetworkEvaluatorTest { WifiConfiguration currentNetwork = new WifiConfiguration(); currentNetwork.networkId = TEST_NETWORK_ID; currentNetwork.SSID = ScanResultUtil.createQuotedSSID(TEST_SSID2); - String currentBssid = "12:23:34:45:12:0F"; + String currentBssid = TEST_BSSID2; // Returning the same matching provider for both ScanDetail. List<Pair<ScanDetail, WifiConfiguration>> connectableNetworks = new ArrayList<>(); @@ -344,7 +355,7 @@ public class PasspointNetworkEvaluatorTest { public void evaluateScanMatchingSIMProviderWithoutSIMCard() throws Exception { // Setup ScanDetail and match providers. List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] { - generateScanDetail(TEST_SSID1)}); + generateScanDetail(TEST_SSID1, TEST_BSSID1)}); PasspointProvider testProvider = mock(PasspointProvider.class); Pair<PasspointProvider, PasspointMatch> homeProvider = Pair.create( testProvider, PasspointMatch.HomeProvider); @@ -357,6 +368,45 @@ public class PasspointNetworkEvaluatorTest { scanDetails, null, null, false, false, connectableNetworks)); assertTrue(connectableNetworks.isEmpty()); verify(testProvider, never()).getWifiConfig(); + } + + /** + * Verify that when the current active network is matched, the scan info associated with + * the network is updated. + * + * @throws Exception + */ + @Test + public void evaluateScansMatchingActiveNetworkWithDifferentBSS() throws Exception { + List<ScanDetail> scanDetails = Arrays.asList(new ScanDetail[] { + generateScanDetail(TEST_SSID1, TEST_BSSID2)}); + // Setup matching provider. + Pair<PasspointProvider, PasspointMatch> homeProvider = Pair.create( + TEST_PROVIDER1, PasspointMatch.HomeProvider); + + // Setup currently connected network. + WifiConfiguration currentNetwork = new WifiConfiguration(); + currentNetwork.networkId = TEST_NETWORK_ID; + currentNetwork.SSID = ScanResultUtil.createQuotedSSID(TEST_SSID1); + String currentBssid = TEST_BSSID1; + + // Match the current connected network to a home provider. + List<Pair<ScanDetail, WifiConfiguration>> connectableNetworks = new ArrayList<>(); + when(mPasspointManager.matchProvider(any(ScanResult.class))).thenReturn(homeProvider); + WifiConfiguration config = mEvaluator.evaluateNetworks(scanDetails, currentNetwork, + currentBssid, true, false, connectableNetworks); + assertEquals(1, connectableNetworks.size()); + // Verify network candidate information is updated. + ArgumentCaptor<ScanResult> updatedCandidateScanResult = + ArgumentCaptor.forClass(ScanResult.class); + verify(mWifiConfigManager).setNetworkCandidateScanResult(eq(TEST_NETWORK_ID), + updatedCandidateScanResult.capture(), anyInt()); + assertEquals(TEST_BSSID2, updatedCandidateScanResult.getValue().BSSID); + ArgumentCaptor<ScanDetail> updatedCandidateScanDetail = + ArgumentCaptor.forClass(ScanDetail.class); + verify(mWifiConfigManager).updateScanDetailForNetwork(eq(TEST_NETWORK_ID), + updatedCandidateScanDetail.capture()); + assertEquals(TEST_BSSID2, updatedCandidateScanDetail.getValue().getBSSIDString()); } } |