summaryrefslogtreecommitdiffstats
path: root/tests/wifitests/src/com/android/server/wifi/hotspot2
diff options
context:
space:
mode:
authorPeter Qiu <zqiu@google.com>2017-05-05 11:33:14 -0700
committerPeter Qiu <zqiu@google.com>2017-05-24 13:11:43 -0700
commit375a4fbced9ea86e5b30b457b6f324c63b937dda (patch)
tree2514f6cb83bb1be339e365d9a71e1743d3398968 /tests/wifitests/src/com/android/server/wifi/hotspot2
parentf826552e97798aff9f6a66235ea40369b70b1d12 (diff)
downloadandroid_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.java68
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());
}
}