11716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal/* 21716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * Copyright (C) 2017 The Android Open Source Project 31716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * 41716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * Licensed under the Apache License, Version 2.0 (the "License"); 51716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * you may not use this file except in compliance with the License. 61716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * You may obtain a copy of the License at 71716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * 81716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * http://www.apache.org/licenses/LICENSE-2.0 91716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * 101716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * Unless required by applicable law or agreed to in writing, software 111716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * distributed under the License is distributed on an "AS IS" BASIS, 121716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * See the License for the specific language governing permissions and 141716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * limitations under the License. 151716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal */ 161716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 171716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalpackage com.android.server.wifi; 181716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 191716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport static org.junit.Assert.assertEquals; 201716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport static org.junit.Assert.assertTrue; 211716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport static org.mockito.Matchers.anyString; 221716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport static org.mockito.Matchers.contains; 231716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport static org.mockito.Mockito.verify; 241716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport static org.mockito.Mockito.verifyZeroInteractions; 251716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport static org.mockito.Mockito.when; 261716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 271716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport android.os.FileUtils; 287f2a1e30dd5d14320ffc7b185ac25fdb79fe52b0Etan Cohenimport android.support.test.filters.SmallTest; 291716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 301716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport libcore.io.IoUtils; 311716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 321716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport org.junit.Before; 331716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport org.junit.Test; 341716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport org.mockito.Mock; 351716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport org.mockito.MockitoAnnotations; 361716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport org.mockito.Spy; 371716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 381716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport java.io.File; 391716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport java.io.PrintWriter; 401716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport java.io.StringWriter; 411716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 421716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal/** 431716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal * Unit tests for {@link LastMileLogger}. 441716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal */ 451716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal@SmallTest 461716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalpublic class LastMileLoggerTest { 471716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Mock WifiInjector mWifiInjector; 481716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Spy FakeWifiLog mLog; 493f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal private static final long FAKE_CONNECTION_ID = 1; 501716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 511716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Before 521716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void setUp() throws Exception { 531716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal MockitoAnnotations.initMocks(this); 541716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal when(mWifiInjector.makeLog(anyString())).thenReturn(mLog); 551716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceDataFile = File.createTempFile(TRACE_DATA_PREFIX, null); 561716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceEnableFile = File.createTempFile(TRACE_ENABLE_PREFIX, null); 571716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceReleaseFile = File.createTempFile(TRACE_RELEASE_PREFIX, null); 581716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceDataFile.deleteOnExit(); 591716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceEnableFile.deleteOnExit(); 601716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceReleaseFile.deleteOnExit(); 613355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FileUtils.stringToFile(mTraceEnableFile, "0"); 621716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mLastMileLogger = new LastMileLogger(mWifiInjector, mTraceDataFile.getPath(), 631716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceEnableFile.getPath(), mTraceReleaseFile.getPath()); 641716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 651716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 661716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 671716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void ctorDoesNotCrash() throws Exception { 681716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal new LastMileLogger(mWifiInjector, mTraceDataFile.getPath(), mTraceEnableFile.getPath(), 691716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceReleaseFile.getPath()); 701716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal verifyZeroInteractions(mLog); 711716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 721716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 731716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 742c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal public void connectionEventStartedEnablesTracing() throws Exception { 752c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal mLastMileLogger.reportConnectionEvent( 762c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 772c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal assertEquals("1", IoUtils.readFileAsString(mTraceEnableFile.getPath())); 782c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal } 792c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal 802c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal @Test 812c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal public void connectionEventStartedDoesNotCrashIfReleaseFileIsMissing() throws Exception { 821716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceReleaseFile.delete(); 832c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal mLastMileLogger.reportConnectionEvent( 842c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 852c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal verify(mLog).warn(contains("Failed to open free_buffer")); 861716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 871716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 881716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 892c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal public void connectionEventStartedDoesNotEnableTracingIfReleaseFileIsMissing() 902c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal throws Exception { 912c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal mTraceReleaseFile.delete(); 923f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 933f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 942c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath())); 952c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal } 962c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal 972c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal @Test 982c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal public void connectionEventStartedDoesNotAttemptToReopenReleaseFile() throws Exception { 992c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal mLastMileLogger.reportConnectionEvent( 1002c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1012c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal 1022c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // This is a rather round-about way of verifying that we don't attempt to re-open 1032c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // the file. Namely: if we delete the |release| file, and CONNECTION_EVENT_STARTED 1042c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // _did_ re-open the file, then we'd log an error message. Since the test is deleting the 1052c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // |release| file, the absence of a warning message means that we didn't try to open the 1062c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // file again. 1072c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // 1082c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // A more direct test would require the use of a factory for the creation of the 1092c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal // FileInputStream. 1102c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal mTraceReleaseFile.delete(); 1112c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal mLastMileLogger.reportConnectionEvent( 1122c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1132c77fc78df8f1e3175c3cd184da1e8301aee75c8mukesh agrawal verifyZeroInteractions(mLog); 1141716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1151716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1161716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 1173355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal public void connectionEventStartedDoesNotEnableTracingForInvalidConnectionId() 1183355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal throws Exception { 1193355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 1203355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal -1, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1213355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath())); 1223355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal } 1233355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal 1243355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal @Test 1251716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventStartedDoesNotCrashIfEnableFileIsMissing() throws Exception { 1261716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceEnableFile.delete(); 1273f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1283f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1291716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1301716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1311716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 1321716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventStartedDoesNotCrashOnRepeatedCalls() throws Exception { 1333f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1343f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1353f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1363f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1371716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1381716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1391716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 1401716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventSucceededDisablesTracing() throws Exception { 1413f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1423f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED); 1431716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath())); 1441716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1451716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1461716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 1471716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventSucceededDoesNotCrashIfEnableFileIsMissing() throws Exception { 1481716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceEnableFile.delete(); 1493f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1503f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED); 1511716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1521716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1531716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 1541716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventSucceededDoesNotCrashOnRepeatedCalls() throws Exception { 1553f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1563f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED); 1573f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1583f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED); 1591716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1601716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1611716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 1623355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal public void connectionEventFailedDisablesTracingWhenPendingFails() throws Exception { 1633355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 1643355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1653355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 1663355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 1673355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath())); 1683355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal } 1693355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal 1703355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal @Test 1713355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal public void connectionEventFailedDoesNotDisableTracingOnFailureOfStaleConnection() 1723355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal throws Exception { 1733355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 1743355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1753355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 1763355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID + 1, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1773f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1783f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 1793355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertEquals("1", IoUtils.readFileAsString(mTraceEnableFile.getPath())); 1803355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal } 1813355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal 1823355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal @Test 1833355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal public void connectionEventFailedDisablesTracingOnFailureOfFutureConnection() 1843355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal throws Exception { 1853355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 1863355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 1873355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 1883355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID + 1, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 1891716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath())); 1901716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1911716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1921716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 1931716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventFailedDoesNotCrashIfEnableFileIsMissing() throws Exception { 1941716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceEnableFile.delete(); 1953f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 1963f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 1971716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 1981716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 1991716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2001716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventFailedDoesNotCrashIfDataFileIsMissing() throws Exception { 2011716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceDataFile.delete(); 2023f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2033f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2041716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 2051716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2061716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2071716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void connectionEventFailedDoesNotCrashOnRepeatedCalls() throws Exception { 2083f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2093f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2103f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2113f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2121716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 2131716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2141716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2151716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpShowsFailureTrace() throws Exception { 2163f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2173f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2181716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect"); 2193f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2203f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2213355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertTrue(getDumpString().contains("--- Last failed")); 2223355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertTrue(getDumpString().contains("rdev_connect")); 2233355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal } 2243355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal 2253355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal @Test 2263355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal public void dumpShowsFailureTraceEvenIfConnectionIdIncreases() throws Exception { 2273355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 2283355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2293355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect"); 2303355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal mLastMileLogger.reportConnectionEvent( 2313355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal FAKE_CONNECTION_ID + 1, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2323355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertTrue(getDumpString().contains("--- Last failed")); 2331716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(getDumpString().contains("rdev_connect")); 2341716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 2351716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2361716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2371716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpShowsPendingConnectionTrace() throws Exception { 2383f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2393f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2401716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect"); 2413355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertTrue(getDumpString().contains("No last mile log for \"Last failed")); 2423355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal assertTrue(getDumpString().contains("--- Latest")); 2431716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(getDumpString().contains("rdev_connect")); 2441716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 2451716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2461716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2471716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpShowsLastFailureTraceAndPendingConnectionTrace() throws Exception { 2483f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2493f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2501716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #1"); 2513f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2523f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2533f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2543f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2551716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #2"); 2561716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2571716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal String dumpString = getDumpString(); 2581716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(dumpString.contains("rdev_connect try #1")); 2591716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(dumpString.contains("rdev_connect try #2")); 2601716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 2611716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2621716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2631716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpShowsLastFailureTraceAndCurrentConnectionTrace() throws Exception { 2643f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2653f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2661716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #1"); 2673f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2683f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2693f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2703f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2711716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #2"); 2723f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2733f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED); 2741716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2751716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal String dumpString = getDumpString(); 2761716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(dumpString.contains("rdev_connect try #1")); 2771716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(dumpString.contains("rdev_connect try #2")); 2781716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 2791716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2801716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2811716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpDoesNotClearLastFailureData() throws Exception { 2823f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2833f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2841716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect"); 2853f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2863f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED); 2871716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2881716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal getDumpString(); 2891716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal String dumpString = getDumpString(); 2901716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(dumpString.contains("rdev_connect")); 2911716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 2921716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2931716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 2941716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpDoesNotClearPendingConnectionTrace() throws Exception { 2953f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal mLastMileLogger.reportConnectionEvent( 2963f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED); 2971716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect"); 2981716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 2991716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal getDumpString(); 3001716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal String dumpString = getDumpString(); 3011716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal assertTrue(dumpString.contains("rdev_connect")); 3021716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 3031716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 3041716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 3051716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpDoesNotCrashIfDataFileIsEmpty() throws Exception { 3061716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal getDumpString(); 3071716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 3081716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 3091716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal @Test 3101716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal public void dumpDoesNotCrashIfDataFileIsMissing() throws Exception { 3111716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mTraceDataFile.delete(); 3121716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal getDumpString(); 3131716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 3141716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 3151716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private static final String TRACE_DATA_PREFIX = "last-mile-logger-trace-data"; 3161716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private static final String TRACE_ENABLE_PREFIX = "last-mile-logger-trace-enable"; 3171716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private static final String TRACE_RELEASE_PREFIX = "last-mile-logger-trace-release"; 3181716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private LastMileLogger mLastMileLogger; 3191716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private File mTraceDataFile; 3201716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private File mTraceEnableFile; 3211716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private File mTraceReleaseFile; 3221716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal 3231716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal private String getDumpString() { 3241716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal StringWriter sw = new StringWriter(); 3251716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal PrintWriter pw = new PrintWriter(sw); 3261716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal mLastMileLogger.dump(pw); 3271716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal return sw.toString(); 3281716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal } 3291716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal} 330