summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Wills <mwills@google.com>2016-06-10 13:18:09 -0700
committerMitchell Wills <mwills@google.com>2016-06-10 13:28:34 -0700
commit3040b86393a04bc939a5a94cda4169b0293dfac7 (patch)
tree1d35f378f578d8493b3656bb53b75a7a90fe8cb6
parent11bb0926a6cc3380f2217532fefb9605a1fdc9e8 (diff)
downloadwifi-3040b86393a04bc939a5a94cda4169b0293dfac7.tar.gz
Fix crash when cleaning up WifiScanner client before Wifi enabled
Change-Id: Ia212840fcf781740d5e185d3e3c2e30a477e25f0 Fixes: 29250616
-rw-r--r--service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java9
-rw-r--r--tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java38
2 files changed, 47 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
index 5c085432a..d279482ff 100644
--- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
+++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
@@ -1095,6 +1095,10 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
private boolean updateSchedule() {
+ if (mChannelHelper == null || mBackgroundScheduler == null || mScannerImpl == null) {
+ loge("Failed to update schedule because WifiScanningService is not initialized");
+ return false;
+ }
mChannelHelper.updateChannels();
Collection<ScanSettings> settings = mActiveBackgroundScans.getAllSettings();
@@ -1221,6 +1225,11 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
private void resetHotlist() {
+ if (mScannerImpl == null) {
+ loge("Failed to update hotlist because WifiScanningService is not initialized");
+ return;
+ }
+
Collection<WifiScanner.HotlistSettings> settings =
mActiveHotlistSettings.getAllSettings();
int num_hotlist_ap = 0;
diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
index dab38f267..a1bf212c3 100644
--- a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
@@ -262,6 +262,10 @@ public class WifiScanningServiceTest {
private static final int MAX_AP_PER_SCAN = 16;
private void startServiceAndLoadDriver() {
mWifiScanningServiceImpl.startService();
+ setupAndLoadDriver();
+ }
+
+ private void setupAndLoadDriver() {
when(mWifiScannerImpl.getScanCapabilities(any(WifiNative.ScanCapabilities.class)))
.thenAnswer(new AnswerWithArguments() {
public boolean answer(WifiNative.ScanCapabilities capabilities) {
@@ -332,6 +336,17 @@ public class WifiScanningServiceTest {
}
@Test
+ public void disconnectClientBeforeWifiEnabled() throws Exception {
+ mWifiScanningServiceImpl.startService();
+
+ BidirectionalAsyncChannel controlChannel = connectChannel(mock(Handler.class));
+ mLooper.dispatchAll();
+
+ controlChannel.disconnect();
+ mLooper.dispatchAll();
+ }
+
+ @Test
public void loadDriver() throws Exception {
startServiceAndLoadDriver();
verify(mWifiScannerImplFactory, times(1))
@@ -349,6 +364,29 @@ public class WifiScanningServiceTest {
}
@Test
+ public void disconnectClientAfterStartingWifi() throws Exception {
+ mWifiScanningServiceImpl.startService();
+
+ BidirectionalAsyncChannel controlChannel = connectChannel(mock(Handler.class));
+ mLooper.dispatchAll();
+
+ setupAndLoadDriver();
+
+ controlChannel.disconnect();
+ mLooper.dispatchAll();
+ }
+
+ @Test
+ public void connectAndDisconnectClientAfterStartingWifi() throws Exception {
+ startServiceAndLoadDriver();
+
+ BidirectionalAsyncChannel controlChannel = connectChannel(mock(Handler.class));
+ mLooper.dispatchAll();
+ controlChannel.disconnect();
+ mLooper.dispatchAll();
+ }
+
+ @Test
public void sendInvalidCommand() throws Exception {
startServiceAndLoadDriver();