diff options
author | Michael Plass <mplass@google.com> | 2020-04-10 08:37:19 -0700 |
---|---|---|
committer | Michael Plass <mplass@google.com> | 2020-04-20 14:36:53 +0000 |
commit | 9d1fa2cdb82d7435d25d88854726528962ca79c9 (patch) | |
tree | 3371e1c6d664ef9dbd81acb9388bd83a7e052ee4 /tests | |
parent | 1c93299eed327259785fd3a747d8abdec08397eb (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')
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() { |