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