summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2018-04-23 10:59:31 -0700
committerRoshan Pius <rpius@google.com>2018-04-25 10:05:32 -0700
commit7daee3fabb13a50a788fb2eb7aaec1f9ebc62efc (patch)
tree55bc8be5a38a10be40f8be3b59a93ce9d0c660fd
parent404c4bc4a2b5b662d5d796f4085e33f0f7aeb5b8 (diff)
WifiService: Return status from startScan()
Bug: 77297012 Test: Unit tests Test: Ensured that scans from settings are still running. Change-Id: I54f8fa6c33d5c1a27f777bfc90eb829a0b501d29
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java28
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java30
2 files changed, 43 insertions, 15 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 1a5e0e27d..61daadcd1 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -601,15 +601,14 @@ public class WifiServiceImpl extends IWifiManager.Stub {
}
/**
- * see {@link android.net.wifi.WifiManager#startScan}
- * and {@link android.net.wifi.WifiManager#startCustomizedScan}
+ * See {@link android.net.wifi.WifiManager#startScan}
*
* @param packageName Package name of the app that requests wifi scan.
*/
@Override
- public void startScan(String packageName) {
+ public boolean startScan(String packageName) {
if (enforceChangePermission(packageName) != MODE_ALLOWED) {
- return;
+ return false;
}
int callingUid = Binder.getCallingUid();
@@ -625,19 +624,24 @@ public class WifiServiceImpl extends IWifiManager.Stub {
// be sent directly until b/31398592 is fixed.
sendFailedScanBroadcast();
mScanPending = true;
- return;
+ return false;
}
}
- boolean success = mWifiInjector.getWifiStateMachineHandler().runWithScissors(() -> {
- if (!mScanRequestProxy.startScan(callingUid, packageName)) {
- Log.e(TAG, "Failed to start scan");
- }
- }, RUN_WITH_SCISSORS_TIMEOUT_MILLIS);
- if (!success) {
- // TODO: should return false here
+ Mutable<Boolean> scanSuccess = new Mutable<>();
+ boolean runWithScissorsSuccess = mWifiInjector.getWifiStateMachineHandler()
+ .runWithScissors(() -> {
+ scanSuccess.value = mScanRequestProxy.startScan(callingUid, packageName);
+ }, RUN_WITH_SCISSORS_TIMEOUT_MILLIS);
+ if (!runWithScissorsSuccess) {
Log.e(TAG, "Failed to post runnable to start scan");
sendFailedScanBroadcast();
+ return false;
}
+ if (!scanSuccess.value) {
+ Log.e(TAG, "Failed to start scan");
+ return false;
+ }
+ return true;
}
// Send a failed scan broadcast to indicate the current scan request failed.
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index 136d029d3..6280ae1da 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -311,6 +311,7 @@ public class WifiServiceImplTest {
when(mContext.getOpPackageName()).thenReturn(TEST_PACKAGE_NAME);
when(mContext.checkPermission(eq(android.Manifest.permission.NETWORK_SETTINGS),
anyInt(), anyInt())).thenReturn(PackageManager.PERMISSION_DENIED);
+ when(mScanRequestProxy.startScan(anyInt(), anyString())).thenReturn(true);
ArgumentCaptor<SoftApCallback> softApCallbackCaptor =
ArgumentCaptor.forClass(SoftApCallback.class);
@@ -1022,6 +1023,18 @@ public class WifiServiceImplTest {
}
/**
+ * Ensure that we handle app ops check failure when handling scan request.
+ */
+ @Test
+ public void testStartScanFailureAppOpsIgnored() {
+ setupWifiStateMachineHandlerForRunWithScissors();
+ doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager)
+ .noteOp(AppOpsManager.OPSTR_CHANGE_WIFI_STATE, Process.myUid(), SCAN_PACKAGE_NAME);
+ assertFalse(mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME));
+ verify(mScanRequestProxy, never()).startScan(Process.myUid(), SCAN_PACKAGE_NAME);
+ }
+
+ /**
* Ensure that we handle scan request failure when posting the runnable to handler fails.
*/
@Ignore
@@ -1030,10 +1043,21 @@ public class WifiServiceImplTest {
setupWifiStateMachineHandlerForRunWithScissors();
doReturn(false).when(mHandlerSpyForWsmRunWithScissors)
.runWithScissors(any(), anyLong());
- mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME);
+ assertFalse(mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME));
verify(mScanRequestProxy, never()).startScan(Process.myUid(), SCAN_PACKAGE_NAME);
}
+ /**
+ * Ensure that we handle scan request failure from ScanRequestProxy fails.
+ */
+ @Test
+ public void testStartScanFailureFromScanRequestProxy() {
+ setupWifiStateMachineHandlerForRunWithScissors();
+ when(mScanRequestProxy.startScan(anyInt(), anyString())).thenReturn(false);
+ assertFalse(mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME));
+ verify(mScanRequestProxy).startScan(Process.myUid(), SCAN_PACKAGE_NAME);
+ }
+
static final String TEST_SSID = "Sid's Place";
static final String TEST_SSID_WITH_QUOTES = "\"" + TEST_SSID + "\"";
static final String TEST_BSSID = "01:02:03:04:05:06";
@@ -2525,7 +2549,7 @@ public class WifiServiceImplTest {
TestUtil.sendIdleModeChanged(mBroadcastReceiverCaptor.getValue(), mContext);
// Send a scan request while the device is idle.
- mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME);
+ assertFalse(mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME));
// No scans must be made yet as the device is idle.
verify(mScanRequestProxy, never()).startScan(Process.myUid(), SCAN_PACKAGE_NAME);
@@ -2542,7 +2566,7 @@ public class WifiServiceImplTest {
// Send another scan request. The device is not idle anymore, so it must be executed
// immediately.
- mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME);
+ assertTrue(mWifiServiceImpl.startScan(SCAN_PACKAGE_NAME));
verify(mScanRequestProxy).startScan(Process.myUid(), SCAN_PACKAGE_NAME);
}