diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/BaseWifiScannerImplTest.java | 79 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/ScanResults.java | 2 |
2 files changed, 80 insertions, 1 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/BaseWifiScannerImplTest.java b/tests/wifitests/src/com/android/server/wifi/BaseWifiScannerImplTest.java index 9f65f44ec..5e11cd97a 100644 --- a/tests/wifitests/src/com/android/server/wifi/BaseWifiScannerImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/BaseWifiScannerImplTest.java @@ -32,6 +32,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiScanner; +import android.net.wifi.WifiScanner.ScanData; +import android.net.wifi.WifiSsid; +import android.os.SystemClock; import com.android.server.wifi.scanner.ChannelHelper.ChannelCollection; @@ -41,6 +44,9 @@ import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.Set; /** @@ -241,6 +247,79 @@ public abstract class BaseWifiScannerImplTest { verifyNoMoreInteractions(eventHandler); } + /** + * Validate that scan results that are returned from supplicant, which are timestamped prior to + * the start of the scan, are ignored. + */ + @Test + public void singleScanWhereSupplicantReturnsSomeOldResults() { + WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() + .withBasePeriod(10000) + .withMaxApPerScan(2) + .addBucketWithBand(10000, + WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN + | WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT, + WifiScanner.WIFI_BAND_24_GHZ) + .build(); + + long approxScanStartUs = SystemClock.elapsedRealtime() * 1000; + ArrayList<ScanDetail> rawResults = new ArrayList<>(Arrays.asList( + new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 1"), + "00:00:00:00:00:00", "", -70, 2450, + approxScanStartUs + 2000 * 1000, 0), + new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 2"), + "AA:BB:CC:DD:EE:FF", "", -66, 2400, + approxScanStartUs + 2500 * 1000, 0), + new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 3"), + "00:00:00:00:00:00", "", -80, 2450, + approxScanStartUs - 2000 * 1000, 0), // old result will be filtered + new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 4"), + "AA:BB:CC:11:22:33", "", -65, 2450, + approxScanStartUs + 4000 * 1000, 0))); + + ArrayList<ScanResult> fullResults = new ArrayList<>(); + for (ScanDetail detail : rawResults) { + if (detail.getScanResult().timestamp > approxScanStartUs) { + fullResults.add(detail.getScanResult()); + } + } + ArrayList<ScanResult> scanDataResults = new ArrayList<>(fullResults); + Collections.sort(scanDataResults, ScanResults.SCAN_RESULT_RSSI_COMPARATOR); + ScanData scanData = new ScanData(0, 0, + scanDataResults.toArray(new ScanResult[scanDataResults.size()])); + Set<Integer> expectedScan = expectedBandScanFreqs(WifiScanner.WIFI_BAND_24_GHZ); + + // Actual test + + WifiNative.ScanEventHandler eventHandler = mock(WifiNative.ScanEventHandler.class); + + InOrder order = inOrder(eventHandler, mWifiNative); + + // scan succeeds + when(mWifiNative.scan(any(Set.class), any(Set.class))).thenReturn(true); + + // start scan + assertTrue(mScanner.startSingleScan(settings, eventHandler)); + + order.verify(mWifiNative).scan(eq(expectedScan), any(Set.class)); + + when(mWifiNative.getScanResults()).thenReturn(rawResults); + + // Notify scan has finished + mWifiMonitor.sendMessage(mWifiNative.getInterfaceName(), WifiMonitor.SCAN_RESULTS_EVENT); + + mLooper.dispatchAll(); + + for (ScanResult result : fullResults) { + order.verify(eventHandler).onFullScanResult(eq(result)); + } + + order.verify(eventHandler).onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE); + assertScanDataEquals(scanData, mScanner.getLatestSingleScanResults()); + + verifyNoMoreInteractions(eventHandler); + } + @Test public void backgroundScanNullEventHandler() { WifiNative.ScanSettings settings = new NativeScanSettingsBuilder() diff --git a/tests/wifitests/src/com/android/server/wifi/ScanResults.java b/tests/wifitests/src/com/android/server/wifi/ScanResults.java index 6cbde6c9a..f628cac93 100644 --- a/tests/wifitests/src/com/android/server/wifi/ScanResults.java +++ b/tests/wifitests/src/com/android/server/wifi/ScanResults.java @@ -44,7 +44,7 @@ public class ScanResults { r.nextInt(256), r.nextInt(256), r.nextInt(256)); } - private static final Comparator<ScanResult> SCAN_RESULT_RSSI_COMPARATOR = + public static final Comparator<ScanResult> SCAN_RESULT_RSSI_COMPARATOR = new Comparator<ScanResult>() { public int compare(ScanResult r1, ScanResult r2) { return r2.level - r1.level; |