| /******************************************************************************* |
| * Copyright (c) 2012, 2015 Ericsson |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License 2.0 which |
| * accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Alexandre Montplaisir - Initial API and implementation |
| ******************************************************************************/ |
| |
| package org.eclipse.tracecompass.tmf.ctf.core.tests.event; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import java.util.Map; |
| import java.util.concurrent.TimeUnit; |
| |
| import org.eclipse.jdt.annotation.NonNull; |
| import org.eclipse.tracecompass.ctf.core.CTFStrings; |
| import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem; |
| import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace; |
| import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException; |
| import org.eclipse.tracecompass.tmf.core.statistics.ITmfStatistics; |
| import org.eclipse.tracecompass.tmf.core.statistics.TmfStateStatistics; |
| import org.eclipse.tracecompass.tmf.core.statistics.TmfStatisticsEventTypesModule; |
| import org.eclipse.tracecompass.tmf.core.statistics.TmfStatisticsTotalsModule; |
| import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; |
| import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.TestRule; |
| import org.junit.rules.Timeout; |
| |
| /** |
| * Unit tests for handling of lost events by the statistics backends. |
| * |
| * @author Alexandre Montplaisir |
| */ |
| public class CtfTmfLostEventStatisticsTest { |
| |
| /** Time-out tests after 1 minute */ |
| @Rule |
| public TestRule globalTimeout = new Timeout(1, TimeUnit.MINUTES); |
| |
| /**Test trace with lost events */ |
| private static final @NonNull CtfTestTrace lostEventsTrace = CtfTestTrace.HELLO_LOST; |
| |
| private static ITmfTrace fTrace; |
| |
| /** The statistics back-end object for the trace with lost events */ |
| private static ITmfStatistics fStats; |
| |
| /* The two analysis modules needed for fStats */ |
| private static TmfStatisticsTotalsModule fTotalsMod; |
| private static TmfStatisticsEventTypesModule fEventTypesMod; |
| |
| // ------------------------------------------------------------------------ |
| // Maintenance |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Test setup |
| */ |
| @BeforeClass |
| public static void setUp() { |
| ITmfTrace trace = CtfTmfTestTraceUtils.getTrace(lostEventsTrace); |
| fTrace = trace; |
| |
| /* Prepare the two analysis-backed state systems */ |
| fTotalsMod = new TmfStatisticsTotalsModule(); |
| fEventTypesMod = new TmfStatisticsEventTypesModule(); |
| try { |
| fTotalsMod.setTrace(trace); |
| fEventTypesMod.setTrace(trace); |
| } catch (TmfAnalysisException e) { |
| fail(); |
| } |
| |
| fTotalsMod.schedule(); |
| fEventTypesMod.schedule(); |
| assertTrue(fTotalsMod.waitForCompletion()); |
| assertTrue(fEventTypesMod.waitForCompletion()); |
| |
| ITmfStateSystem totalsSS = fTotalsMod.getStateSystem(); |
| ITmfStateSystem eventTypesSS = fEventTypesMod.getStateSystem(); |
| assertNotNull(totalsSS); |
| assertNotNull(eventTypesSS); |
| |
| fStats = new TmfStateStatistics(totalsSS, eventTypesSS); |
| } |
| |
| /** |
| * Test cleanup |
| */ |
| @AfterClass |
| public static void tearDown() { |
| fStats.dispose(); |
| fTotalsMod.dispose(); |
| fEventTypesMod.dispose(); |
| fTrace.dispose(); |
| } |
| |
| // ------------------------------------------------------------------------ |
| // Test methods |
| // ------------------------------------------------------------------------ |
| |
| /* |
| * Trace start = 1376592664828559410 |
| * Trace end = 1376592665108210547 |
| */ |
| |
| private static final long rangeStart = 1376592664900000000L; |
| private static final long rangeEnd = 1376592665000000000L; |
| |
| /** |
| * Test the total number of "real" events. Make sure the lost events aren't |
| * counted in the total. |
| */ |
| @Test |
| public void testLostEventsTotals() { |
| long realEvents = fStats.getEventsTotal(); |
| assertEquals(32300, realEvents); |
| } |
| |
| /** |
| * Test the number of real events in a given range. Lost events shouldn't be |
| * counted. |
| */ |
| @Test |
| public void testLostEventsTotalInRange() { |
| long realEventsInRange = fStats.getEventsInRange(rangeStart, rangeEnd); |
| assertEquals(11209L, realEventsInRange); |
| } |
| |
| /** |
| * Test the total number of lost events reported in the trace. |
| */ |
| @Test |
| public void testLostEventsTypes() { |
| Map<String, Long> events = fStats.getEventTypesTotal(); |
| Long lostEvents = events.get(CTFStrings.LOST_EVENT_NAME); |
| assertEquals(Long.valueOf(967700L), lostEvents); |
| } |
| |
| /** |
| * Test the number of lost events reported in a given range. |
| */ |
| @Test |
| public void testLostEventsTypesInRange() { |
| Map<String, Long> eventsInRange = fStats.getEventTypesInRange(rangeStart, rangeEnd); |
| Long lostEventsInRange = eventsInRange.get(CTFStrings.LOST_EVENT_NAME); |
| assertNotNull(lostEventsInRange); |
| assertEquals(365752L, lostEventsInRange.longValue()); |
| } |
| } |