blob: f678afbbfb2862a1a59dec9db82a9d6918992457 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 É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 v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.tracecompass.incubator.scripting.core.tests.analysis;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.incubator.scripting.core.analysis.AnalysisScriptingModule;
import org.eclipse.tracecompass.incubator.scripting.core.analysis.ScriptedAnalysis;
import org.eclipse.tracecompass.incubator.scripting.core.tests.stubs.ScriptingTestUtils;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.rules.Timeout;
import com.google.common.collect.Iterables;
/**
* Test the {@link AnalysisScriptingModule}'s specific objects and methods
*
* @author Geneviève Bastien
*/
public class AnalysisModuleTest {
private static final @NonNull String ANALYSIS_NAME = "scriptAnalysisTest";
/** Time-out tests after 1 minute. */
@Rule
public TestRule globalTimeout = new Timeout(5, TimeUnit.MINUTES);
/**
* Test the event iterator
*/
@Test
public void testEventIterator() {
AnalysisScriptingModule scriptModule = new AnalysisScriptingModule();
ITmfTrace trace = ScriptingTestUtils.getTrace();
try {
ScriptedAnalysis analysis = scriptModule.createScriptedAnalysis(trace, ANALYSIS_NAME);
assertNotNull(analysis);
Iterator<ITmfEvent> eventIterator = analysis.getEventIterator();
assertNotNull(eventIterator);
int count = 0;
while (eventIterator.hasNext()) {
eventIterator.next();
count++;
}
// Make sure it parsed the whole trace
assertEquals(36, count);
} finally {
trace.dispose();
}
}
/**
* Test the
* {@link AnalysisScriptingModule#getTraceAnalysis(ITmfTrace, String)}
* method
*/
@Test
public void testGetAnalysis() {
AnalysisScriptingModule scriptModule = new AnalysisScriptingModule();
ITmfTrace trace = ScriptingTestUtils.getTrace();
TmfExperiment exp = null;
try {
Iterable<@NonNull IAnalysisModule> analysisModules = trace.getAnalysisModules();
assertTrue(Iterables.size(analysisModules) > 0);
// Map to save trace modules
Map<String, IAnalysisModule> traceModules = new HashMap<>();
for (IAnalysisModule module : analysisModules) {
// Get the module by ID
IAnalysisModule analysis = scriptModule.getTraceAnalysis(trace, module.getId());
assertEquals("Analysis by ID " + module.getId(), module, analysis);
// Get the module by name, don't assert equality, as some
// analysis may have the same name as others
analysis = scriptModule.getTraceAnalysis(trace, module.getName());
assertNotNull("Analysis by name " + module.getName(), analysis);
// Add the module to the map
traceModules.put(module.getId(), module);
}
// Add the trace to an experiment and make sure all those analyses
// are found
ITmfTrace[] traces = new ITmfTrace[] { trace };
exp = new TmfExperiment(ITmfEvent.class, "test-exp", traces,
TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
exp.traceOpened(new TmfTraceOpenedSignal(this, exp, null));
Iterable<@NonNull IAnalysisModule> experimentModules = exp.getAnalysisModules();
assertTrue(Iterables.size(experimentModules) > 0);
for (IAnalysisModule module : experimentModules) {
// Get the module by ID
IAnalysisModule analysis = scriptModule.getTraceAnalysis(exp, module.getId());
assertEquals("Experiment analysis by ID " + module.getId(), module, analysis);
// Get the module by name, don't assert equality, as some
// analysis may have the same name as others
analysis = scriptModule.getTraceAnalysis(exp, module.getName());
assertNotNull("Experiment analysis by name " + module.getName(), analysis);
// Remove this analysis from the trace's, as the experiment also
// has an analysis with this name, and it's the one that will be
// returned by the method
traceModules.remove(module.getId());
}
// Get the trace-only modules from the experiment
assertTrue(!traceModules.isEmpty());
for (IAnalysisModule module : traceModules.values()) {
// Get the module by ID
IAnalysisModule analysis = scriptModule.getTraceAnalysis(exp, module.getId());
assertEquals("Trace-only analysis by ID " + module.getId(), module, analysis);
// Get the module by name, don't assert equality, as some
// analysis may have the same name as others
analysis = scriptModule.getTraceAnalysis(exp, module.getName());
assertNotNull("Trace-only analysis by name " + module.getName(), analysis);
}
} finally {
trace.dispose();
if (exp != null) {
exp.dispose();
}
}
}
}