diff options
author | Kai Shi <kaishi@google.com> | 2019-11-04 10:35:09 -0800 |
---|---|---|
committer | Kai Shi <kaishi@google.com> | 2019-11-12 13:38:26 -0800 |
commit | da730e6eb6ed224865c7979f325b98ada7a36a9f (patch) | |
tree | 364bb90c285e68250fdb2b70e2257e56011edf57 /tests | |
parent | 881f7bf6854ce9ca03442ec5844780bad09cd9dd (diff) |
Wifi: add a new class to support channel utilization calculation.
This class is used when the scan results are handled in WifiConnectivityManager.
Bug: 143902966
Test: Wifi unit test and manual test.
Change-Id: I87191d4f2098da86dd476f26ba3042c1c7ba0174
Diffstat (limited to 'tests')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiChannelUtilizationTest.java | 388 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java | 48 |
2 files changed, 436 insertions, 0 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiChannelUtilizationTest.java b/tests/wifitests/src/com/android/server/wifi/WifiChannelUtilizationTest.java new file mode 100644 index 000000000..b8bf6ee57 --- /dev/null +++ b/tests/wifitests/src/com/android/server/wifi/WifiChannelUtilizationTest.java @@ -0,0 +1,388 @@ +/** + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wifi; + +import static android.net.wifi.WifiManager.DEVICE_MOBILITY_STATE_STATIONARY; + +import static com.android.dx.mockito.inline.extended.ExtendedMockito.when; +import static com.android.server.wifi.WifiChannelUtilization.CACHE_UPDATE_INTERVAL_MIN_MS; +import static com.android.server.wifi.WifiChannelUtilization.CHANNEL_STATS_CACHE_SIZE; +import static com.android.server.wifi.WifiChannelUtilization.RADIO_ON_TIME_DIFF_MIN_MS; +import static com.android.server.wifi.util.InformationElementUtil.BssLoad.INVALID; +import static com.android.server.wifi.util.InformationElementUtil.BssLoad.MAX_CHANNEL_UTILIZATION; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.validateMockitoUsage; + +import androidx.test.filters.SmallTest; + +import com.android.server.wifi.WifiLinkLayerStats.ChannelStats; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +/** + * Unit tests for {@link com.android.server.wifi.WifiChannelUtilization}. + */ +@SmallTest +public class WifiChannelUtilizationTest extends WifiBaseTest { + private WifiChannelUtilization mWifiChannelUtilization; + @Mock private Clock mClock; + /** + * Called before each test + */ + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + mWifiChannelUtilization = new WifiChannelUtilization(mClock); + mWifiChannelUtilization.init(null); + } + + /** + * Called after each test + */ + @After + public void cleanup() { + validateMockitoUsage(); + } + + @Test + public void verifyEmptyLinkLayerStats() throws Exception { + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(null); + assertEquals(INVALID, mWifiChannelUtilization.getUtilizationRatio(5180)); + } + + @Test + public void verifyEmptyChanStatsMap() throws Exception { + WifiLinkLayerStats llstats = new WifiLinkLayerStats(); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats); + assertEquals(INVALID, mWifiChannelUtilization.getUtilizationRatio(5180)); + } + + @Test + public void verifyOneReadChanStatsWithShortRadioOnTime() throws Exception { + WifiLinkLayerStats llstats = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs = new ChannelStats(); + cs.frequency = freq; + cs.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 2; + cs.ccaBusyTimeMs = 2; + llstats.channelStatsMap.put(freq, cs); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats); + assertEquals(INVALID, mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyOneReadChanStatsWithLongRadioOnTime() throws Exception { + WifiLinkLayerStats llstats = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs = new ChannelStats(); + cs.frequency = freq; + cs.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS + 1; + cs.ccaBusyTimeMs = 20; + llstats.channelStatsMap.put(freq, cs); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats); + assertEquals(cs.ccaBusyTimeMs * MAX_CHANNEL_UTILIZATION / cs.radioOnTimeMs, + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyTwoReadChanStatsRefWithLast() throws Exception { + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + cs1.frequency = freq; + cs1.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS; + cs1.ccaBusyTimeMs = 20; + llstats1.channelStatsMap.put(freq, cs1); + long currentTimeStamp = 1 + CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + WifiLinkLayerStats llstats2 = new WifiLinkLayerStats(); + ChannelStats cs2 = new ChannelStats(); + cs2.frequency = freq; + cs2.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 2 + 1; + cs2.ccaBusyTimeMs = 30; + llstats2.channelStatsMap.put(freq, cs2); + currentTimeStamp = 1 + CACHE_UPDATE_INTERVAL_MIN_MS * 2; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats2); + + assertEquals((cs2.ccaBusyTimeMs - cs1.ccaBusyTimeMs) * MAX_CHANNEL_UTILIZATION + / (cs2.radioOnTimeMs - cs1.radioOnTimeMs), + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyTwoReadChanStatsRefWithZero() throws Exception { + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + cs1.frequency = freq; + cs1.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS + 1; + cs1.ccaBusyTimeMs = 20; + llstats1.channelStatsMap.put(freq, cs1); + long currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS / 2; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + WifiLinkLayerStats llstats2 = new WifiLinkLayerStats(); + ChannelStats cs2 = new ChannelStats(); + cs2.frequency = freq; + cs2.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 2 + 2; + cs2.ccaBusyTimeMs = 30; + llstats2.channelStatsMap.put(freq, cs2); + currentTimeStamp = 1 + CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats2); + + assertEquals(cs2.ccaBusyTimeMs * MAX_CHANNEL_UTILIZATION / cs2.radioOnTimeMs, + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyThreeReadChanStatsRefWithSecondLast() throws Exception { + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + cs1.frequency = freq; + cs1.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 2; + cs1.ccaBusyTimeMs = 20; + llstats1.channelStatsMap.put(freq, cs1); + long currentTimeStamp = 1 + CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + WifiLinkLayerStats llstats2 = new WifiLinkLayerStats(); + ChannelStats cs2 = new ChannelStats(); + cs2.frequency = freq; + cs2.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS + 4; + cs2.ccaBusyTimeMs = 30; + llstats2.channelStatsMap.put(freq, cs2); + currentTimeStamp = 2 + CACHE_UPDATE_INTERVAL_MIN_MS * 2; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats2); + + WifiLinkLayerStats llstats3 = new WifiLinkLayerStats(); + ChannelStats cs3 = new ChannelStats(); + cs3.frequency = freq; + cs3.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 3 / 2 + 4; + cs3.ccaBusyTimeMs = 70; + llstats3.channelStatsMap.put(freq, cs3); + currentTimeStamp = 3 + CACHE_UPDATE_INTERVAL_MIN_MS * 3; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats3); + + if (CHANNEL_STATS_CACHE_SIZE > 1) { + assertEquals((cs3.ccaBusyTimeMs - cs1.ccaBusyTimeMs) * MAX_CHANNEL_UTILIZATION + / (cs3.radioOnTimeMs - cs1.radioOnTimeMs), + mWifiChannelUtilization.getUtilizationRatio(freq)); + } else { + assertEquals(cs3.ccaBusyTimeMs * MAX_CHANNEL_UTILIZATION / cs3.radioOnTimeMs, + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + } + + @Test + public void verifyThreeReadChanStatsRefWithLast() throws Exception { + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + cs1.frequency = freq; + cs1.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 4; + cs1.ccaBusyTimeMs = 20; + llstats1.channelStatsMap.put(freq, cs1); + long currentTimeStamp = 1 + CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + WifiLinkLayerStats llstats2 = new WifiLinkLayerStats(); + ChannelStats cs2 = new ChannelStats(); + cs2.frequency = freq; + cs2.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 2; + cs2.ccaBusyTimeMs = 30; + llstats2.channelStatsMap.put(freq, cs2); + currentTimeStamp = 2 + CACHE_UPDATE_INTERVAL_MIN_MS * 2; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats2); + + WifiLinkLayerStats llstats3 = new WifiLinkLayerStats(); + ChannelStats cs3 = new ChannelStats(); + cs3.frequency = freq; + cs3.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 3; + cs3.ccaBusyTimeMs = 70; + llstats3.channelStatsMap.put(freq, cs3); + currentTimeStamp = 3 + CACHE_UPDATE_INTERVAL_MIN_MS * 3; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats3); + + assertEquals((cs3.ccaBusyTimeMs - cs2.ccaBusyTimeMs) * MAX_CHANNEL_UTILIZATION + / (cs3.radioOnTimeMs - cs2.radioOnTimeMs), + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyThreeReadChanStatsFirstTwoReadAreTooRecent() throws Exception { + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + cs1.frequency = freq; + cs1.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 4; + cs1.ccaBusyTimeMs = 20; + llstats1.channelStatsMap.put(freq, cs1); + + long currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS / 4; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS / 2; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + WifiLinkLayerStats llstats3 = new WifiLinkLayerStats(); + ChannelStats cs3 = new ChannelStats(); + cs3.frequency = freq; + cs3.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 3; + cs3.ccaBusyTimeMs = 70; + llstats3.channelStatsMap.put(freq, cs3); + currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats3); + + assertEquals(cs3.ccaBusyTimeMs * MAX_CHANNEL_UTILIZATION / cs3.radioOnTimeMs, + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyThreeReadChanStatsInitAfterOneRead() throws Exception { + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + cs1.frequency = freq; + cs1.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 4; + cs1.ccaBusyTimeMs = 20; + llstats1.channelStatsMap.put(freq, cs1); + + long currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS + 1; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + mWifiChannelUtilization.init(llstats1); + WifiLinkLayerStats llstats2 = new WifiLinkLayerStats(); + ChannelStats cs2 = new ChannelStats(); + cs2.frequency = freq; + cs2.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 2 + 1; + cs2.ccaBusyTimeMs = 40; + currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS * 2 + 1; + llstats2.channelStatsMap.put(freq, cs2); + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats2); + + assertEquals(INVALID, mWifiChannelUtilization.getUtilizationRatio(freq)); + + WifiLinkLayerStats llstats3 = new WifiLinkLayerStats(); + ChannelStats cs3 = new ChannelStats(); + cs3.frequency = freq; + cs3.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 3 + 1; + cs3.ccaBusyTimeMs = 70; + llstats3.channelStatsMap.put(freq, cs3); + currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats3); + + assertEquals((cs3.ccaBusyTimeMs - cs2.ccaBusyTimeMs) * MAX_CHANNEL_UTILIZATION + / (cs3.radioOnTimeMs - cs2.radioOnTimeMs), + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyThreeReadChanStatsAlwaysStationary() throws Exception { + mWifiChannelUtilization.setDeviceMobilityState(DEVICE_MOBILITY_STATE_STATIONARY); + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + cs1.frequency = freq; + cs1.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 4; + cs1.ccaBusyTimeMs = 20; + llstats1.channelStatsMap.put(freq, cs1); + + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + WifiLinkLayerStats llstats3 = new WifiLinkLayerStats(); + ChannelStats cs3 = new ChannelStats(); + cs3.frequency = freq; + cs3.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 2; + cs3.ccaBusyTimeMs = 70; + llstats3.channelStatsMap.put(freq, cs3); + long currentTimeStamp = CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats3); + + assertEquals(cs3.ccaBusyTimeMs * MAX_CHANNEL_UTILIZATION / cs3.radioOnTimeMs, + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifyThreeReadChanStatsStationaryAfterFirstRead() throws Exception { + WifiLinkLayerStats llstats1 = new WifiLinkLayerStats(); + int freq = 5180; + ChannelStats cs1 = new ChannelStats(); + llstats1.channelStatsMap.put(freq, cs1); + long currentTimeStamp = 0; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats1); + + mWifiChannelUtilization.setDeviceMobilityState(DEVICE_MOBILITY_STATE_STATIONARY); + + WifiLinkLayerStats llstats2 = new WifiLinkLayerStats(); + ChannelStats cs2 = new ChannelStats(); + cs2.frequency = freq; + cs2.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS / 4; + cs2.ccaBusyTimeMs = 20; + llstats2.channelStatsMap.put(freq, cs2); + currentTimeStamp = 1 + CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats2); + + WifiLinkLayerStats llstats3 = new WifiLinkLayerStats(); + ChannelStats cs3 = new ChannelStats(); + cs3.frequency = freq; + cs3.radioOnTimeMs = RADIO_ON_TIME_DIFF_MIN_MS * 2; + cs3.ccaBusyTimeMs = 70; + llstats3.channelStatsMap.put(freq, cs3); + currentTimeStamp = 5 + CACHE_UPDATE_INTERVAL_MIN_MS; + when(mClock.getElapsedSinceBootMillis()).thenReturn(currentTimeStamp); + mWifiChannelUtilization.refreshChannelStatsAndChannelUtilization(llstats3); + + assertEquals((cs3.ccaBusyTimeMs - cs2.ccaBusyTimeMs) * MAX_CHANNEL_UTILIZATION + / (cs3.radioOnTimeMs - cs2.radioOnTimeMs), + mWifiChannelUtilization.getUtilizationRatio(freq)); + } + + @Test + public void verifySetGetUtilizationRatio() throws Exception { + int freq = 5180; + int utilizationRatio = 24; + mWifiChannelUtilization.setUtilizationRatio(freq, utilizationRatio); + assertEquals(utilizationRatio, mWifiChannelUtilization.getUtilizationRatio(freq)); + } +} diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java index fb80b23dd..14ecc0c4c 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java @@ -100,6 +100,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest { when(mWifiNetworkSuggestionsManager.retrieveHiddenNetworkList()) .thenReturn(new ArrayList<>()); when(mWifiInjector.getBssidBlocklistMonitor()).thenReturn(mBssidBlocklistMonitor); + when(mWifiInjector.getWifiChannelUtilization()).thenReturn(mWifiChannelUtilization); mWifiConnectivityManager = createConnectivityManager(); verify(mWifiConfigManager).addOnNetworkUpdateListener(anyObject()); mWifiConnectivityManager.setTrustedConnectionAllowed(true); @@ -145,6 +146,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest { @Mock private WifiNetworkScoreCache mScoreCache; @Mock private WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager; @Mock private BssidBlocklistMonitor mBssidBlocklistMonitor; + @Mock private WifiChannelUtilization mWifiChannelUtilization; @Captor ArgumentCaptor<ScanResult> mCandidateScanResultCaptor; @Captor ArgumentCaptor<ArrayList<String>> mBssidBlacklistCaptor; @Captor ArgumentCaptor<ArrayList<String>> mSsidWhitelistCaptor; @@ -2008,4 +2010,50 @@ public class WifiConnectivityManagerTest extends WifiBaseTest { inOrder.verifyNoMoreInteractions(); } + + /** + * Verify that WifiChannelUtilization is updated after a scan + */ + @Test + public void verifyWifiChannelUtilizationRefreshedAfterScanResults() { + WifiLinkLayerStats llstats = new WifiLinkLayerStats(); + when(mClientModeImpl.getWifiLinkLayerStats()).thenReturn(llstats); + + // Force a connectivity scan + mWifiConnectivityManager.forceConnectivityScan(WIFI_WORK_SOURCE); + + verify(mWifiChannelUtilization).refreshChannelStatsAndChannelUtilization(llstats); + } + + /** + * Verify that WifiChannelUtilization is initialized properly + */ + @Test + public void verifyWifiChannelUtilizationInitAfterWifiToggle() { + verify(mWifiChannelUtilization, times(1)).init(null); + WifiLinkLayerStats llstats = new WifiLinkLayerStats(); + when(mClientModeImpl.getWifiLinkLayerStats()).thenReturn(llstats); + + mWifiConnectivityManager.setWifiEnabled(false); + mWifiConnectivityManager.setWifiEnabled(true); + verify(mWifiChannelUtilization, times(1)).init(llstats); + } + + /** + * Verify that WifiChannelUtilization sets mobility state correctly + */ + @Test + public void verifyWifiChannelUtilizationSetMobilityState() { + WifiLinkLayerStats llstats = new WifiLinkLayerStats(); + when(mClientModeImpl.getWifiLinkLayerStats()).thenReturn(llstats); + + mWifiConnectivityManager.setDeviceMobilityState( + WifiManager.DEVICE_MOBILITY_STATE_HIGH_MVMT); + verify(mWifiChannelUtilization).setDeviceMobilityState( + WifiManager.DEVICE_MOBILITY_STATE_HIGH_MVMT); + mWifiConnectivityManager.setDeviceMobilityState( + WifiManager.DEVICE_MOBILITY_STATE_STATIONARY); + verify(mWifiChannelUtilization).setDeviceMobilityState( + WifiManager.DEVICE_MOBILITY_STATE_STATIONARY); + } } |