1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.net.wifi; 18 19 import static org.junit.Assert.assertEquals; 20 import static org.junit.Assert.fail; 21 import static org.mockito.Mockito.validateMockitoUsage; 22 23 import android.net.wifi.WifiUsabilityStatsEntry.ContentionTimeStats; 24 import android.net.wifi.WifiUsabilityStatsEntry.RadioStats; 25 import android.net.wifi.WifiUsabilityStatsEntry.RateStats; 26 import android.os.Parcel; 27 28 import androidx.test.filters.SmallTest; 29 30 import org.junit.After; 31 import org.junit.Before; 32 import org.junit.Test; 33 import org.mockito.MockitoAnnotations; 34 35 import java.util.NoSuchElementException; 36 37 38 /** 39 * Unit tests for {@link android.net.wifi.WifiUsabilityStatsEntry}. 40 */ 41 @SmallTest 42 public class WifiUsabilityStatsEntryTest { 43 44 /** 45 * Setup before tests. 46 */ 47 @Before setUp()48 public void setUp() throws Exception { 49 MockitoAnnotations.initMocks(this); 50 } 51 52 /** 53 * Clean up after tests. 54 */ 55 @After cleanup()56 public void cleanup() { 57 validateMockitoUsage(); 58 } 59 60 /** 61 * Verify parcel read/write for Wifi usability stats result. 62 */ 63 @Test verifyStatsResultWriteAndThenRead()64 public void verifyStatsResultWriteAndThenRead() throws Exception { 65 WifiUsabilityStatsEntry writeResult = createResult(); 66 WifiUsabilityStatsEntry readResult = parcelWriteRead(writeResult); 67 assertWifiUsabilityStatsEntryEquals(writeResult, readResult); 68 } 69 70 /** 71 * Verify parcel read/write for Wifi usability stats result. 72 */ 73 @Test getTimeSliceDutyCycleInPercent()74 public void getTimeSliceDutyCycleInPercent() throws Exception { 75 ContentionTimeStats[] contentionTimeStats = new ContentionTimeStats[4]; 76 contentionTimeStats[0] = new ContentionTimeStats(1, 2, 3, 4); 77 contentionTimeStats[1] = new ContentionTimeStats(5, 6, 7, 8); 78 contentionTimeStats[2] = new ContentionTimeStats(9, 10, 11, 12); 79 contentionTimeStats[3] = new ContentionTimeStats(13, 14, 15, 16); 80 RateStats[] rateStats = new RateStats[2]; 81 rateStats[0] = new RateStats(1, 3, 4, 7, 9, 11, 13, 15, 17); 82 rateStats[1] = new RateStats(2, 2, 3, 8, 10, 12, 14, 16, 18); 83 84 RadioStats[] radioStats = new RadioStats[2]; 85 radioStats[0] = new RadioStats(0, 10, 11, 12, 13, 14, 15, 16, 17, 18); 86 radioStats[1] = new RadioStats(1, 20, 21, 22, 23, 24, 25, 26, 27, 28); 87 88 WifiUsabilityStatsEntry usabilityStatsEntry = new WifiUsabilityStatsEntry( 89 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 90 32, contentionTimeStats, rateStats, radioStats, 100, true, 91 true, true, 23, 24, 25, true); 92 assertEquals(32, usabilityStatsEntry.getTimeSliceDutyCycleInPercent()); 93 94 WifiUsabilityStatsEntry usabilityStatsEntryWithInvalidDutyCycleValue = 95 new WifiUsabilityStatsEntry( 96 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 97 21, 22, -1, contentionTimeStats, rateStats, radioStats, 101, true, true, 98 true, 23, 24, 25, true); 99 try { 100 usabilityStatsEntryWithInvalidDutyCycleValue.getTimeSliceDutyCycleInPercent(); 101 fail(); 102 } catch (NoSuchElementException e) { 103 // pass 104 } 105 } 106 107 /** 108 * Write the provided {@link WifiUsabilityStatsEntry} to a parcel and deserialize it. 109 */ parcelWriteRead( WifiUsabilityStatsEntry writeResult)110 private static WifiUsabilityStatsEntry parcelWriteRead( 111 WifiUsabilityStatsEntry writeResult) throws Exception { 112 Parcel parcel = Parcel.obtain(); 113 writeResult.writeToParcel(parcel, 0); 114 parcel.setDataPosition(0); // Rewind data position back to the beginning for read. 115 return WifiUsabilityStatsEntry.CREATOR.createFromParcel(parcel); 116 } 117 createResult()118 private static WifiUsabilityStatsEntry createResult() { 119 ContentionTimeStats[] contentionTimeStats = new ContentionTimeStats[4]; 120 contentionTimeStats[0] = new ContentionTimeStats(1, 2, 3, 4); 121 contentionTimeStats[1] = new ContentionTimeStats(5, 6, 7, 8); 122 contentionTimeStats[2] = new ContentionTimeStats(9, 10, 11, 12); 123 contentionTimeStats[3] = new ContentionTimeStats(13, 14, 15, 16); 124 RateStats[] rateStats = new RateStats[2]; 125 rateStats[0] = new RateStats(1, 3, 4, 7, 9, 11, 13, 15, 17); 126 rateStats[1] = new RateStats(2, 2, 3, 8, 10, 12, 14, 16, 18); 127 128 RadioStats[] radioStats = new RadioStats[2]; 129 radioStats[0] = new RadioStats(0, 10, 11, 12, 13, 14, 15, 16, 17, 18); 130 radioStats[1] = new RadioStats(1, 20, 21, 22, 23, 24, 25, 26, 27, 28); 131 132 return new WifiUsabilityStatsEntry( 133 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 134 50, contentionTimeStats, rateStats, radioStats, 102, true, 135 true, true, 23, 24, 25, true 136 ); 137 } 138 assertWifiUsabilityStatsEntryEquals( WifiUsabilityStatsEntry expected, WifiUsabilityStatsEntry actual)139 private static void assertWifiUsabilityStatsEntryEquals( 140 WifiUsabilityStatsEntry expected, 141 WifiUsabilityStatsEntry actual) { 142 assertEquals(expected.getTimeStampMillis(), actual.getTimeStampMillis()); 143 assertEquals(expected.getRssi(), actual.getRssi()); 144 assertEquals(expected.getLinkSpeedMbps(), actual.getLinkSpeedMbps()); 145 assertEquals(expected.getTotalTxSuccess(), actual.getTotalTxSuccess()); 146 assertEquals(expected.getTotalTxRetries(), actual.getTotalTxRetries()); 147 assertEquals(expected.getTotalTxBad(), actual.getTotalTxBad()); 148 assertEquals(expected.getTotalRxSuccess(), actual.getTotalRxSuccess()); 149 assertEquals(expected.getWifiLinkLayerRadioStats().size(), 150 actual.getWifiLinkLayerRadioStats().size()); 151 for (int i = 0; i < expected.getWifiLinkLayerRadioStats().size(); i++) { 152 RadioStats expectedRadioStats = expected.getWifiLinkLayerRadioStats().get(i); 153 RadioStats actualRadioStats = actual.getWifiLinkLayerRadioStats().get(i); 154 assertEquals(expectedRadioStats.getRadioId(), 155 actualRadioStats.getRadioId()); 156 assertEquals(expectedRadioStats.getTotalRadioOnTimeMillis(), 157 actualRadioStats.getTotalRadioOnTimeMillis()); 158 assertEquals(expectedRadioStats.getTotalRadioTxTimeMillis(), 159 actualRadioStats.getTotalRadioTxTimeMillis()); 160 assertEquals(expectedRadioStats.getTotalRadioRxTimeMillis(), 161 actualRadioStats.getTotalRadioRxTimeMillis()); 162 assertEquals(expectedRadioStats.getTotalScanTimeMillis(), 163 actualRadioStats.getTotalScanTimeMillis()); 164 assertEquals(expectedRadioStats.getTotalNanScanTimeMillis(), 165 actualRadioStats.getTotalNanScanTimeMillis()); 166 assertEquals(expectedRadioStats.getTotalBackgroundScanTimeMillis(), 167 actualRadioStats.getTotalBackgroundScanTimeMillis()); 168 assertEquals(expectedRadioStats.getTotalRoamScanTimeMillis(), 169 actualRadioStats.getTotalRoamScanTimeMillis()); 170 assertEquals(expectedRadioStats.getTotalPnoScanTimeMillis(), 171 actualRadioStats.getTotalPnoScanTimeMillis()); 172 assertEquals(expectedRadioStats.getTotalHotspot2ScanTimeMillis(), 173 actualRadioStats.getTotalHotspot2ScanTimeMillis()); 174 } 175 assertEquals(expected.getTotalRadioOnTimeMillis(), actual.getTotalRadioOnTimeMillis()); 176 assertEquals(expected.getTotalRadioTxTimeMillis(), actual.getTotalRadioTxTimeMillis()); 177 assertEquals(expected.getTotalRadioRxTimeMillis(), actual.getTotalRadioRxTimeMillis()); 178 assertEquals(expected.getTotalScanTimeMillis(), actual.getTotalScanTimeMillis()); 179 assertEquals(expected.getTotalNanScanTimeMillis(), actual.getTotalNanScanTimeMillis()); 180 assertEquals(expected.getTotalBackgroundScanTimeMillis(), 181 actual.getTotalBackgroundScanTimeMillis()); 182 assertEquals(expected.getTotalRoamScanTimeMillis(), actual.getTotalRoamScanTimeMillis()); 183 assertEquals(expected.getTotalPnoScanTimeMillis(), actual.getTotalPnoScanTimeMillis()); 184 assertEquals(expected.getTotalHotspot2ScanTimeMillis(), 185 actual.getTotalHotspot2ScanTimeMillis()); 186 assertEquals(expected.getTotalCcaBusyFreqTimeMillis(), 187 actual.getTotalCcaBusyFreqTimeMillis()); 188 assertEquals(expected.getTotalRadioOnFreqTimeMillis(), 189 actual.getTotalRadioOnFreqTimeMillis()); 190 assertEquals(expected.getTotalBeaconRx(), actual.getTotalBeaconRx()); 191 assertEquals(expected.getProbeStatusSinceLastUpdate(), 192 actual.getProbeStatusSinceLastUpdate()); 193 assertEquals(expected.getProbeElapsedTimeSinceLastUpdateMillis(), 194 actual.getProbeElapsedTimeSinceLastUpdateMillis()); 195 assertEquals(expected.getProbeMcsRateSinceLastUpdate(), 196 actual.getProbeMcsRateSinceLastUpdate()); 197 assertEquals(expected.getRxLinkSpeedMbps(), actual.getRxLinkSpeedMbps()); 198 assertEquals(expected.getTimeSliceDutyCycleInPercent(), 199 actual.getTimeSliceDutyCycleInPercent()); 200 assertEquals( 201 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 202 .getContentionTimeMinMicros(), 203 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 204 .getContentionTimeMinMicros()); 205 assertEquals( 206 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 207 .getContentionTimeMaxMicros(), 208 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 209 .getContentionTimeMaxMicros()); 210 assertEquals( 211 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 212 .getContentionTimeAvgMicros(), 213 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 214 .getContentionTimeAvgMicros()); 215 assertEquals( 216 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 217 .getContentionNumSamples(), 218 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BE) 219 .getContentionNumSamples()); 220 assertEquals( 221 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 222 .getContentionTimeMinMicros(), 223 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 224 .getContentionTimeMinMicros()); 225 assertEquals( 226 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 227 .getContentionTimeMaxMicros(), 228 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 229 .getContentionTimeMaxMicros()); 230 assertEquals( 231 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 232 .getContentionTimeAvgMicros(), 233 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 234 .getContentionTimeAvgMicros()); 235 assertEquals( 236 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 237 .getContentionNumSamples(), 238 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_BK) 239 .getContentionNumSamples()); 240 assertEquals( 241 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 242 .getContentionTimeMinMicros(), 243 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 244 .getContentionTimeMinMicros()); 245 assertEquals( 246 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 247 .getContentionTimeMaxMicros(), 248 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 249 .getContentionTimeMaxMicros()); 250 assertEquals( 251 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 252 .getContentionTimeAvgMicros(), 253 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 254 .getContentionTimeAvgMicros()); 255 assertEquals( 256 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 257 .getContentionNumSamples(), 258 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VI) 259 .getContentionNumSamples()); 260 assertEquals( 261 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 262 .getContentionTimeMinMicros(), 263 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 264 .getContentionTimeMinMicros()); 265 assertEquals( 266 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 267 .getContentionTimeMaxMicros(), 268 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 269 .getContentionTimeMaxMicros()); 270 assertEquals( 271 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 272 .getContentionTimeAvgMicros(), 273 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 274 .getContentionTimeAvgMicros()); 275 assertEquals( 276 expected.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 277 .getContentionNumSamples(), 278 actual.getContentionTimeStats(WifiUsabilityStatsEntry.WME_ACCESS_CATEGORY_VO) 279 .getContentionNumSamples()); 280 for (int i = 0; i < expected.getRateStats().size(); i++) { 281 RateStats expectedStats = expected.getRateStats().get(i); 282 RateStats actualStats = actual.getRateStats().get(i); 283 assertEquals(expectedStats.getPreamble(), actualStats.getPreamble()); 284 assertEquals(expectedStats.getNumberOfSpatialStreams(), 285 actualStats.getNumberOfSpatialStreams()); 286 assertEquals(expectedStats.getBandwidthInMhz(), actualStats.getBandwidthInMhz()); 287 assertEquals(expectedStats.getRateMcsIdx(), actualStats.getRateMcsIdx()); 288 assertEquals(expectedStats.getBitRateInKbps(), actualStats.getBitRateInKbps()); 289 assertEquals(expectedStats.getTxMpdu(), actualStats.getTxMpdu()); 290 assertEquals(expectedStats.getRxMpdu(), actualStats.getRxMpdu()); 291 assertEquals(expectedStats.getMpduLost(), actualStats.getMpduLost()); 292 assertEquals(expectedStats.getRetries(), actualStats.getRetries()); 293 } 294 assertEquals(expected.getChannelUtilizationRatio(), actual.getChannelUtilizationRatio()); 295 assertEquals(expected.isThroughputSufficient(), actual.isThroughputSufficient()); 296 assertEquals(expected.isWifiScoringEnabled(), actual.isWifiScoringEnabled()); 297 assertEquals(expected.isCellularDataAvailable(), actual.isCellularDataAvailable()); 298 assertEquals(expected.getCellularDataNetworkType(), actual.getCellularDataNetworkType()); 299 assertEquals(expected.getCellularSignalStrengthDbm(), 300 actual.getCellularSignalStrengthDbm()); 301 assertEquals(expected.getCellularSignalStrengthDb(), actual.getCellularSignalStrengthDb()); 302 assertEquals(expected.isSameRegisteredCell(), actual.isSameRegisteredCell()); 303 } 304 } 305