11b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne/* 21b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Copyright (C) 2016 The Android Open Source Project 31b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 41b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Licensed under the Apache License, Version 2.0 (the "License"); 51b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * you may not use this file except in compliance with the License. 61b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * You may obtain a copy of the License at 71b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 81b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * http://www.apache.org/licenses/LICENSE-2.0 91b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 101b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Unless required by applicable law or agreed to in writing, software 111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * distributed under the License is distributed on an "AS IS" BASIS, 121b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * See the License for the specific language governing permissions and 141b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * limitations under the License 151b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 161b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhnepackage com.android.server.wifi; 171b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport static org.junit.Assert.assertEquals; 191b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport static org.junit.Assert.assertTrue; 2049410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhneimport static org.mockito.Mockito.*; 211b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 22f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhneimport android.net.wifi.ScanResult; 23f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhneimport android.net.wifi.WifiConfiguration; 2428345f81bf3f95e25946d398d594f39141c41442Mitchell Willsimport android.test.suitebuilder.annotation.SmallTest; 251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport android.util.Base64; 261b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 27f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhneimport com.android.server.wifi.hotspot2.NetworkDetail; 28f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 291b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport org.junit.Before; 301b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport org.junit.Test; 3149410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhneimport org.mockito.Mock; 3249410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhneimport org.mockito.MockitoAnnotations; 331b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 341b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.io.ByteArrayOutputStream; 351b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.io.PrintWriter; 361b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.util.regex.Matcher; 371b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.util.regex.Pattern; 381b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 391b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne/** 401b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Unit tests for {@link com.android.server.wifi.WifiMetrics}. 411b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 4228345f81bf3f95e25946d398d594f39141c41442Mitchell Wills@SmallTest 431b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhnepublic class WifiMetricsTest { 441b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 451b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne WifiMetrics mWifiMetrics; 461b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne WifiMetricsProto.WifiLog mDeserializedWifiMetrics; 4749410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne @Mock Clock mClock; 48f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 491b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne @Before 501b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void setUp() throws Exception { 5149410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne MockitoAnnotations.initMocks(this); 521b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics = null; 5349410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne when(mClock.elapsedRealtime()).thenReturn((long) 0); 5449410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne mWifiMetrics = new WifiMetrics(mClock); 551b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 561b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 571b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Test that startConnectionEvent and endConnectionEvent can be called repeatedly and out of 592532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne * order. Only tests no exception occurs. Creates 3 ConnectionEvents. 601b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 611b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne @Test 621b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void startAndEndConnectionEventSucceeds() throws Exception { 631b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //Start and end Connection event 6496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "RED", 651b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 662532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mWifiMetrics.endConnectionEvent( 6796cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_AUTHENTICATION_FAILURE, 682532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_DHCP); 691b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //end Connection event without starting one 702532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mWifiMetrics.endConnectionEvent( 7196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_AUTHENTICATION_FAILURE, 722532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_DHCP); 731b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //start two ConnectionEvents in a row 7496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "BLUE", 751b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 7696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "GREEN", 771b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 781b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 791b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 8049410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne private static final long TEST_RECORD_DURATION_SEC = 12 * 60 * 60; 8149410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne private static final long TEST_RECORD_DURATION_MILLIS = TEST_RECORD_DURATION_SEC * 1000; 8249410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne 831b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 84f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne * Simulate how dumpsys gets the proto from mWifiMetrics, filter the proto bytes out and 85f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne * deserialize them into mDeserializedWifiMetrics 86f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne */ 87f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne public void dumpProtoAndDeserialize() throws Exception { 88f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne ByteArrayOutputStream stream = new ByteArrayOutputStream(); 89f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne PrintWriter writer = new PrintWriter(stream); 90f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne String[] args = new String[0]; 9149410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne 9249410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne when(mClock.elapsedRealtime()).thenReturn(TEST_RECORD_DURATION_MILLIS); 93f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Test proto dump, by passing in proto arg option 94f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne args = new String[]{WifiMetrics.PROTO_DUMP_ARG}; 95f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.dump(null, writer, args); 96f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne writer.flush(); 97f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne Pattern pattern = Pattern.compile( 98f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne "(?<=WifiMetrics:\\n)([\\s\\S]*)(?=EndWifiMetrics)"); 99f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne Matcher matcher = pattern.matcher(stream.toString()); 100f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertTrue("Proto Byte string found in WifiMetrics.dump():\n" + stream.toString(), 101f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne matcher.find()); 102f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne String protoByteString = matcher.group(1); 103f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne byte[] protoBytes = Base64.decode(protoByteString, Base64.DEFAULT); 104f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mDeserializedWifiMetrics = WifiMetricsProto.WifiLog.parseFrom(protoBytes); 105f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne } 106f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 1071b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne @Test 1081b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void dumpHumanReadable() throws Exception { 1091b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne ByteArrayOutputStream stream = new ByteArrayOutputStream(); 1101b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne PrintWriter writer = new PrintWriter(stream); 1111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne String[] args = new String[0]; 1121b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.dump(null, writer, args); 1131b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne writer.flush(); 1141b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertTrue("stream.toString().contains(\"WifiMetrics\")", 1151b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne stream.toString().contains("WifiMetrics")); 1161b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 1171b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 1181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne @Test 119f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne public void testDumpProtoAndDeserialize() throws Exception { 1201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne setAndIncrementMetrics(); 121f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne dumpProtoAndDeserialize(); 1221b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertDeserializedMetricsCorrect(); 1231b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 1241b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 1251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_SAVED_NETWORKS = 1; 1261b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_OPEN_NETWORKS = 2; 1271b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_PERSONAL_NETWORKS = 3; 1281b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_ENTERPRISE_NETWORKS = 5; 1291b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final boolean TEST_VAL_IS_LOCATION_ENABLED = true; 1301b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final boolean IS_SCANNING_ALWAYS_ENABLED = true; 1311b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_NEWTORKS_ADDED_BY_USER = 13; 1321b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_NEWTORKS_ADDED_BY_APPS = 17; 1331b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_EMPTY_SCAN_RESULTS = 19; 1341b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final int NUM_NON_EMPTY_SCAN_RESULTS = 23; 135c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_SCAN_UNKNOWN = 1; 136c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_SCAN_SUCCESS = 2; 137c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_SCAN_FAILURE_INTERRUPTED = 3; 138c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_SCAN_FAILURE_INVALID_CONFIGURATION = 5; 139c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_WIFI_UNKNOWN_SCREEN_OFF = 3; 140c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_WIFI_UNKNOWN_SCREEN_ON = 5; 141c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_WIFI_ASSOCIATED_SCREEN_OFF = 7; 142c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int NUM_WIFI_ASSOCIATED_SCREEN_ON = 11; 143ce003b812aead64dcb36647180991150021b24c1Glen Kuhne private static final int NUM_CONNECTIVITY_WATCHDOG_PNO_GOOD = 11; 144ce003b812aead64dcb36647180991150021b24c1Glen Kuhne private static final int NUM_CONNECTIVITY_WATCHDOG_PNO_BAD = 12; 145ce003b812aead64dcb36647180991150021b24c1Glen Kuhne private static final int NUM_CONNECTIVITY_WATCHDOG_BACKGROUND_GOOD = 13; 146ce003b812aead64dcb36647180991150021b24c1Glen Kuhne private static final int NUM_CONNECTIVITY_WATCHDOG_BACKGROUND_BAD = 14; 1475f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_TRIGGERS = 1; 1485f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_BAD_ASSOCIATION_NETWORKS_TOTAL = 2; 1495f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_BAD_AUTHENTICATION_NETWORKS_TOTAL = 3; 1505f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_BAD_DHCP_NETWORKS_TOTAL = 4; 1515f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_BAD_OTHER_NETWORKS_TOTAL = 5; 1525f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_AVAILABLE_NETWORKS_TOTAL = 6; 1535f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_ASSOCIATION = 7; 1545f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_AUTHENTICATION = 8; 1555f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_DHCP = 9; 1565f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne private static final int NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_OTHER = 10; 1571b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 1581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Set simple metrics, increment others 1591b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 1601b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void setAndIncrementMetrics() throws Exception { 1611b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setNumSavedNetworks(NUM_SAVED_NETWORKS); 1621b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setNumOpenNetworks(NUM_OPEN_NETWORKS); 1631b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setNumPersonalNetworks(NUM_PERSONAL_NETWORKS); 1641b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setNumEnterpriseNetworks(NUM_ENTERPRISE_NETWORKS); 1651b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setNumNetworksAddedByUser(NUM_NEWTORKS_ADDED_BY_USER); 1661b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setNumNetworksAddedByApps(NUM_NEWTORKS_ADDED_BY_APPS); 1671b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setIsLocationEnabled(TEST_VAL_IS_LOCATION_ENABLED); 1681b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.setIsScanningAlwaysEnabled(IS_SCANNING_ALWAYS_ENABLED); 1691b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 1701b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne for (int i = 0; i < NUM_EMPTY_SCAN_RESULTS; i++) { 1711b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.incrementEmptyScanResultCount(); 1721b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 1731b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne for (int i = 0; i < NUM_NON_EMPTY_SCAN_RESULTS; i++) { 1741b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.incrementNonEmptyScanResultCount(); 1751b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 176c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiMetrics.incrementScanReturnEntry(WifiMetricsProto.WifiLog.SCAN_UNKNOWN, 177c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_UNKNOWN); 178c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiMetrics.incrementScanReturnEntry(WifiMetricsProto.WifiLog.SCAN_SUCCESS, 179c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_SUCCESS); 180c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiMetrics.incrementScanReturnEntry( 181c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.SCAN_FAILURE_INTERRUPTED, 182c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_FAILURE_INTERRUPTED); 183c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiMetrics.incrementScanReturnEntry( 184c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.SCAN_FAILURE_INVALID_CONFIGURATION, 185c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_FAILURE_INVALID_CONFIGURATION); 186c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < NUM_WIFI_UNKNOWN_SCREEN_OFF; i++) { 1871b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.incrementWifiSystemScanStateCount(WifiMetricsProto.WifiLog.WIFI_UNKNOWN, 1881b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne false); 189c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 190c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < NUM_WIFI_UNKNOWN_SCREEN_ON; i++) { 1911b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.incrementWifiSystemScanStateCount(WifiMetricsProto.WifiLog.WIFI_UNKNOWN, 1921b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne true); 193c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 194c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < NUM_WIFI_ASSOCIATED_SCREEN_OFF; i++) { 1951b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.incrementWifiSystemScanStateCount(WifiMetricsProto.WifiLog.WIFI_ASSOCIATED, 1961b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne false); 197c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 198c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < NUM_WIFI_ASSOCIATED_SCREEN_ON; i++) { 1991b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiMetrics.incrementWifiSystemScanStateCount(WifiMetricsProto.WifiLog.WIFI_ASSOCIATED, 2001b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne true); 2011b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 202ce003b812aead64dcb36647180991150021b24c1Glen Kuhne for (int i = 0; i < NUM_CONNECTIVITY_WATCHDOG_PNO_GOOD; i++) { 203ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiMetrics.incrementNumConnectivityWatchdogPnoGood(); 204ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 205ce003b812aead64dcb36647180991150021b24c1Glen Kuhne for (int i = 0; i < NUM_CONNECTIVITY_WATCHDOG_PNO_BAD; i++) { 206ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiMetrics.incrementNumConnectivityWatchdogPnoBad(); 207ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 208ce003b812aead64dcb36647180991150021b24c1Glen Kuhne for (int i = 0; i < NUM_CONNECTIVITY_WATCHDOG_BACKGROUND_GOOD; i++) { 209ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiMetrics.incrementNumConnectivityWatchdogBackgroundGood(); 210ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 211ce003b812aead64dcb36647180991150021b24c1Glen Kuhne for (int i = 0; i < NUM_CONNECTIVITY_WATCHDOG_BACKGROUND_BAD; i++) { 212ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiMetrics.incrementNumConnectivityWatchdogBackgroundBad(); 213ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 2145f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne for (int i = 0; i < NUM_LAST_RESORT_WATCHDOG_TRIGGERS; i++) { 2155f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.incrementNumLastResortWatchdogTriggers(); 2165f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 2175f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.addCountToNumLastResortWatchdogBadAssociationNetworksTotal( 2185f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne NUM_LAST_RESORT_WATCHDOG_BAD_ASSOCIATION_NETWORKS_TOTAL); 2195f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.addCountToNumLastResortWatchdogBadAuthenticationNetworksTotal( 2205f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne NUM_LAST_RESORT_WATCHDOG_BAD_AUTHENTICATION_NETWORKS_TOTAL); 2215f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.addCountToNumLastResortWatchdogBadDhcpNetworksTotal( 2225f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne NUM_LAST_RESORT_WATCHDOG_BAD_DHCP_NETWORKS_TOTAL); 2235f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.addCountToNumLastResortWatchdogBadOtherNetworksTotal( 2245f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne NUM_LAST_RESORT_WATCHDOG_BAD_OTHER_NETWORKS_TOTAL); 2255f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.addCountToNumLastResortWatchdogAvailableNetworksTotal( 2265f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne NUM_LAST_RESORT_WATCHDOG_AVAILABLE_NETWORKS_TOTAL); 2275f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne for (int i = 0; i < NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_ASSOCIATION; i++) { 2285f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.incrementNumLastResortWatchdogTriggersWithBadAssociation(); 2295f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 2305f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne for (int i = 0; i < NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_AUTHENTICATION; i++) { 2315f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.incrementNumLastResortWatchdogTriggersWithBadAuthentication(); 2325f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 2335f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne for (int i = 0; i < NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_DHCP; i++) { 2345f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.incrementNumLastResortWatchdogTriggersWithBadDhcp(); 2355f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 2365f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne for (int i = 0; i < NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_OTHER; i++) { 2375f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiMetrics.incrementNumLastResortWatchdogTriggersWithBadOther(); 2385f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 2391b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 2401b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 2411b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 2421b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Assert that values in deserializedWifiMetrics match those set in 'setAndIncrementMetrics' 2431b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 2441b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void assertDeserializedMetricsCorrect() throws Exception { 2451b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numSavedNetworks == NUM_SAVED_NETWORKS", 2461b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numSavedNetworks, NUM_SAVED_NETWORKS); 2471b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numOpenNetworks == NUM_OPEN_NETWORKS", 2481b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numOpenNetworks, NUM_OPEN_NETWORKS); 2491b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numPersonalNetworks == NUM_PERSONAL_NETWORKS", 2501b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numPersonalNetworks, NUM_PERSONAL_NETWORKS); 2511b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numEnterpriseNetworks " 2521b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + "== NUM_ENTERPRISE_NETWORKS", 2531b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numEnterpriseNetworks, NUM_ENTERPRISE_NETWORKS); 2541b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numNetworksAddedByUser " 2551b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + "== NUM_NEWTORKS_ADDED_BY_USER", 2561b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numNetworksAddedByUser, NUM_NEWTORKS_ADDED_BY_USER); 2571b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numNetworksAddedByApps " 2581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + "== NUM_NEWTORKS_ADDED_BY_APPS", 2591b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numNetworksAddedByApps, NUM_NEWTORKS_ADDED_BY_APPS); 2601b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.isLocationEnabled == TEST_VAL_IS_LOCATION_ENABLED", 2611b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.isLocationEnabled, TEST_VAL_IS_LOCATION_ENABLED); 2621b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.isScanningAlwaysEnabled " 2631b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + "== IS_SCANNING_ALWAYS_ENABLED", 2641b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.isScanningAlwaysEnabled, IS_SCANNING_ALWAYS_ENABLED); 2651b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numEmptyScanResults == NUM_EMPTY_SCAN_RESULTS", 2661b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numEmptyScanResults, NUM_EMPTY_SCAN_RESULTS); 2671b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertEquals("mDeserializedWifiMetrics.numNonEmptyScanResults == " 2681b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + "NUM_NON_EMPTY_SCAN_RESULTS", 2691b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mDeserializedWifiMetrics.numNonEmptyScanResults, NUM_NON_EMPTY_SCAN_RESULTS); 270c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertScanReturnEntryEquals(WifiMetricsProto.WifiLog.SCAN_UNKNOWN, 271c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_UNKNOWN); 272c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertScanReturnEntryEquals(WifiMetricsProto.WifiLog.SCAN_SUCCESS, 273c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_SUCCESS); 274c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertScanReturnEntryEquals(WifiMetricsProto.WifiLog.SCAN_FAILURE_INTERRUPTED, 275c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_FAILURE_INTERRUPTED); 276c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertScanReturnEntryEquals(WifiMetricsProto.WifiLog.SCAN_FAILURE_INVALID_CONFIGURATION, 277c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_SCAN_FAILURE_INVALID_CONFIGURATION); 278c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertSystemStateEntryEquals(WifiMetricsProto.WifiLog.WIFI_UNKNOWN, false, 279c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_WIFI_UNKNOWN_SCREEN_OFF); 280c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertSystemStateEntryEquals(WifiMetricsProto.WifiLog.WIFI_UNKNOWN, true, 281c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_WIFI_UNKNOWN_SCREEN_ON); 282c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertSystemStateEntryEquals( 283c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.WIFI_ASSOCIATED, false, NUM_WIFI_ASSOCIATED_SCREEN_OFF); 284c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertSystemStateEntryEquals(WifiMetricsProto.WifiLog.WIFI_ASSOCIATED, true, 285c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne NUM_WIFI_ASSOCIATED_SCREEN_ON); 286ce003b812aead64dcb36647180991150021b24c1Glen Kuhne assertEquals(mDeserializedWifiMetrics.numConnectivityWatchdogPnoGood, 287ce003b812aead64dcb36647180991150021b24c1Glen Kuhne NUM_CONNECTIVITY_WATCHDOG_PNO_GOOD); 288ce003b812aead64dcb36647180991150021b24c1Glen Kuhne assertEquals(mDeserializedWifiMetrics.numConnectivityWatchdogPnoBad, 289ce003b812aead64dcb36647180991150021b24c1Glen Kuhne NUM_CONNECTIVITY_WATCHDOG_PNO_BAD); 290ce003b812aead64dcb36647180991150021b24c1Glen Kuhne assertEquals(mDeserializedWifiMetrics.numConnectivityWatchdogBackgroundGood, 291ce003b812aead64dcb36647180991150021b24c1Glen Kuhne NUM_CONNECTIVITY_WATCHDOG_BACKGROUND_GOOD); 292ce003b812aead64dcb36647180991150021b24c1Glen Kuhne assertEquals(mDeserializedWifiMetrics.numConnectivityWatchdogBackgroundBad, 293ce003b812aead64dcb36647180991150021b24c1Glen Kuhne NUM_CONNECTIVITY_WATCHDOG_BACKGROUND_BAD); 2945f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_TRIGGERS, 2955f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogTriggers); 2965f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_BAD_ASSOCIATION_NETWORKS_TOTAL, 2975f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogBadAssociationNetworksTotal); 2985f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_BAD_AUTHENTICATION_NETWORKS_TOTAL, 2995f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogBadAuthenticationNetworksTotal); 3005f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_BAD_DHCP_NETWORKS_TOTAL, 3015f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogBadDhcpNetworksTotal); 3025f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_BAD_OTHER_NETWORKS_TOTAL, 3035f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogBadOtherNetworksTotal); 3045f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_AVAILABLE_NETWORKS_TOTAL, 3055f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogAvailableNetworksTotal); 3065f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_ASSOCIATION, 3075f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogTriggersWithBadAssociation); 3085f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_AUTHENTICATION, 3095f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogTriggersWithBadAuthentication); 3105f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_DHCP, 3115f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogTriggersWithBadDhcp); 3125f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne assertEquals(NUM_LAST_RESORT_WATCHDOG_TRIGGERS_WITH_BAD_OTHER, 3135f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mDeserializedWifiMetrics.numLastResortWatchdogTriggersWithBadOther); 31449410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne assertEquals(TEST_RECORD_DURATION_SEC, 31549410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne mDeserializedWifiMetrics.recordDurationSec); 3161b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 3171b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 3181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 319c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * Assert deserialized metrics Scan Return Entry equals count 320c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 321c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public void assertScanReturnEntryEquals(int returnCode, int count) { 322c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < mDeserializedWifiMetrics.scanReturnEntries.length; i++) { 323c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (mDeserializedWifiMetrics.scanReturnEntries[i].scanReturnCode == returnCode) { 324c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertEquals(mDeserializedWifiMetrics.scanReturnEntries[i].scanResultsCount, count); 325c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return; 326c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 327c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 328c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertEquals(null, count); 329c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 330c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 331c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 332c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * Assert deserialized metrics SystemState entry equals count 333c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 334c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public void assertSystemStateEntryEquals(int state, boolean screenOn, int count) { 335c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < mDeserializedWifiMetrics.wifiSystemStateEntries.length; i++) { 336c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (mDeserializedWifiMetrics.wifiSystemStateEntries[i].wifiState == state 337c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne && mDeserializedWifiMetrics.wifiSystemStateEntries[i].isScreenOn == screenOn) { 338c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertEquals(mDeserializedWifiMetrics.wifiSystemStateEntries[i].wifiStateCount, 339c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne count); 340c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return; 341c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 342c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 343c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne assertEquals(null, count); 344c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 345c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 3461b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Combination of all other WifiMetrics unit tests, an internal-integration test, or functional 3471b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * test 3481b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 3491b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne @Test 3501b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void setMetricsSerializeDeserializeAssertMetricsSame() throws Exception { 3511b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne setAndIncrementMetrics(); 3521b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne startAndEndConnectionEventSucceeds(); 35349410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne dumpProtoAndDeserialize(); 3541b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne assertDeserializedMetricsCorrect(); 3552532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne assertEquals("mDeserializedWifiMetrics.connectionEvent.length", 35649410c13ba2284fb7c836fd3527dc526ea5681a0Glen Kuhne 2, mDeserializedWifiMetrics.connectionEvent.length); 3571b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //<TODO> test individual connectionEvents for correctness, 3581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne // check scanReturnEntries & wifiSystemStateEntries counts and individual elements 3591b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne // pending their implementation</TODO> 3601b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 361f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 362f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne private static final String SSID = "red"; 363f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne private static final int CONFIG_DTIM = 3; 364f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne private static final int NETWORK_DETAIL_WIFIMODE = 5; 365f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne private static final int NETWORK_DETAIL_DTIM = 7; 366f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne private static final int SCAN_RESULT_LEVEL = -30; 367f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne /** 368f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne * Test that WifiMetrics is correctly getting data from ScanDetail and WifiConfiguration 369f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne */ 370f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne @Test 371f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne public void testScanDetailAndWifiConfigurationUsage() throws Exception { 372f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Setup mock configs and scan details 373f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne NetworkDetail networkDetail = mock(NetworkDetail.class); 374f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne when(networkDetail.getWifiMode()).thenReturn(NETWORK_DETAIL_WIFIMODE); 375f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne when(networkDetail.getSSID()).thenReturn(SSID); 376f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne when(networkDetail.getDtimInterval()).thenReturn(NETWORK_DETAIL_DTIM); 377f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne ScanResult scanResult = mock(ScanResult.class); 378f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne scanResult.level = SCAN_RESULT_LEVEL; 379f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiConfiguration config = mock(WifiConfiguration.class); 380f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne config.SSID = "\"" + SSID + "\""; 381f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne config.dtimInterval = CONFIG_DTIM; 382f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiConfiguration.NetworkSelectionStatus networkSelectionStat = 383f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mock(WifiConfiguration.NetworkSelectionStatus.class); 384f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne when(networkSelectionStat.getCandidate()).thenReturn(scanResult); 385f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne when(config.getNetworkSelectionStatus()).thenReturn(networkSelectionStat); 386f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne ScanDetail scanDetail = mock(ScanDetail.class); 387f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne when(scanDetail.getNetworkDetail()).thenReturn(networkDetail); 388f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne when(scanDetail.getScanResult()).thenReturn(scanResult); 389f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 390f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Create a connection event using only the config 39196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(config, "Red", 39296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_NONE); 393f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 39496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 395f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 396f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 397f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Create a connection event using the config and a scan detail 39896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(config, "Green", 39996cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_NONE); 400f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.setConnectionScanDetail(scanDetail); 401f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 40296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 403f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 404f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 405f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Dump proto from mWifiMetrics and deserialize it to mDeserializedWifiMetrics 406f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne dumpProtoAndDeserialize(); 407f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 408f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Check that the correct values are being flowed through 409f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent.length, 2); 410f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent[0].routerFingerprint.dtim, 411f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne CONFIG_DTIM); 412f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent[0].signalStrength, SCAN_RESULT_LEVEL); 413f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent[1].routerFingerprint.dtim, 414f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne NETWORK_DETAIL_DTIM); 415f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent[1].signalStrength, 416f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne SCAN_RESULT_LEVEL); 417f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent[1].routerFingerprint.routerTechnology, 418f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne NETWORK_DETAIL_WIFIMODE); 419f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne } 420f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 421f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne /** 422f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne * Test that WifiMetrics is being cleared after dumping via proto 423f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne */ 424f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne @Test 425f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne public void testMetricsClearedAfterProtoRequested() throws Exception { 426f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne // Create 3 ConnectionEvents 42796cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "RED", 428f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 429f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 43096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 431f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 43296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "YELLOW", 433f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 434f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 43596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 436f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 43796cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "GREEN", 438f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 439f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 44096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 441f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 44296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "ORANGE", 443f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 444f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 44596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 446f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 447f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 448f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Dump proto and deserialize 449f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //This should clear all the metrics in mWifiMetrics, 450f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne dumpProtoAndDeserialize(); 451f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Check there are only 3 connection events 452f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent.length, 4); 453f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 454f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne // Create 2 ConnectionEvents 45596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "BLUE", 456f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 457f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 45896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 459f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 46096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mWifiMetrics.startConnectionEvent(null, "RED", 461f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); 462f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne mWifiMetrics.endConnectionEvent( 46396cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetrics.ConnectionEvent.FAILURE_NONE, 464f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 465f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 466f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Dump proto and deserialize 467f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne dumpProtoAndDeserialize(); 468f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne //Check there are only 2 connection events 469f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne assertEquals(mDeserializedWifiMetrics.connectionEvent.length, 2); 470f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne } 4711b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne} 472