Optimize the Scan for test request multiple APs
Bug: 270501425
Test: atest CtsWifiTestCases
Change-Id: Ic9b867a6301c3e235bcac2d5cad97b320fce6781
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java b/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java
index cc6711f..02128ce 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java
@@ -798,7 +798,7 @@
savedNetworks = mWifiManager.getPrivilegedConfiguredNetworks();
WifiConfiguration testNetwork =
- TestHelper.findMatchingSavedNetworksWithBssid(mWifiManager, savedNetworks)
+ TestHelper.findMatchingSavedNetworksWithBssid(mWifiManager, savedNetworks, 1)
.get(0);
// Disconnect & disable auto-join on the saved network to prevent auto-connect from
// interfering with the test.
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyMultiInternetWifiNetworkTest.java b/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyMultiInternetWifiNetworkTest.java
index 314d097..4177068 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyMultiInternetWifiNetworkTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyMultiInternetWifiNetworkTest.java
@@ -207,7 +207,7 @@
List<WifiConfiguration> savedNetworks = ShellIdentityUtils.invokeWithShellPermissions(
() -> mWifiManager.getPrivilegedConfiguredNetworks());
mMatchingNetworksMap =
- TestHelper.findMatchingSavedNetworksWithBssidByBand(mWifiManager, savedNetworks);
+ TestHelper.findMatchingSavedNetworksWithBssidByBand(mWifiManager, savedNetworks, 2);
assertWithMessage("Need at least 2 saved network bssids in different bands").that(
mMatchingNetworksMap.size()).isAtLeast(2);
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.java b/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.java
index 8b030da..fb8c517 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.java
@@ -171,7 +171,7 @@
List<WifiConfiguration> savedNetworks = ShellIdentityUtils.invokeWithShellPermissions(
() -> mWifiManager.getPrivilegedConfiguredNetworks());
List<WifiConfiguration> matchingNetworksWithBssid =
- TestHelper.findMatchingSavedNetworksWithBssid(mWifiManager, savedNetworks);
+ TestHelper.findMatchingSavedNetworksWithBssid(mWifiManager, savedNetworks, 2);
assertWithMessage("Need at least 2 saved network bssids in range").that(
matchingNetworksWithBssid.size()).isAtLeast(2);
// Pick any 2 bssid for test.
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyWifiNetworkSpecifierTest.java b/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyWifiNetworkSpecifierTest.java
index 3c1401d..9373b7a 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyWifiNetworkSpecifierTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/MultiStaConcurrencyWifiNetworkSpecifierTest.java
@@ -169,7 +169,7 @@
List<WifiConfiguration> savedNetworks = ShellIdentityUtils.invokeWithShellPermissions(
() -> mWifiManager.getPrivilegedConfiguredNetworks());
List<WifiConfiguration> matchingNetworksWithBssid =
- TestHelper.findMatchingSavedNetworksWithBssid(mWifiManager, savedNetworks);
+ TestHelper.findMatchingSavedNetworksWithBssid(mWifiManager, savedNetworks, 2);
assertWithMessage("Need at least 2 saved network bssids in range")
.that(matchingNetworksWithBssid.size()).isAtLeast(2);
// Pick any 2 bssid for test.
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/TestHelper.java b/tests/tests/wifi/src/android/net/wifi/cts/TestHelper.java
index b5d8b53..104d513 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/TestHelper.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/TestHelper.java
@@ -65,6 +65,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -139,16 +140,18 @@
* a) If there are more than 2 networks with the same SSID, but different credential type, then
* this matching may pick the wrong one.
*
- * @param wifiManager WifiManager service
+ * @param wifiManager WifiManager service
* @param savedNetworks List of saved networks on the device.
* @return List of WifiConfiguration with matching bssid.
*/
public static List<WifiConfiguration> findMatchingSavedNetworksWithBssid(
- @NonNull WifiManager wifiManager, @NonNull List<WifiConfiguration> savedNetworks) {
+ @NonNull WifiManager wifiManager, @NonNull List<WifiConfiguration> savedNetworks,
+ int numberOfApRequested) {
if (savedNetworks.isEmpty()) return Collections.emptyList();
List<WifiConfiguration> matchingNetworksWithBssids = new ArrayList<>();
Map<Integer, List<WifiConfiguration>> networksMap =
- findMatchingSavedNetworksWithBssidByBand(wifiManager, savedNetworks);
+ findMatchingSavedNetworksWithBssidByBand(wifiManager, savedNetworks,
+ numberOfApRequested);
for (List<WifiConfiguration> configs : networksMap.values()) {
matchingNetworksWithBssids.addAll(configs);
}
@@ -163,15 +166,18 @@
* a) If there are more than 2 networks with the same SSID, but different credential type, then
* this matching may pick the wrong one.
*
- * @param wifiManager WifiManager service
+ * @param wifiManager WifiManager service
* @param savedNetworks List of saved networks on the device.
* @return Map from band to the list of WifiConfiguration with matching bssid.
*/
public static Map<Integer, List<WifiConfiguration>> findMatchingSavedNetworksWithBssidByBand(
- @NonNull WifiManager wifiManager, @NonNull List<WifiConfiguration> savedNetworks) {
+ @NonNull WifiManager wifiManager, @NonNull List<WifiConfiguration> savedNetworks,
+ int numberOfApRequested) {
if (savedNetworks.isEmpty()) return Collections.emptyMap();
+ Set<String> bssidSet = new HashSet<>();
Map<Integer, List<WifiConfiguration>> matchingNetworksWithBssids = new ArrayMap<>();
for (int i = 0; i < SCAN_RETRY_CNT_TO_FIND_MATCHING_BSSID; i++) {
+ int count = 0;
// Trigger a scan to get fresh scan results.
TestScanResultsCallback scanResultsCallback = new TestScanResultsCallback();
try {
@@ -187,6 +193,9 @@
sScanResults = wifiManager.getScanResults();
if (sScanResults == null || sScanResults.isEmpty()) continue;
for (ScanResult scanResult : sScanResults) {
+ if (bssidSet.contains(scanResult.BSSID)) {
+ continue;
+ }
WifiConfiguration matchingNetwork = savedNetworks.stream()
.filter(network -> TextUtils.equals(
scanResult.SSID, WifiInfo.sanitizeSsid(network.SSID)))
@@ -196,16 +205,15 @@
// make a copy in case we have 2 bssid's for the same network.
WifiConfiguration matchingNetworkCopy = new WifiConfiguration(matchingNetwork);
matchingNetworkCopy.BSSID = scanResult.BSSID;
- List<WifiConfiguration> bandConfigs = matchingNetworksWithBssids.get(
- scanResult.getBand());
- if (bandConfigs == null) {
- bandConfigs = new ArrayList<>();
- matchingNetworksWithBssids.put(scanResult.getBand(), bandConfigs);
- }
+ bssidSet.add(scanResult.BSSID);
+ List<WifiConfiguration> bandConfigs =
+ matchingNetworksWithBssids.computeIfAbsent(
+ scanResult.getBand(), k -> new ArrayList<>());
bandConfigs.add(matchingNetworkCopy);
}
}
- if (!matchingNetworksWithBssids.isEmpty()) break;
+ if (bssidSet.size() >= numberOfApRequested
+ && !matchingNetworksWithBssids.isEmpty()) break;
}
return matchingNetworksWithBssids;
}
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSpecifierTest.java b/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSpecifierTest.java
index 79d8201..9e1dddd 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSpecifierTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSpecifierTest.java
@@ -229,7 +229,7 @@
.that(savedNetworks.isEmpty()).isFalse();
// Pick any network in range.
- sTestNetwork = TestHelper.findMatchingSavedNetworksWithBssid(wifiManager, savedNetworks)
+ sTestNetwork = TestHelper.findMatchingSavedNetworksWithBssid(wifiManager, savedNetworks, 2)
.get(0);
}
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSuggestionTest.java b/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSuggestionTest.java
index 2ed8e9c..264db32 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSuggestionTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/WifiNetworkSuggestionTest.java
@@ -166,7 +166,7 @@
// Pick any network in range.
List<WifiConfiguration> networks = TestHelper.findMatchingSavedNetworksWithBssid(
- sWifiManager, savedNetworks);
+ sWifiManager, savedNetworks, 2);
if (!networks.isEmpty()) {
sTestNetwork = networks.get(0);
}