diff options
author | Etan Cohen <etancohen@google.com> | 2018-02-17 05:26:28 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-02-17 05:26:28 +0000 |
commit | f1f32b622619d35b577dd37bcbdd7b7c29769c42 (patch) | |
tree | 517af9dc9d0e1d8b0bfe89189f8cd322260bd66e /tests | |
parent | 406a8ce816edc71ef49647b6fd11c00a3129b0af (diff) | |
parent | 353ed66e1af63e0e01eb01751a6e2874413f47ca (diff) |
Merge "[AWARE] React to Wi-Fi state changes: disable when Wi-Fi is off"
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java | 5 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java | 102 |
2 files changed, 106 insertions, 1 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 dd31e7604..83be557aa 100644 --- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java @@ -45,6 +45,7 @@ import android.net.NetworkCapabilities; import android.net.NetworkFactory; import android.net.NetworkRequest; import android.net.NetworkSpecifier; +import android.net.wifi.WifiManager; import android.net.wifi.aware.AttachCallback; import android.net.wifi.aware.ConfigRequest; import android.net.wifi.aware.DiscoverySession; @@ -115,6 +116,7 @@ public class WifiAwareDataPathStateManagerTest { @Mock private WifiPermissionsUtil mWifiPermissionsUtil; @Mock private WifiPermissionsWrapper mPermissionsWrapperMock; @Mock private LocationManager mLocationManagerMock; + @Mock private WifiManager mMockWifiManager; TestAlarmManager mAlarmManager; private PowerManager mMockPowerManager; @@ -132,6 +134,9 @@ public class WifiAwareDataPathStateManagerTest { when(mMockContext.getSystemService(Context.ALARM_SERVICE)) .thenReturn(mAlarmManager.getAlarmManager()); + when(mMockContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mMockWifiManager); + when(mMockWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED); + mMockLooper = new TestLooper(); mMockLooperHandler = new Handler(mMockLooper.getLooper()); 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 7ada6ae82..e6586e3e7 100644 --- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java @@ -50,6 +50,7 @@ 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.WifiManager; import android.net.wifi.aware.ConfigRequest; import android.net.wifi.aware.IWifiAwareDiscoverySessionCallback; import android.net.wifi.aware.IWifiAwareEventCallback; @@ -116,8 +117,10 @@ public class WifiAwareStateManagerTest { @Mock private LocationManager mLocationManagerMock; TestAlarmManager mAlarmManager; private PowerManager mMockPowerManager; + @Mock private WifiManager mMockWifiManager; private BroadcastReceiver mPowerBcastReceiver; private BroadcastReceiver mLocationModeReceiver; + private BroadcastReceiver mWifiStateChangedReceiver; @Mock private WifiAwareDataPathStateManager mMockAwareDataPathStatemanager; @Rule @@ -136,6 +139,9 @@ public class WifiAwareStateManagerTest { when(mMockContext.getSystemService(Context.ALARM_SERVICE)) .thenReturn(mAlarmManager.getAlarmManager()); + when(mMockContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mMockWifiManager); + when(mMockWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED); + mMockLooper = new TestLooper(); IPowerManager powerManagerService = mock(IPowerManager.class); @@ -170,10 +176,11 @@ public class WifiAwareStateManagerTest { mWifiPermissionsUtil, mPermissionsWrapperMock); mDut.startLate(); mMockLooper.dispatchAll(); - verify(mMockContext, times(2)).registerReceiver(bcastRxCaptor.capture(), + verify(mMockContext, times(3)).registerReceiver(bcastRxCaptor.capture(), any(IntentFilter.class)); mPowerBcastReceiver = bcastRxCaptor.getAllValues().get(0); mLocationModeReceiver = bcastRxCaptor.getAllValues().get(1); + mWifiStateChangedReceiver = bcastRxCaptor.getAllValues().get(2); installMocksInStateManager(mDut, mMockAwareDataPathStatemanager); } @@ -3105,6 +3112,16 @@ public class WifiAwareStateManagerTest { simulatePowerStateChangeInteractive(false); mMockLooper.dispatchAll(); + // and same for other gating changes -> no changes + simulateLocationModeChange(false); + simulateWifiStateChange(false); + mMockLooper.dispatchAll(); + + // and same for other gating changes -> no changes + simulateLocationModeChange(true); + simulateWifiStateChange(true); + mMockLooper.dispatchAll(); + // (5) power state change: DOZE OFF simulatePowerStateChangeDoze(false); mMockLooper.dispatchAll(); @@ -3155,6 +3172,16 @@ public class WifiAwareStateManagerTest { mDut.onDisableResponse(transactionId.getValue(), NanStatusType.SUCCESS); validateCorrectAwareStatusChangeBroadcast(inOrder, false); + // disable other gating feature -> no change + simulatePowerStateChangeDoze(true); + simulateWifiStateChange(false); + mMockLooper.dispatchAll(); + + // enable other gating feature -> no change + simulatePowerStateChangeDoze(false); + simulateWifiStateChange(true); + mMockLooper.dispatchAll(); + // (4) location mode change: enable simulateLocationModeChange(true); mMockLooper.dispatchAll(); @@ -3163,6 +3190,66 @@ public class WifiAwareStateManagerTest { verifyNoMoreInteractions(mMockNativeManager, mMockNative, mockCallback); } + /** + * Validate aware enable/disable during Wi-Fi State transitions. + */ + @Test + public void testEnableDisableOnWifiStateChanges() 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) wifi state change: disable + simulateWifiStateChange(false); + mMockLooper.dispatchAll(); + inOrder.verify(mMockNative).disable(transactionId.capture()); + mDut.onDisableResponse(transactionId.getValue(), NanStatusType.SUCCESS); + validateCorrectAwareStatusChangeBroadcast(inOrder, false); + + // disable other gating feature -> no change + simulatePowerStateChangeDoze(true); + simulateLocationModeChange(false); + mMockLooper.dispatchAll(); + + // enable other gating feature -> no change + simulatePowerStateChangeDoze(false); + simulateLocationModeChange(true); + mMockLooper.dispatchAll(); + + // (4) wifi state change: enable + simulateWifiStateChange(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 @@ -3354,6 +3441,19 @@ public class WifiAwareStateManagerTest { mLocationModeReceiver.onReceive(mMockContext, intent); } + /** + * Simulate Wi-Fi state change: broadcast state change and modify the API return value. + */ + private void simulateWifiStateChange(boolean isWifiOn) { + when(mMockWifiManager.getWifiState()).thenReturn( + isWifiOn ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED); + + Intent intent = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); + intent.putExtra(WifiManager.EXTRA_WIFI_STATE, + isWifiOn ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED); + mWifiStateChangedReceiver.onReceive(mMockContext, intent); + } + private static Capabilities getCapabilities() { Capabilities cap = new Capabilities(); cap.maxConcurrentAwareClusters = 1; |