diff options
author | Roshan Pius <rpius@google.com> | 2019-11-26 06:40:00 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2019-11-26 06:54:38 -0800 |
commit | 2c9709a42467b03cba1d721c5d873a420eea3874 (patch) | |
tree | ba39edb19eec646f06c5e24247232b4c30a62d6b /tests | |
parent | dd45835cb7a5235b6a7ff7a0ad4343d287d5fe7d (diff) |
WifiPermissionsUtil: Handle location mode check failures
Wifi service is now again starting very early in the bootup
sequence. Location service may not be ready to respond to it's public
API calls from wifi during it's initialization sequence (seen in
wifi-service & rtt-service initialization sequence). Handle any errors
seen gracefully and fallback to the legacy Settings value to read the
location mode setting of the device. The legacy settings value only
reflects the location mode of the user 0, but this is ok early on in
the bootup sequence since any user switches will happen after this.
Bug: 144722612
Test: atest com.android.wifi
Change-Id: I5df9cdffd14962847a8ab23ed54510fafa13a149
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/util/WifiPermissionsUtilTest.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/util/WifiPermissionsUtilTest.java b/tests/wifitests/src/com/android/server/wifi/util/WifiPermissionsUtilTest.java index 9bd3fe6f6..7f6e1e1cd 100644 --- a/tests/wifitests/src/com/android/server/wifi/util/WifiPermissionsUtilTest.java +++ b/tests/wifitests/src/com/android/server/wifi/util/WifiPermissionsUtilTest.java @@ -27,6 +27,7 @@ import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -43,11 +44,13 @@ import android.net.NetworkStack; import android.os.Build; import android.os.UserHandle; import android.os.UserManager; +import android.provider.Settings; import androidx.test.filters.SmallTest; import com.android.server.wifi.BinderUtil; import com.android.server.wifi.FakeWifiLog; +import com.android.server.wifi.FrameworkFacade; import com.android.server.wifi.WifiBaseTest; import com.android.server.wifi.WifiInjector; @@ -72,6 +75,7 @@ public class WifiPermissionsUtilTest extends WifiBaseTest { // Mock objects for testing @Mock private WifiPermissionsWrapper mMockPermissionsWrapper; @Mock private Context mMockContext; + @Mock private FrameworkFacade mMockFrameworkFacade; @Mock private PackageManager mMockPkgMgr; @Mock private ApplicationInfo mMockApplInfo; @Mock private AppOpsManager mMockAppOps; @@ -1207,6 +1211,32 @@ public class WifiPermissionsUtilTest extends WifiBaseTest { } } + /** + * Verify that we handle failures when trying to fetch location mode using LocationManager API. + * We should use the legacy setting to read the value if we encounter any failure. + */ + @Test + public void testIsLocationEnabledFallbackToLegacySetting() throws Exception { + mUid = OTHER_USER_UID; // do not really care about this value + setupTestCase(); + WifiPermissionsUtil codeUnderTest = new WifiPermissionsUtil(mMockPermissionsWrapper, + mMockContext, mMockUserManager, mWifiInjector); + doThrow(new RuntimeException()).when(mLocationManager).isLocationEnabledForUser(any()); + + when(mMockFrameworkFacade.getIntegerSetting( + any(), eq(Settings.Secure.LOCATION_MODE), anyInt())) + .thenReturn(Settings.Secure.LOCATION_MODE_OFF); + assertFalse(codeUnderTest.isLocationModeEnabled()); + + when(mMockFrameworkFacade.getIntegerSetting( + any(), eq(Settings.Secure.LOCATION_MODE), anyInt())) + .thenReturn(Settings.Secure.LOCATION_MODE_ON); + assertTrue(codeUnderTest.isLocationModeEnabled()); + + verify(mMockFrameworkFacade, times(2)).getIntegerSetting( + any(), eq(Settings.Secure.LOCATION_MODE), anyInt()); + } + private Answer<Integer> createPermissionAnswer() { return new Answer<Integer>() { @Override @@ -1250,6 +1280,7 @@ public class WifiPermissionsUtilTest extends WifiBaseTest { when(mMockContext.getSystemService(Context.USER_SERVICE)) .thenReturn(mMockUserManager); when(mWifiInjector.makeLog(anyString())).thenReturn(mWifiLog); + when(mWifiInjector.getFrameworkFacade()).thenReturn(mMockFrameworkFacade); when(mMockContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager); when(mMockContext.getPackageName()).thenReturn(TEST_WIFI_STACK_APK_NAME); } |