From cf1b40fb2b93373409ae670663561f25cc8442c8 Mon Sep 17 00:00:00 2001 From: Rebecca Silberstein Date: Mon, 26 Mar 2018 23:51:07 -0700 Subject: [PATCH] WifiManager: allow setWifiApConfiguration to return false The api for setWifiApConfiguration allows for config saves to return false, but the implementation always returns true (if there wasn't an exception thrown). This CL allows the API to actually return false and adds unittests. Bug: 67601382 Test: frameworks/base/wifi/tests/runtests.sh Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh Test: manually update ap config in settings and verify save Test: wifi integration tests Change-Id: I038ab68f5fc4bf22df5b61d329077eacda547338 --- wifi/java/android/net/wifi/IWifiManager.aidl | 2 +- wifi/java/android/net/wifi/WifiManager.java | 6 ++-- .../src/android/net/wifi/WifiManagerTest.java | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 2f7b50d1bd0c0..b3331264aa176 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -143,7 +143,7 @@ interface IWifiManager WifiConfiguration getWifiApConfiguration(); - void setWifiApConfiguration(in WifiConfiguration wifiConfig, String packageName); + boolean setWifiApConfiguration(in WifiConfiguration wifiConfig, String packageName); Messenger getWifiServiceMessenger(String packageName); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 433285bfc7026..9c6c8a90369d3 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -2141,7 +2141,8 @@ public class WifiManager { } /** - * Sets the Wi-Fi AP Configuration. + * Sets the Wi-Fi AP Configuration. The AP configuration must either be open or + * WPA2 PSK networks. * @return {@code true} if the operation succeeded, {@code false} otherwise * * @hide @@ -2150,8 +2151,7 @@ public class WifiManager { @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(WifiConfiguration wifiConfig) { try { - mService.setWifiApConfiguration(wifiConfig, mContext.getOpPackageName()); - return true; + return mService.setWifiApConfiguration(wifiConfig, mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java index f3a78bd01cbe3..f3ffcadf25463 100644 --- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java +++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java @@ -1034,4 +1034,40 @@ i * Verify that a call to cancel WPS immediately returns a failure. verifyNoMoreInteractions(mWifiService); } + /** + * Verify that a successful call properly returns true. + */ + @Test + public void testSetWifiApConfigurationSuccessReturnsTrue() throws Exception { + WifiConfiguration apConfig = new WifiConfiguration(); + + when(mWifiService.setWifiApConfiguration(eq(apConfig), eq(TEST_PACKAGE_NAME))) + .thenReturn(true); + assertTrue(mWifiManager.setWifiApConfiguration(apConfig)); + } + + /** + * Verify that a failed call properly returns false. + */ + @Test + public void testSetWifiApConfigurationFailureReturnsFalse() throws Exception { + WifiConfiguration apConfig = new WifiConfiguration(); + + when(mWifiService.setWifiApConfiguration(eq(apConfig), eq(TEST_PACKAGE_NAME))) + .thenReturn(false); + assertFalse(mWifiManager.setWifiApConfiguration(apConfig)); + } + + /** + * Verify Exceptions are rethrown when underlying calls to WifiService throw exceptions. + */ + @Test + public void testSetWifiApConfigurationRethrowsException() throws Exception { + doThrow(new SecurityException()).when(mWifiService).setWifiApConfiguration(any(), any()); + + try { + mWifiManager.setWifiApConfiguration(new WifiConfiguration()); + fail("setWifiApConfiguration should rethrow Exceptions from WifiService"); + } catch (SecurityException e) { } + } }