diff options
author | Mitchell Wills <mwills@google.com> | 2016-06-10 13:18:09 -0700 |
---|---|---|
committer | Mitchell Wills <mwills@google.com> | 2016-06-10 13:28:34 -0700 |
commit | 3040b86393a04bc939a5a94cda4169b0293dfac7 (patch) | |
tree | 1d35f378f578d8493b3656bb53b75a7a90fe8cb6 | |
parent | 11bb0926a6cc3380f2217532fefb9605a1fdc9e8 (diff) | |
download | wifi-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.java | 9 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java | 38 |
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(); |