summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2018-01-29 20:53:59 -0800
committerRoshan Pius <rpius@google.com>2018-01-31 06:48:38 -0800
commitf3e8618a13128bc93e3bf9fc8714cb652ce0b740 (patch)
treeff98b06bf6ddfb5d401cf5effda1c49720d86f9c /tests
parentc29a6997c71a1cf6d9d7f307c93d9d7fb59df82e (diff)
ScanRequestProxy: Ensure only a single scan broadcast is sent
Additional scan requests from external clients when a scan is ongoing would result in duplicate scan results broadcast being sent out by ScanRequest Proxy. Add a new |mIsScanProcessingComplete| to avoid sending duplicate scan completion broadcasts. Note: Wifiscanner will take care of coalescing multiple scan requests together, if necessary. While there, added failure reason to logs & return early on invalid scan results. Bug: 72452345 Test: Unit tests Test: act.py -c wifi_manager.config -tb dut-name -tc WifiManagerTest Change-Id: Ifcb1056fa8a81b6043d21e50607d72db5cd89215
Diffstat (limited to 'tests')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java b/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java
index 46157609a..d64ef2370 100644
--- a/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java
@@ -268,6 +268,143 @@ public class ScanRequestProxyTest {
}
/**
+ * Verify processing of a new scan request while there was a previous scan request being
+ * processed.
+ * Verify that we don't send a second broadcast.
+ */
+ @Test
+ public void testScanRequestWhilePeviousScanRunning() {
+ WifiScanner.ScanListener listener1;
+ WifiScanner.ScanListener listener2;
+ // Make scan request 1.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+ listener1 = mScanListenerArgumentCaptor.getValue();
+
+ // Make scan request 2.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ // Ensure that we did send a second scan request to scanner.
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+ listener2 = mScanListenerArgumentCaptor.getValue();
+
+ // Now send the scan results for request 1.
+ listener1.onResults(mTestScanDatas1);
+ validateScanResultsAvailableBroadcastSent(true);
+ // Validate the scan results in the cache.
+ ScanTestUtil.assertScanResultsEquals(
+ mTestScanDatas1[0].getResults(),
+ mScanRequestProxy.getScanResults().stream().toArray(ScanResult[]::new));
+
+ // Now send the scan results for request 2.
+ listener2.onResults(mTestScanDatas2);
+ // Ensure that we did not send out another broadcast.
+
+ // Validate the scan results in the cache.
+ ScanTestUtil.assertScanResultsEquals(
+ mTestScanDatas2[0].getResults(),
+ mScanRequestProxy.getScanResults().stream().toArray(ScanResult[]::new));
+
+ verifyNoMoreInteractions(mWifiScanner, mWifiConfigManager, mContext);
+ }
+
+ /**
+ * Verify processing of a new scan request after a previous scan success.
+ * Verify that we send out two broadcasts (two successes).
+ */
+ @Test
+ public void testNewScanRequestAfterPreviousScanSucceeds() {
+ // Make scan request 1.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+ // Now send the scan results for request 1.
+ mScanListenerArgumentCaptor.getValue().onResults(mTestScanDatas1);
+ validateScanResultsAvailableBroadcastSent(true);
+ // Validate the scan results in the cache.
+ ScanTestUtil.assertScanResultsEquals(
+ mTestScanDatas1[0].getResults(),
+ mScanRequestProxy.getScanResults().stream().toArray(ScanResult[]::new));
+
+ // Make scan request 2.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ // Ensure that we did send a second scan request to scanner.
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+ // Now send the scan results for request 2.
+ mScanListenerArgumentCaptor.getValue().onResults(mTestScanDatas2);
+ validateScanResultsAvailableBroadcastSent(true);
+ // Validate the scan results in the cache.
+ ScanTestUtil.assertScanResultsEquals(
+ mTestScanDatas2[0].getResults(),
+ mScanRequestProxy.getScanResults().stream().toArray(ScanResult[]::new));
+
+ verifyNoMoreInteractions(mWifiScanner, mWifiConfigManager, mContext);
+ }
+
+ /**
+ * Verify processing of a new scan request after a previous scan success, but with bad scan
+ * data.
+ * Verify that we send out two broadcasts (one failure & one success).
+ */
+ @Test
+ public void testNewScanRequestAfterPreviousScanSucceedsWithInvalidScanDatas() {
+ // Make scan request 1.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+
+ // Now send scan success for request 1, but with invalid scan datas.
+ mScanListenerArgumentCaptor.getValue().onResults(
+ new WifiScanner.ScanData[] {mTestScanDatas1[0], mTestScanDatas2[0]});
+ validateScanResultsAvailableBroadcastSent(false);
+ // Validate the scan results in the cache.
+ assertTrue(mScanRequestProxy.getScanResults().isEmpty());
+
+ // Make scan request 2.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ // Ensure that we did send a second scan request to scanner.
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+ // Now send the scan results for request 2.
+ mScanListenerArgumentCaptor.getValue().onResults(mTestScanDatas2);
+ validateScanResultsAvailableBroadcastSent(true);
+ // Validate the scan results in the cache.
+ ScanTestUtil.assertScanResultsEquals(
+ mTestScanDatas2[0].getResults(),
+ mScanRequestProxy.getScanResults().stream().toArray(ScanResult[]::new));
+
+ verifyNoMoreInteractions(mWifiScanner, mWifiConfigManager, mContext);
+ }
+
+
+ /**
+ * Verify processing of a new scan request after a previous scan failure.
+ * Verify that we send out two broadcasts (one failure & one success).
+ */
+ @Test
+ public void testNewScanRequestAfterPreviousScanFailure() {
+ // Make scan request 1.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+
+ // Now send scan failure for request 1.
+ mScanListenerArgumentCaptor.getValue().onFailure(0, "failed");
+ validateScanResultsAvailableBroadcastSent(false);
+ // Validate the scan results in the cache.
+ assertTrue(mScanRequestProxy.getScanResults().isEmpty());
+
+ // Make scan request 2.
+ assertTrue(mScanRequestProxy.startScan(TEST_UID));
+ // Ensure that we did send a second scan request to scanner.
+ mInOrder.verify(mWifiScanner).startScan(any(), any(), any());
+ // Now send the scan results for request 2.
+ mScanListenerArgumentCaptor.getValue().onResults(mTestScanDatas2);
+ validateScanResultsAvailableBroadcastSent(true);
+ // Validate the scan results in the cache.
+ ScanTestUtil.assertScanResultsEquals(
+ mTestScanDatas2[0].getResults(),
+ mScanRequestProxy.getScanResults().stream().toArray(ScanResult[]::new));
+
+ verifyNoMoreInteractions(mWifiScanner, mWifiConfigManager, mContext);
+ }
+
+ /**
* Verify that clear scan results invocation clears all stored scan results.
*/
@Test