LastMileLoggerTest.java revision 3355eb4392aabfae9453e7d6f11d9f0620bf5dae
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;
281716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawalimport android.test.suitebuilder.annotation.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
741716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void ctorDoesNotCrashEvenIfReleaseFileIsMissing() throws Exception {
751716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        mTraceReleaseFile.delete();
761716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        new LastMileLogger(mWifiInjector, mTraceDataFile.getPath(), mTraceEnableFile.getPath(),
771716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal                mTraceReleaseFile.getPath());
781716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        verify(mLog).warn(contains("Failed"));
791716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
801716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
811716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
821716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventStartedEnablesTracing() throws Exception {
833f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
843f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
851716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertEquals("1", IoUtils.readFileAsString(mTraceEnableFile.getPath()));
861716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
871716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
881716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
893355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    public void connectionEventStartedDoesNotEnableTracingForInvalidConnectionId()
903355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal            throws Exception {
913355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
923355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                -1, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
933355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath()));
943355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    }
953355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal
963355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    @Test
971716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventStartedDoesNotCrashIfEnableFileIsMissing() throws Exception {
981716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        mTraceEnableFile.delete();
993f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1003f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1011716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1021716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1031716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1041716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventStartedDoesNotCrashOnRepeatedCalls() throws Exception {
1053f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1063f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1073f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1083f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1091716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1101716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1111716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1121716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventSucceededDisablesTracing() throws Exception {
1133f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1143f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED);
1151716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath()));
1161716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1171716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1181716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1191716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventSucceededDoesNotCrashIfEnableFileIsMissing() throws Exception {
1201716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        mTraceEnableFile.delete();
1213f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1223f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED);
1231716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1241716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1251716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1261716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventSucceededDoesNotCrashOnRepeatedCalls() throws Exception {
1273f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1283f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED);
1293f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1303f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED);
1311716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1321716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1331716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1343355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    public void connectionEventFailedDisablesTracingWhenPendingFails() throws Exception {
1353355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
1363355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1373355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
1383355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                    FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1393355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath()));
1403355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    }
1413355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal
1423355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    @Test
1433355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    public void connectionEventFailedDoesNotDisableTracingOnFailureOfStaleConnection()
1443355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal            throws Exception {
1453355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
1463355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1473355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
1483355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                FAKE_CONNECTION_ID + 1, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1493f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1503f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1513355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertEquals("1", IoUtils.readFileAsString(mTraceEnableFile.getPath()));
1523355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    }
1533355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal
1543355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    @Test
1553355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    public void connectionEventFailedDisablesTracingOnFailureOfFutureConnection()
1563355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal            throws Exception {
1573355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
1583355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1593355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
1603355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                FAKE_CONNECTION_ID + 1, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1611716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertEquals("0", IoUtils.readFileAsString(mTraceEnableFile.getPath()));
1621716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1631716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1641716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1651716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventFailedDoesNotCrashIfEnableFileIsMissing() throws Exception {
1661716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        mTraceEnableFile.delete();
1673f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1683f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1691716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1701716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1711716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1721716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventFailedDoesNotCrashIfDataFileIsMissing() throws Exception {
1731716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        mTraceDataFile.delete();
1743f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1753f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1761716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1771716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1781716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1791716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void connectionEventFailedDoesNotCrashOnRepeatedCalls() throws Exception {
1803f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1813f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1823f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1833f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1841716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
1851716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
1861716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
1871716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpShowsFailureTrace() throws Exception {
1883f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1893f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
1901716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect");
1913f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
1923f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
1933355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertTrue(getDumpString().contains("--- Last failed"));
1943355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertTrue(getDumpString().contains("rdev_connect"));
1953355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    }
1963355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal
1973355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    @Test
1983355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal    public void dumpShowsFailureTraceEvenIfConnectionIdIncreases() throws Exception {
1993355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
2003355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2013355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect");
2023355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        mLastMileLogger.reportConnectionEvent(
2033355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal                FAKE_CONNECTION_ID + 1, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
2043355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertTrue(getDumpString().contains("--- Last failed"));
2051716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(getDumpString().contains("rdev_connect"));
2061716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2071716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2081716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
2091716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpShowsPendingConnectionTrace() throws Exception {
2103f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2113f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2121716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect");
2133355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertTrue(getDumpString().contains("No last mile log for \"Last failed"));
2143355eb4392aabfae9453e7d6f11d9f0620bf5daemukesh agrawal        assertTrue(getDumpString().contains("--- Latest"));
2151716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(getDumpString().contains("rdev_connect"));
2161716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2171716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2181716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
2191716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpShowsLastFailureTraceAndPendingConnectionTrace() throws Exception {
2203f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2213f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2221716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #1");
2233f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2243f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
2253f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2263f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2271716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #2");
2281716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2291716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        String dumpString = getDumpString();
2301716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(dumpString.contains("rdev_connect try #1"));
2311716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(dumpString.contains("rdev_connect try #2"));
2321716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2331716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2341716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
2351716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpShowsLastFailureTraceAndCurrentConnectionTrace() throws Exception {
2363f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2373f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2381716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #1");
2393f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2403f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
2413f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2423f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2431716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect try #2");
2443f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2453f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_SUCCEEDED);
2461716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2471716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        String dumpString = getDumpString();
2481716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(dumpString.contains("rdev_connect try #1"));
2491716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(dumpString.contains("rdev_connect try #2"));
2501716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2511716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2521716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
2531716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpDoesNotClearLastFailureData() throws Exception {
2543f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2553f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2561716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect");
2573f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2583f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_FAILED);
2591716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2601716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        getDumpString();
2611716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        String dumpString = getDumpString();
2621716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(dumpString.contains("rdev_connect"));
2631716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2641716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2651716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
2661716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpDoesNotClearPendingConnectionTrace() throws Exception {
2673f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal        mLastMileLogger.reportConnectionEvent(
2683f2187fdcc3ed55c909cb4cdee589744655d3243mukesh agrawal                FAKE_CONNECTION_ID, BaseWifiDiagnostics.CONNECTION_EVENT_STARTED);
2691716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        FileUtils.stringToFile(mTraceDataFile.getPath(), "rdev_connect");
2701716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2711716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        getDumpString();
2721716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        String dumpString = getDumpString();
2731716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        assertTrue(dumpString.contains("rdev_connect"));
2741716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2751716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2761716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
2771716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpDoesNotCrashIfDataFileIsEmpty() throws Exception {
2781716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        getDumpString();
2791716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2801716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2811716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    @Test
2821716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    public void dumpDoesNotCrashIfDataFileIsMissing() throws Exception {
2831716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        mTraceDataFile.delete();
2841716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        getDumpString();
2851716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
2861716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2871716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private static final String TRACE_DATA_PREFIX = "last-mile-logger-trace-data";
2881716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private static final String TRACE_ENABLE_PREFIX = "last-mile-logger-trace-enable";
2891716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private static final String TRACE_RELEASE_PREFIX = "last-mile-logger-trace-release";
2901716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private LastMileLogger mLastMileLogger;
2911716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private File mTraceDataFile;
2921716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private File mTraceEnableFile;
2931716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private File mTraceReleaseFile;
2941716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal
2951716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    private String getDumpString() {
2961716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        StringWriter sw = new StringWriter();
2971716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        PrintWriter pw = new PrintWriter(sw);
2981716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        mLastMileLogger.dump(pw);
2991716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal        return sw.toString();
3001716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal    }
3011716aa7ad8e00a41980c4120c2104b25fe36630emukesh agrawal}
302