summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEtan Cohen <etancohen@google.com>2018-02-05 14:24:00 -0800
committerEtan Cohen <etancohen@google.com>2018-02-05 14:50:12 -0800
commit41d34a7db8366519140877e2609560a2817f8a72 (patch)
treeb5921bbb5a3762a4b18ebc414d4d2ca0a7cb54bc /tests
parentdb6d814eeb9da07a0aa3bed68a6855eb12bcd022 (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.java6
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java73
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;