diff options
author | Etan Cohen <etancohen@google.com> | 2018-02-05 14:24:00 -0800 |
---|---|---|
committer | Etan Cohen <etancohen@google.com> | 2018-02-05 14:50:12 -0800 |
commit | 41d34a7db8366519140877e2609560a2817f8a72 (patch) | |
tree | b5921bbb5a3762a4b18ebc414d4d2ca0a7cb54bc /tests | |
parent | db6d814eeb9da07a0aa3bed68a6855eb12bcd022 (diff) |
[AWARE] Enable/disable Aware based on LocationMode status
Add sensitivity to LocationMode in Wi-Fi Aware:
- Location Mode enabled: Aware may be enabled (depending on other
gating controls such as doze mode)
- Location Mode disabled: Aware disabled
Bug: 70218191
Test: units tests + new testEnableDisableOnLocationModeChanges
Change-Id: Ic93faca094a664cf16b45d92b0ace3e4373a0313
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java | 6 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java | 73 |
2 files changed, 77 insertions, 2 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java index edd1edd42..e06a6dbaf 100644 --- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java @@ -40,6 +40,7 @@ import android.app.test.TestAlarmManager; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.wifi.V1_0.NanStatusType; +import android.location.LocationManager; import android.net.ConnectivityManager; import android.net.NetworkCapabilities; import android.net.NetworkFactory; @@ -111,6 +112,7 @@ public class WifiAwareDataPathStateManagerTest { @Mock private WifiAwareMetrics mAwareMetricsMock; @Mock private WifiPermissionsUtil mWifiPermissionsUtil; @Mock private WifiPermissionsWrapper mPermissionsWrapperMock; + @Mock private LocationManager mLocationManagerMock; TestAlarmManager mAlarmManager; private PowerManager mMockPowerManager; @@ -139,6 +141,10 @@ public class WifiAwareDataPathStateManagerTest { when(mMockContext.getSystemServiceName(PowerManager.class)).thenReturn( Context.POWER_SERVICE); when(mMockContext.getSystemService(PowerManager.class)).thenReturn(mMockPowerManager); + when(mMockContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn( + mLocationManagerMock); + + when(mLocationManagerMock.isLocationEnabled()).thenReturn(true); // by default pretend to be an old API: i.e. allow Responders configured as *ANY*. This // allows older (more extrensive) tests to run. diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java index 525b72f7f..b6bb1f53a 100644 --- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java @@ -48,6 +48,7 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.hardware.wifi.V1_0.NanRangingIndication; import android.hardware.wifi.V1_0.NanStatusType; +import android.location.LocationManager; import android.net.ConnectivityManager; import android.net.wifi.aware.ConfigRequest; import android.net.wifi.aware.IWifiAwareDiscoverySessionCallback; @@ -109,9 +110,11 @@ public class WifiAwareStateManagerTest { @Mock private WifiAwareMetrics mAwareMetricsMock; @Mock private WifiPermissionsUtil mWifiPermissionsUtil; @Mock private WifiPermissionsWrapper mPermissionsWrapperMock; + @Mock private LocationManager mLocationManagerMock; TestAlarmManager mAlarmManager; private PowerManager mMockPowerManager; private BroadcastReceiver mPowerBcastReceiver; + private BroadcastReceiver mLocationModeReceiver; @Mock private WifiAwareDataPathStateManager mMockAwareDataPathStatemanager; @Rule @@ -142,6 +145,8 @@ public class WifiAwareStateManagerTest { when(mMockContext.getSystemServiceName(PowerManager.class)).thenReturn( Context.POWER_SERVICE); when(mMockContext.getSystemService(PowerManager.class)).thenReturn(mMockPowerManager); + when(mMockContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn( + mLocationManagerMock); when(mMockContext.checkPermission(eq(android.Manifest.permission.ACCESS_FINE_LOCATION), anyInt(), anyInt())).thenReturn(PackageManager.PERMISSION_DENIED); when(mMockContext.checkPermission(eq(Manifest.permission.ACCESS_COARSE_LOCATION), @@ -152,6 +157,7 @@ public class WifiAwareStateManagerTest { any())).thenReturn(AppOpsManager.MODE_ERRORED); when(mMockPowerManager.isDeviceIdleMode()).thenReturn(false); when(mMockPowerManager.isInteractive()).thenReturn(true); + when(mLocationManagerMock.isLocationEnabled()).thenReturn(true); ArgumentCaptor<BroadcastReceiver> bcastRxCaptor = ArgumentCaptor.forClass( BroadcastReceiver.class); @@ -161,8 +167,10 @@ public class WifiAwareStateManagerTest { mWifiPermissionsUtil, mPermissionsWrapperMock); mDut.startLate(); mMockLooper.dispatchAll(); - verify(mMockContext).registerReceiver(bcastRxCaptor.capture(), any(IntentFilter.class)); - mPowerBcastReceiver = bcastRxCaptor.getValue(); + verify(mMockContext, times(2)).registerReceiver(bcastRxCaptor.capture(), + any(IntentFilter.class)); + mPowerBcastReceiver = bcastRxCaptor.getAllValues().get(0); + mLocationModeReceiver = bcastRxCaptor.getAllValues().get(1); installMocksInStateManager(mDut, mMockAwareDataPathStatemanager); when(mMockNative.enableAndConfigure(anyShort(), any(), anyBoolean(), @@ -3106,6 +3114,56 @@ public class WifiAwareStateManagerTest { verifyNoMoreInteractions(mMockNativeManager, mMockNative, mockCallback); } + /** + * Validate aware enable/disable during LOCATION MODE transitions. + */ + @Test + public void testEnableDisableOnLocationModeChanges() throws Exception { + final int clientId = 188; + final int uid = 1000; + final int pid = 2000; + final String callingPackage = "com.google.somePackage"; + + ConfigRequest configRequest = new ConfigRequest.Builder().build(); + + ArgumentCaptor<Short> transactionId = ArgumentCaptor.forClass(Short.class); + IWifiAwareEventCallback mockCallback = mock(IWifiAwareEventCallback.class); + InOrder inOrder = inOrder(mMockContext, mMockNativeManager, mMockNative, mockCallback); + inOrder.verify(mMockNativeManager).start(any(Handler.class)); + + mDut.enableUsage(); + mMockLooper.dispatchAll(); + inOrder.verify(mMockNativeManager).tryToGetAware(); + inOrder.verify(mMockNative).getCapabilities(transactionId.capture()); + mDut.onCapabilitiesUpdateResponse(transactionId.getValue(), getCapabilities()); + mMockLooper.dispatchAll(); + inOrder.verify(mMockNativeManager).releaseAware(); + + // (1) connect + mDut.connect(clientId, uid, pid, callingPackage, mockCallback, configRequest, false); + mMockLooper.dispatchAll(); + inOrder.verify(mMockNativeManager).tryToGetAware(); + inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), + eq(configRequest), eq(false), eq(true), eq(true), eq(false)); + mDut.onConfigSuccessResponse(transactionId.getValue()); + mMockLooper.dispatchAll(); + inOrder.verify(mockCallback).onConnectSuccess(clientId); + + // (3) location mode change: disable + simulateLocationModeChange(false); + mMockLooper.dispatchAll(); + inOrder.verify(mMockNative).disable(transactionId.capture()); + mDut.onDisableResponse(transactionId.getValue(), NanStatusType.SUCCESS); + validateCorrectAwareStatusChangeBroadcast(inOrder, false); + + // (4) location mode change: enable + simulateLocationModeChange(true); + mMockLooper.dispatchAll(); + validateCorrectAwareStatusChangeBroadcast(inOrder, true); + + verifyNoMoreInteractions(mMockNativeManager, mMockNative, mockCallback); + } + /* * Tests of internal state of WifiAwareStateManager: very limited (not usually * a good idea). However, these test that the internal state is cleaned-up @@ -3286,6 +3344,17 @@ public class WifiAwareStateManagerTest { mPowerBcastReceiver.onReceive(mMockContext, intent); } + /** + * Simulate Location Mode change. Changes the location manager return values and dispatches a + * broadcast. + */ + private void simulateLocationModeChange(boolean isLocationModeEnabled) { + when(mLocationManagerMock.isLocationEnabled()).thenReturn(isLocationModeEnabled); + + Intent intent = new Intent(LocationManager.MODE_CHANGED_ACTION); + mLocationModeReceiver.onReceive(mMockContext, intent); + } + private static Capabilities getCapabilities() { Capabilities cap = new Capabilities(); cap.maxConcurrentAwareClusters = 1; |