blob: fe66531be92c3864f45fc579c2bb2348958e6b4b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 É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
*
* Contributors:
* Geneviève Bastien - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.tests.statesystem;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.concurrent.TimeUnit;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.AttributeNotFoundException;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestExperimentAnalysis;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfExperimentStub;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.rules.Timeout;
/**
* Test the {@link TmfStateSystemAnalysisModule} class for an experiment
*
* @author Geneviève Bastien
*/
public class ExperimentStateSystemModuleTest {
/** Time-out tests after some time */
@Rule
public TestRule globalTimeout = new Timeout(1, TimeUnit.MINUTES);
/** ID of the test state system analysis module */
public static final String MODULE_SS = "org.eclipse.linuxtools.tmf.core.tests.experiment";
private TmfStateSystemAnalysisModule fModule;
private TmfExperiment fExperiment;
/**
* Setup test trace
*/
@Before
public void setupTraces() {
ITmfTrace trace = TmfTestTrace.A_TEST_10K.getTrace();
TmfSignalManager.deregister(trace);
ITmfTrace trace2 = TmfTestTrace.A_TEST_10K2.getTrace();
TmfSignalManager.deregister(trace2);
ITmfTrace[] traces = { trace, trace2 };
fExperiment = new TmfExperimentStub("Test", traces, 1000);
fExperiment.traceOpened(new TmfTraceOpenedSignal(this, fExperiment, null));
fModule = (TmfStateSystemAnalysisModule) fExperiment.getAnalysisModule(MODULE_SS);
assertNotNull(fModule);
}
/**
* Some tests use traces, let's clean them here
*/
@After
public void cleanupTraces() {
fExperiment.dispose();
}
/**
* Test the state system module execution and result
*/
@Test
public void testSsModule() {
ITmfStateSystem ss = fModule.getStateSystem();
assertNull(ss);
fModule.schedule();
if (fModule.waitForCompletion()) {
ss = fModule.getStateSystem();
assertNotNull(ss);
try {
int quark = ss.getQuarkAbsolute(TestExperimentAnalysis.TRACE_QUARK_NAME);
ITmfStateInterval interval = ss.querySingleState(ss.getCurrentEndTime(), quark);
assertEquals(2, interval.getStateValue().unboxInt());
} catch (AttributeNotFoundException e) {
fail("The quark for number of traces does not exist");
} catch (StateSystemDisposedException e) {
fail("Error: state system disposed");
}
} else {
fail("Module did not complete properly");
}
}
/**
* Make sure that the state system is initialized after calling
* {@link TmfStateSystemAnalysisModule#waitForInitialization()}.
*/
@Test
public void testInitialization() {
assertNull(fModule.getStateSystem());
fModule.schedule();
assertTrue("Initialization succeeded", fModule.waitForInitialization());
assertNotNull(fModule.getStateSystem());
}
}