blob: 107e58af091edd34089a9d72ea2515183a5a1fa7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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
*******************************************************************************/
package org.eclipse.tracecompass.analysis.os.linux.core.tests.latency;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.analysis.timing.core.statistics.IStatistics;
import org.eclipse.tracecompass.internal.analysis.os.linux.core.latency.SystemCallLatencyAnalysis;
import org.eclipse.tracecompass.internal.analysis.os.linux.core.latency.statistics.SystemCallLatencyStatisticsAnalysisModule;
import org.eclipse.tracecompass.segmentstore.core.ISegment;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for the system call statistics analysis
*
* @author Matthew Khouzam
*/
public class SyscallStatsAnalysisTest {
private ITmfTrace fTestTrace;
private SystemCallLatencyStatisticsAnalysisModule fSyscallStatsModule;
/**
* Create the fixtures
*/
@Before
public void setupAnalysis() {
KernelCtfTraceStub trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
fTestTrace = trace;
/* Make sure the Kernel analysis has run */
trace.traceOpened(new TmfTraceOpenedSignal(this, trace, null));
IAnalysisModule module = null;
for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, SystemCallLatencyAnalysis.class)) {
module = mod;
}
assertNotNull(module);
module.schedule();
module.waitForCompletion();
SystemCallLatencyStatisticsAnalysisModule syscallStatsModule = null;
for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, SystemCallLatencyStatisticsAnalysisModule.class)) {
syscallStatsModule = (SystemCallLatencyStatisticsAnalysisModule) mod;
}
assertNotNull(syscallStatsModule);
syscallStatsModule.schedule();
syscallStatsModule.waitForCompletion();
fSyscallStatsModule = syscallStatsModule;
}
/**
* Dispose everything
*/
@After
public void cleanup() {
final ITmfTrace testTrace = fTestTrace;
if (testTrace != null) {
testTrace.dispose();
}
}
/**
* This will load the analysis and test it. as it depends on Kernel, this
* test runs the kernel trace first then the analysis
*/
@Test
public void testSmallTraceSequential() {
final SystemCallLatencyStatisticsAnalysisModule syscallStatsModule = fSyscallStatsModule;
assertNotNull(syscallStatsModule);
IStatistics<@NonNull ISegment> totalStats = syscallStatsModule.getStatsTotal();
assertNotNull(totalStats);
assertEquals(1801, totalStats.getNbElements());
assertEquals(5904091700L, totalStats.getMax());
}
}