diff options
author | Roshan Pius <rpius@google.com> | 2018-01-29 20:53:59 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-01-31 06:48:38 -0800 |
commit | f3e8618a13128bc93e3bf9fc8714cb652ce0b740 (patch) | |
tree | ff98b06bf6ddfb5d401cf5effda1c49720d86f9c /tests | |
parent | c29a6997c71a1cf6d9d7f307c93d9d7fb59df82e (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.java | 137 |
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 |