summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichael Plass <mplass@google.com>2020-04-10 08:37:19 -0700
committerMichael Plass <mplass@google.com>2020-04-20 14:36:53 +0000
commit9d1fa2cdb82d7435d25d88854726528962ca79c9 (patch)
tree3371e1c6d664ef9dbd81acb9388bd83a7e052ee4 /tests
parent1c93299eed327259785fd3a747d8abdec08397eb (diff)
Estimate the probability of getting internet
Use WifiScoreCard statistics to estimate how likely it is that a candidate BSSID will be able to provide internet access. Also hook up the success/failure stats for roaming. Bug: 111230798 Test: atest WifiScoreCardTest WifiCandidatesTest Change-Id: Ic344ce78c1544fb0f9be46a40e3900067cf5d991
Diffstat (limited to 'tests')
-rw-r--r--tests/wifitests/Android.bp6
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ConcreteCandidate.java13
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiCandidatesTest.java5
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiScoreCardTest.java84
4 files changed, 102 insertions, 6 deletions
diff --git a/tests/wifitests/Android.bp b/tests/wifitests/Android.bp
index 6ba8c908a..851a6016e 100644
--- a/tests/wifitests/Android.bp
+++ b/tests/wifitests/Android.bp
@@ -402,6 +402,9 @@ android_test {
"com.android.server.wifi.WifiCandidates",
"com.android.server.wifi.WifiCandidates$*",
"com.android.server.wifi.WifiCandidates.**",
+ "com.android.server.wifi.WifiCarrierInfoManager",
+ "com.android.server.wifi.WifiCarrierInfoManager$*",
+ "com.android.server.wifi.WifiCarrierInfoManager.**",
"com.android.server.wifi.WifiChannelUtilization",
"com.android.server.wifi.WifiChannelUtilization$*",
"com.android.server.wifi.WifiChannelUtilization.**",
@@ -933,9 +936,6 @@ android_test {
"com.android.server.wifi.util.StringUtil",
"com.android.server.wifi.util.StringUtil$*",
"com.android.server.wifi.util.StringUtil.**",
- "com.android.server.wifi.WifiCarrierInfoManager",
- "com.android.server.wifi.WifiCarrierInfoManager$*",
- "com.android.server.wifi.WifiCarrierInfoManager.**",
"com.android.server.wifi.util.TimedQuotaManager",
"com.android.server.wifi.util.TimedQuotaManager$*",
"com.android.server.wifi.util.TimedQuotaManager.**",
diff --git a/tests/wifitests/src/com/android/server/wifi/ConcreteCandidate.java b/tests/wifitests/src/com/android/server/wifi/ConcreteCandidate.java
index b95a1171b..37d2945cf 100644
--- a/tests/wifitests/src/com/android/server/wifi/ConcreteCandidate.java
+++ b/tests/wifitests/src/com/android/server/wifi/ConcreteCandidate.java
@@ -40,6 +40,7 @@ public final class ConcreteCandidate implements WifiCandidates.Candidate {
private int mScanRssi = -127;
private int mFrequency = -1;
private int mPredictedThroughputMbps = 0;
+ private int mEstimatedPercentInternetAvailability = 50;
private final Map<WifiScoreCardProto.Event, WifiScoreCardProto.Signal>
mEventStatisticsMap = new ArrayMap<>();
@@ -65,6 +66,8 @@ public final class ConcreteCandidate implements WifiCandidates.Candidate {
mScanRssi = candidate.getScanRssi();
mFrequency = candidate.getFrequency();
mPredictedThroughputMbps = candidate.getPredictedThroughputMbps();
+ mEstimatedPercentInternetAvailability = candidate
+ .getEstimatedPercentInternetAvailability();
for (WifiScoreCardProto.Event event : WifiScoreCardProto.Event.values()) {
WifiScoreCardProto.Signal signal = candidate.getEventStatistics(event);
if (signal != null) {
@@ -243,6 +246,16 @@ public final class ConcreteCandidate implements WifiCandidates.Candidate {
return mPredictedThroughputMbps;
}
+ public ConcreteCandidate setEstimatedPercentInternetAvailability(int percent) {
+ mEstimatedPercentInternetAvailability = percent;
+ return this;
+ }
+
+ @Override
+ public int getEstimatedPercentInternetAvailability() {
+ return mEstimatedPercentInternetAvailability;
+ }
+
public ConcreteCandidate setEventStatistics(
WifiScoreCardProto.Event event,
WifiScoreCardProto.Signal signal) {
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiCandidatesTest.java b/tests/wifitests/src/com/android/server/wifi/WifiCandidatesTest.java
index 7ce59c9ee..9ff064ed1 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiCandidatesTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiCandidatesTest.java
@@ -79,6 +79,7 @@ public class WifiCandidatesTest extends WifiBaseTest {
doReturn(mScanResult1).when(mScanDetail1).getScanResult();
doReturn(mScanResult2).when(mScanDetail2).getScanResult();
doReturn(mPerBssid).when(mWifiScoreCard).lookupBssid(any(), any());
+ doReturn(50).when(mPerBssid).estimatePercentInternetAvailability();
MockResources mResources = new MockResources();
mResources.setBoolean(R.bool.config_wifiSaeUpgradeEnabled, true);
doReturn(mResources).when(mContext).getResources();
@@ -182,13 +183,15 @@ public class WifiCandidatesTest extends WifiBaseTest {
*/
@Test
public void testCandidateToString() throws Exception {
+ doReturn(57).when(mPerBssid).estimatePercentInternetAvailability();
mWifiCandidates.add(mScanDetail1, mConfig1, 2, 0.0015001, false, 100);
WifiCandidates.Candidate c = mWifiCandidates.getGroupedCandidates()
.iterator().next().iterator().next();
String s = c.toString();
assertTrue(s, s.contains(" nominator = 2, "));
- assertTrue(s, s.contains(" networkId = " + mConfig1.networkId + ", "));
+ assertTrue(s, s.contains(" config = " + mConfig1.networkId + ", "));
assertTrue(s, s.contains(" lastSelectionWeight = 0.002, ")); // should be rounded
+ assertTrue(s, s.contains(" pInternet = 57, "));
for (String x : s.split(",")) {
if (x.startsWith("Candidate {")) x = x.substring("Candidate {".length());
if (x.endsWith(" }")) x = x.substring(0, x.length() - 2);
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiScoreCardTest.java b/tests/wifitests/src/com/android/server/wifi/WifiScoreCardTest.java
index 3fc62609a..e5525c4c7 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiScoreCardTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiScoreCardTest.java
@@ -39,6 +39,7 @@ import static org.mockito.Mockito.*;
import android.content.Context;
import android.net.MacAddress;
+import android.net.wifi.SupplicantState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiSsid;
import android.util.Base64;
@@ -72,6 +73,7 @@ import java.util.List;
*/
@SmallTest
public class WifiScoreCardTest extends WifiBaseTest {
+
static final WifiSsid TEST_SSID_1 = WifiSsid.createFromAsciiEncoded("Joe's Place");
static final WifiSsid TEST_SSID_2 = WifiSsid.createFromAsciiEncoded("Poe's Ravn");
@@ -364,9 +366,10 @@ public class WifiScoreCardTest extends WifiBaseTest {
secondsPass(9900);
// Second validation success should not matter.
mWifiScoreCard.noteValidationSuccess(mWifiInfo);
+ mWifiInfo.setRssi(-88);
+ mWifiScoreCard.noteIpReachabilityLost(mWifiInfo);
mWifiScoreCard.noteWifiDisabled(mWifiInfo);
-
// Now verify
WifiScoreCard.PerBssid perBssid = mWifiScoreCard.fetchByBssid(TEST_BSSID_1);
assertEquals(1, perBssid.lookupSignal(Event.IP_CONFIGURATION_SUCCESS, 5805)
@@ -375,14 +378,91 @@ public class WifiScoreCardTest extends WifiBaseTest {
.elapsedMs.sum, TOL);
assertEquals(9999999.0, perBssid.lookupSignal(Event.WIFI_DISABLED, 5805)
.elapsedMs.maxValue, TOL);
- assertEquals(999.0, perBssid.lookupSignal(Event.FIRST_POLL_AFTER_CONNECTION, 5805)
+ assertEquals(999.0, perBssid.lookupSignal(Event.FIRST_POLL_AFTER_CONNECTION, 5805)
.elapsedMs.minValue, TOL);
assertEquals(99999.0, perBssid.lookupSignal(Event.VALIDATION_SUCCESS, 5805)
.elapsedMs.sum, TOL);
+ assertEquals(-88.0, perBssid.lookupSignal(Event.IP_REACHABILITY_LOST, 5805)
+ .rssi.sum, TOL);
assertNull(perBssid.lookupSignal(Event.SIGNAL_POLL, 5805).elapsedMs);
}
/**
+ * Firmware roam
+ */
+ @Test
+ public void testFirmwareRoam() throws Exception {
+ // Start out disconnected; start connecting
+ mWifiInfo.setBSSID(android.net.wifi.WifiInfo.DEFAULT_MAC_ADDRESS);
+ mWifiScoreCard.noteConnectionAttempt(mWifiInfo, -53, mWifiInfo.getSSID());
+
+ // First poll has a bad RSSI
+ millisecondsPass(111);
+ mWifiInfo.setBSSID(TEST_BSSID_1.toString());
+ mWifiInfo.setSupplicantState(SupplicantState.COMPLETED);
+ mWifiInfo.setFrequency(5805);
+ mWifiInfo.setRssi(WifiInfo.INVALID_RSSI);
+
+ // A bit later, connection is complete (up through DHCP)
+ millisecondsPass(222);
+ mWifiInfo.setRssi(-55);
+ mWifiScoreCard.noteIpConfiguration(mWifiInfo);
+
+ millisecondsPass(666);
+ mWifiInfo.setRssi(-77);
+ // Rssi polls for 99 seconds
+ for (int i = 0; i < 99; i += 9) {
+ mWifiScoreCard.noteSignalPoll(mWifiInfo);
+ secondsPass(9);
+ }
+
+ // Make sure our simulated time adds up
+ assertEquals(mMilliSecondsSinceBoot, 99999);
+ // Validation success, rather late!
+ mWifiScoreCard.noteValidationSuccess(mWifiInfo);
+ // Simulate a successful roam
+ mWifiScoreCard.noteSupplicantStateChanging(mWifiInfo, SupplicantState.COMPLETED);
+ millisecondsPass(1);
+ mWifiInfo.setBSSID(TEST_BSSID_2.toString());
+ mWifiInfo.setRssi(-66);
+ mWifiInfo.setFrequency(2412);
+ mWifiInfo.setSupplicantState(SupplicantState.COMPLETED);
+ mWifiScoreCard.noteSupplicantStateChanged(mWifiInfo);
+ secondsPass(9);
+ assertEquals(mMilliSecondsSinceBoot, 109000);
+ mWifiScoreCard.noteSignalPoll(mWifiInfo);
+
+ // Simulate an unsuccessful roam
+ secondsPass(1);
+ mWifiInfo.setRssi(-74);
+ mWifiScoreCard.noteSignalPoll(mWifiInfo);
+ secondsPass(1);
+ mWifiScoreCard.noteSupplicantStateChanging(mWifiInfo, SupplicantState.COMPLETED);
+ mWifiInfo.setBSSID(TEST_BSSID_1.toString());
+ mWifiInfo.setFrequency(5805);
+ mWifiInfo.setSupplicantState(SupplicantState.COMPLETED);
+ mWifiScoreCard.noteSupplicantStateChanged(mWifiInfo);
+ secondsPass(3);
+ mWifiScoreCard.noteIpReachabilityLost(mWifiInfo);
+
+ // Now verify
+ WifiScoreCard.PerBssid perBssid = mWifiScoreCard.fetchByBssid(TEST_BSSID_1);
+ assertEquals(1, perBssid.lookupSignal(Event.IP_CONFIGURATION_SUCCESS, 5805)
+ .elapsedMs.count);
+ assertEquals(-77, perBssid.lookupSignal(Event.LAST_POLL_BEFORE_ROAM, 5805)
+ .rssi.minValue, TOL);
+ assertEquals(1, perBssid.lookupSignal(Event.ROAM_FAILURE, 5805)
+ .rssi.count);
+
+ assertEquals(67, perBssid.estimatePercentInternetAvailability());
+
+ perBssid = mWifiScoreCard.fetchByBssid(TEST_BSSID_2);
+ assertEquals(-66.0, perBssid.lookupSignal(Event.ROAM_SUCCESS, 2412)
+ .rssi.sum, TOL);
+ assertEquals(50, perBssid.estimatePercentInternetAvailability());
+ }
+
+ /**
* Constructs a protobuf form of AccessPoint example.
*/
private byte[] makeSerializedAccessPointExample() {