summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2019-11-26 06:40:00 -0800
committerRoshan Pius <rpius@google.com>2019-11-26 06:54:38 -0800
commit2c9709a42467b03cba1d721c5d873a420eea3874 (patch)
treeba39edb19eec646f06c5e24247232b4c30a62d6b /tests
parentdd45835cb7a5235b6a7ff7a0ad4343d287d5fe7d (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.java31
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);
}