blob: 513d445da4a5d215f38a347f958a88404590220d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 École Polytechnique de Montréal
*
* 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.incubator.virtual.machine.analysis.core.tests.overhead;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.LinuxTestCase.PunctualInfo;
import org.eclipse.tracecompass.analysis.os.linux.core.tid.TidAnalysisModule;
import org.eclipse.tracecompass.incubator.internal.virtual.machine.analysis.core.overhead.VmOverheadAnalysis;
import org.eclipse.tracecompass.incubator.virtual.machine.analysis.core.tests.shared.vm.VmTestCase;
import org.eclipse.tracecompass.incubator.virtual.machine.analysis.core.tests.shared.vm.VmTestExperiment;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.tests.shared.utils.IntervalInfo;
import org.eclipse.tracecompass.statesystem.core.tests.shared.utils.StateSystemTestUtils;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
* Test the {@link VmOverheadAnalysis} class
*
* @author Geneviève Bastien
*/
@RunWith(Parameterized.class)
public class OverheadAnalysisTest {
private final VmTestCase fTestCase;
private final TmfExperiment fExperiment;
/**
* Constructor
*
* @param testName
* A name for the test, to display in the header
* @param test
* A test case parameter for this test
*/
public OverheadAnalysisTest(String testName, VmTestCase test) {
super();
fTestCase = test;
fExperiment = test.getExperiment();
}
/**
* Clean up
*/
@After
public void tearDown() {
fExperiment.dispose();
}
/**
* @return The arrays of parameters
*/
@Parameters(name = "{index}: {0}")
public static Iterable<Object[]> getParameters() {
return Arrays.asList(new Object[][] {
{ VmTestExperiment.ONE_QEMUKVM.name(), new OneQemuKvmTestCase() },
});
}
private VmOverheadAnalysis setUp() {
TmfExperiment experiment = fExperiment;
/* Open the traces */
for (ITmfTrace trace : experiment.getTraces()) {
TmfTraceOpenedSignal signal = new TmfTraceOpenedSignal(this, experiment, null);
((TmfTrace) trace).traceOpened(signal);
TmfTraceManager.getInstance().traceOpened(signal);
}
/*
* TODO For now, make sure the LttngKernelAnalysis have been run for each trace
* before running the analysis. When event request precedence is implemented, we
* can remove this
*/
for (ITmfTrace trace : experiment.getTraces()) {
for (TidAnalysisModule module : TmfTraceUtils.getAnalysisModulesOfClass(trace, TidAnalysisModule.class)) {
module.schedule();
module.waitForCompletion();
}
}
/* End of TODO block */
TmfTraceOpenedSignal signal = new TmfTraceOpenedSignal(this, experiment, null);
experiment.traceOpened(signal);
TmfTraceManager.getInstance().traceOpened(signal);
VmOverheadAnalysis module = null;
for (VmOverheadAnalysis mod : TmfTraceUtils.getAnalysisModulesOfClass(experiment, VmOverheadAnalysis.class)) {
module = mod;
break;
}
assertNotNull(module);
module.schedule();
assertTrue(module.waitForCompletion());
return module;
}
/**
* Test that the analysis executes without problems
*/
@Test
public void testAnalysisExecution() {
VmOverheadAnalysis module = setUp();
assertNotNull(module.getStateSystem());
}
/**
* Test the intervals built by the state provider
*/
@Test
public void testStateProviderIntervalData() {
VmOverheadAnalysis module = setUp();
assertNotNull(module);
ITmfStateSystem ss = module.getStateSystem();
assertNotNull(ss);
for (@NonNull IntervalInfo info : fTestCase.getTestIntervals()) {
StateSystemTestUtils.testIntervalForAttributes(ss, info.getIntervals(), info.getAttributePath());
}
}
/**
* Test the data of attributes at punctual times
*/
@Test
public void testStateProviderPunctualData() {
VmOverheadAnalysis module = setUp();
assertNotNull(module);
ITmfStateSystem ss = module.getStateSystem();
assertNotNull(ss);
for (@NonNull
PunctualInfo info : fTestCase.getPunctualTestData()) {
StateSystemTestUtils.testValuesAtTime(ss, info.getTimestamp(), info.getValues());
}
}
}