diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java | 11 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java | 161 |
2 files changed, 118 insertions, 54 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java index a26582c5c..7896a8f0b 100644 --- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java @@ -3340,7 +3340,7 @@ public class ClientModeImplTest { when(mWifiNative.getWifiLinkLayerStats(any())).thenReturn(newLLStats); mCmi.sendMessage(ClientModeImpl.CMD_RSSI_POLL, 1); mLooper.dispatchAll(); - verify(mWifiDataStall).checkForDataStall(oldLLStats, newLLStats); + verify(mWifiDataStall).checkForDataStall(oldLLStats, newLLStats, mCmi.getWifiInfo()); verify(mWifiMetrics).incrementWifiLinkLayerUsageStats(newLLStats); } @@ -3356,7 +3356,7 @@ public class ClientModeImplTest { WifiLinkLayerStats stats = new WifiLinkLayerStats(); when(mWifiNative.getWifiLinkLayerStats(any())).thenReturn(stats); - when(mWifiDataStall.checkForDataStall(any(), any())) + when(mWifiDataStall.checkForDataStall(any(), any(), any())) .thenReturn(WifiIsUnusableEvent.TYPE_UNKNOWN); mCmi.sendMessage(ClientModeImpl.CMD_RSSI_POLL, 1); mLooper.dispatchAll(); @@ -3364,11 +3364,16 @@ public class ClientModeImplTest { verify(mWifiMetrics, never()).addToWifiUsabilityStatsList(WifiUsabilityStats.LABEL_BAD, eq(anyInt()), eq(-1)); - when(mWifiDataStall.checkForDataStall(any(), any())) + when(mWifiDataStall.checkForDataStall(any(), any(), any())) .thenReturn(WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX); + when(mClock.getElapsedSinceBootMillis()).thenReturn(10L); mCmi.sendMessage(ClientModeImpl.CMD_RSSI_POLL, 1); mLooper.dispatchAll(); verify(mWifiMetrics, times(2)).updateWifiUsabilityStatsEntries(any(), eq(stats)); + when(mClock.getElapsedSinceBootMillis()) + .thenReturn(10L + ClientModeImpl.DURATION_TO_WAIT_ADD_STATS_AFTER_DATA_STALL_MS); + mCmi.sendMessage(ClientModeImpl.CMD_RSSI_POLL, 1); + mLooper.dispatchAll(); verify(mWifiMetrics).addToWifiUsabilityStatsList(WifiUsabilityStats.LABEL_BAD, WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX, -1); } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java b/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java index a5f6852f8..71b658923 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java @@ -17,14 +17,17 @@ package com.android.server.wifi; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyLong; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.net.wifi.WifiInfo; +import android.os.Looper; +import android.provider.DeviceConfig.OnPropertiesChangedListener; import android.provider.Settings; import androidx.test.filters.SmallTest; @@ -33,6 +36,7 @@ import com.android.server.wifi.nano.WifiMetricsProto.WifiIsUnusableEvent; import org.junit.Before; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -46,9 +50,15 @@ public class WifiDataStallTest { @Mock FrameworkFacade mFacade; @Mock WifiMetrics mWifiMetrics; WifiDataStall mWifiDataStall; + @Mock Clock mClock; + @Mock DeviceConfigFacade mDeviceConfigFacade; + @Mock Looper mClientModeImplLooper; + @Mock WifiInfo mWifiInfo; private final WifiLinkLayerStats mOldLlStats = new WifiLinkLayerStats(); private final WifiLinkLayerStats mNewLlStats = new WifiLinkLayerStats(); + final ArgumentCaptor<OnPropertiesChangedListener> mOnPropertiesChangedListenerCaptor = + ArgumentCaptor.forClass(OnPropertiesChangedListener.class); /** * Sets up for unit test @@ -64,21 +74,38 @@ public class WifiDataStallTest { Settings.Global.WIFI_DATA_STALL_MIN_TX_SUCCESS_WITHOUT_RX, WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT)) .thenReturn(WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT); + when(mDeviceConfigFacade.getDataStallDurationMs()).thenReturn( + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS); + when(mDeviceConfigFacade.getDataStallTxTputThrMbps()).thenReturn( + DeviceConfigFacade.DEFAULT_DATA_STALL_TX_TPUT_THR_MBPS); + when(mDeviceConfigFacade.getDataStallRxTputThrMbps()).thenReturn( + DeviceConfigFacade.DEFAULT_DATA_STALL_RX_TPUT_THR_MBPS); + when(mDeviceConfigFacade.getDataStallTxPerThr()).thenReturn( + DeviceConfigFacade.DEFAULT_DATA_STALL_TX_PER_THR); + when(mDeviceConfigFacade.getDataStallCcaLevelThr()).thenReturn( + DeviceConfigFacade.DEFAULT_DATA_STALL_CCA_LEVEL_THR); + when(mWifiInfo.getLinkSpeed()).thenReturn(100); + when(mWifiInfo.getRxLinkSpeedMbps()).thenReturn(100); + when(mWifiInfo.getFrequency()).thenReturn(5850); + when(mWifiInfo.getBSSID()).thenReturn("5G_WiFi"); - mWifiDataStall = new WifiDataStall(mContext, mFacade, mWifiMetrics); + mWifiDataStall = new WifiDataStall(mContext, mFacade, mWifiMetrics, mDeviceConfigFacade, + mClientModeImplLooper, mClock); mOldLlStats.txmpdu_be = 1000; - mOldLlStats.retries_be = 2000; + mOldLlStats.retries_be = 1000; mOldLlStats.lostmpdu_be = 3000; mOldLlStats.rxmpdu_be = 4000; mOldLlStats.timeStampInMs = 10000; - mNewLlStats.txmpdu_be = mOldLlStats.txmpdu_be; - mNewLlStats.retries_be = mOldLlStats.retries_be; + mNewLlStats.txmpdu_be = 2 * mOldLlStats.txmpdu_be; + mNewLlStats.retries_be = 10 * mOldLlStats.retries_be; mNewLlStats.lostmpdu_be = mOldLlStats.lostmpdu_be; mNewLlStats.rxmpdu_be = mOldLlStats.rxmpdu_be; mNewLlStats.timeStampInMs = mOldLlStats.timeStampInMs + WifiDataStall.MAX_MS_DELTA_FOR_DATA_STALL - 1; + verify(mDeviceConfigFacade).addOnPropertiesChangedListener(any(), + mOnPropertiesChangedListenerCaptor.capture()); } /** @@ -98,23 +125,53 @@ public class WifiDataStallTest { */ @Test public void verifyDataStallTxFailure() throws Exception { - mNewLlStats.lostmpdu_be = mOldLlStats.lostmpdu_be + WifiDataStall.MIN_TX_BAD_DEFAULT; - assertEquals(WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + when(mClock.getElapsedSinceBootMillis()).thenReturn(10L); + + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verifyUpdateWifiIsUnusableLinkLayerStats(); + when(mClock.getElapsedSinceBootMillis()).thenReturn( + 10L + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS); + assertEquals(WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verify(mWifiMetrics).logWifiIsUnusableEvent(WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX); } /** + * Verify there is no data stall from tx failures if tx failures are not consecutively bad + */ + @Test + public void verifyNoDataStallWhenTxFailureIsNotConsecutive() throws Exception { + when(mClock.getElapsedSinceBootMillis()).thenReturn(10L); + + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); + verifyUpdateWifiIsUnusableLinkLayerStats(); + when(mClock.getElapsedSinceBootMillis()).thenReturn( + 10L + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS); + mNewLlStats.retries_be = 2 * mOldLlStats.retries_be; + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); + verify(mWifiMetrics, never()).logWifiIsUnusableEvent( + WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX); + } + + /** * Verify there is data stall from rx failures */ @Test public void verifyDataStallRxFailure() throws Exception { - mNewLlStats.txmpdu_be = - mOldLlStats.txmpdu_be + WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT; - assertEquals(WifiIsUnusableEvent.TYPE_DATA_STALL_TX_WITHOUT_RX, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + when(mWifiInfo.getRxLinkSpeedMbps()).thenReturn(1); + mNewLlStats.retries_be = 2 * mOldLlStats.retries_be; + when(mClock.getElapsedSinceBootMillis()).thenReturn(10L); + + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verifyUpdateWifiIsUnusableLinkLayerStats(); + when(mClock.getElapsedSinceBootMillis()).thenReturn( + 10L + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS); + assertEquals(WifiIsUnusableEvent.TYPE_DATA_STALL_TX_WITHOUT_RX, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verify(mWifiMetrics).logWifiIsUnusableEvent( WifiIsUnusableEvent.TYPE_DATA_STALL_TX_WITHOUT_RX); } @@ -124,58 +181,61 @@ public class WifiDataStallTest { */ @Test public void verifyDataStallBothTxRxFailure() throws Exception { - mNewLlStats.lostmpdu_be = mOldLlStats.lostmpdu_be + WifiDataStall.MIN_TX_BAD_DEFAULT; - mNewLlStats.txmpdu_be = - mOldLlStats.txmpdu_be + WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT; - assertEquals(WifiIsUnusableEvent.TYPE_DATA_STALL_BOTH, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + when(mWifiInfo.getRxLinkSpeedMbps()).thenReturn(1); + when(mClock.getElapsedSinceBootMillis()).thenReturn(10L); + + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verifyUpdateWifiIsUnusableLinkLayerStats(); + when(mClock.getElapsedSinceBootMillis()).thenReturn( + 10L + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS); + assertEquals(WifiIsUnusableEvent.TYPE_DATA_STALL_BOTH, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verify(mWifiMetrics).logWifiIsUnusableEvent(WifiIsUnusableEvent.TYPE_DATA_STALL_BOTH); } /** - * Verify that we can change the minimum number of tx failures - * to trigger data stall from settings + * Verify that we can change the duration of evaluating Wifi conditions + * to trigger data stall from DeviceConfigFacade */ @Test - public void verifyDataStallTxFailureSettingsChange() throws Exception { - when(mFacade.getIntegerSetting(mContext, - Settings.Global.WIFI_DATA_STALL_MIN_TX_BAD, - WifiDataStall.MIN_TX_BAD_DEFAULT)) - .thenReturn(WifiDataStall.MIN_TX_BAD_DEFAULT + 1); - mWifiDataStall.loadSettings(); - verify(mWifiMetrics).setWifiDataStallMinTxBad(WifiDataStall.MIN_TX_BAD_DEFAULT + 1); - verify(mWifiMetrics, times(2)).setWifiDataStallMinRxWithoutTx( - WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT); + public void verifyDataStallDurationDeviceConfigChange() throws Exception { + when(mClock.getElapsedSinceBootMillis()).thenReturn(10L); + when(mDeviceConfigFacade.getDataStallDurationMs()).thenReturn( + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS + 1); + mOnPropertiesChangedListenerCaptor.getValue().onPropertiesChanged(null); - mNewLlStats.lostmpdu_be = mOldLlStats.lostmpdu_be + WifiDataStall.MIN_TX_BAD_DEFAULT; assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verifyUpdateWifiIsUnusableLinkLayerStats(); - verify(mWifiMetrics, never()).logWifiIsUnusableEvent(anyInt()); + when(mClock.getElapsedSinceBootMillis()).thenReturn( + 10L + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS); + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); + verify(mWifiMetrics, never()).logWifiIsUnusableEvent( + WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX); } /** - * Verify that we can change the minimum number of tx successes when rx success is 0 - * to trigger data stall from settings + * Verify that we can change the threshold of Tx packet error rate to trigger a data stall + * from DeviceConfigFacade */ @Test - public void verifyDataStallRxFailureSettingsChange() throws Exception { - when(mFacade.getIntegerSetting(mContext, - Settings.Global.WIFI_DATA_STALL_MIN_TX_SUCCESS_WITHOUT_RX, - WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT)) - .thenReturn(WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT + 1); - mWifiDataStall.loadSettings(); - verify(mWifiMetrics, times(2)).setWifiDataStallMinTxBad(WifiDataStall.MIN_TX_BAD_DEFAULT); - verify(mWifiMetrics).setWifiDataStallMinRxWithoutTx( - WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT + 1); - - mNewLlStats.txmpdu_be = - mOldLlStats.txmpdu_be + WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT; + public void verifyDataStallTxPerThrDeviceConfigChange() throws Exception { + when(mClock.getElapsedSinceBootMillis()).thenReturn(10L); + when(mDeviceConfigFacade.getDataStallTxPerThr()).thenReturn( + DeviceConfigFacade.DEFAULT_DATA_STALL_TX_PER_THR + 1); + mOnPropertiesChangedListenerCaptor.getValue().onPropertiesChanged(null); + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verifyUpdateWifiIsUnusableLinkLayerStats(); - verify(mWifiMetrics, never()).logWifiIsUnusableEvent(anyInt()); + when(mClock.getElapsedSinceBootMillis()).thenReturn( + 10L + DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS); + assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); + verify(mWifiMetrics, never()).logWifiIsUnusableEvent( + WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX); } /** @@ -184,7 +244,7 @@ public class WifiDataStallTest { @Test public void verifyNoDataStallWhenNoFail() throws Exception { assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verify(mWifiMetrics, never()).resetWifiIsUnusableLinkLayerStats(); verifyUpdateWifiIsUnusableLinkLayerStats(); verify(mWifiMetrics, never()).logWifiIsUnusableEvent(anyInt()); @@ -196,11 +256,10 @@ public class WifiDataStallTest { */ @Test public void verifyNoDataStallBigTimeGap() throws Exception { - mNewLlStats.lostmpdu_be = mOldLlStats.lostmpdu_be + WifiDataStall.MIN_TX_BAD_DEFAULT; mNewLlStats.timeStampInMs = mOldLlStats.timeStampInMs + WifiDataStall.MAX_MS_DELTA_FOR_DATA_STALL + 1; assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verifyUpdateWifiIsUnusableLinkLayerStats(); verify(mWifiMetrics, never()).logWifiIsUnusableEvent(anyInt()); } @@ -212,7 +271,7 @@ public class WifiDataStallTest { public void verifyReset() throws Exception { mNewLlStats.lostmpdu_be = mOldLlStats.lostmpdu_be - 1; assertEquals(WifiIsUnusableEvent.TYPE_UNKNOWN, - mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats)); + mWifiDataStall.checkForDataStall(mOldLlStats, mNewLlStats, mWifiInfo)); verify(mWifiMetrics).resetWifiIsUnusableLinkLayerStats(); verify(mWifiMetrics, never()).updateWifiIsUnusableLinkLayerStats( anyLong(), anyLong(), anyLong(), anyLong(), anyLong()); |