blob: a1974c9e3a91daab462602ec62d93c95f720b27c [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.traceevent.core.tests;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.analysis.callstack.TraceEventCallstackAnalysis;
import org.eclipse.tracecompass.incubator.internal.traceevent.core.trace.TraceEventTrace;
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.StateIntervalStub;
import org.eclipse.tracecompass.statesystem.core.tests.shared.utils.StateSystemTestUtils;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestHelper;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.junit.After;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
/**
* Test the trace event callstack for various traces
*
* @author Geneviève Bastien
*/
public class CallStackStateProviderTest {
private ITmfTrace fTrace;
/**
* Dispose the trace used in this test
*/
@After
public void disposeTrace() {
ITmfTrace trace = fTrace;
if (trace != null) {
trace.dispose();
}
}
/**
* Test the 'b' and 'e' events
*
* @throws Exception
* Exception thrown by initialization
*/
@Test
public void testEventsbe() throws Exception {
TraceEventCallstackAnalysis csModule = getTraceEventModule("traces/nestable_async_annotation.json");
try {
ITmfStateSystem ss = csModule.getStateSystem();
assertNotNull(ss);
Set<@NonNull IntervalInfo> intervalInfos = new HashSet<>();
// First process, request bar
intervalInfos.add(new IntervalInfo(ImmutableList.of(new StateIntervalStub(10000, 99999, "REQUEST_BAR"),
new StateIntervalStub(100000, 200000, (Object) null)),
"Processes", "26037", "26065", "CallStack", "1"));
intervalInfos.add(new IntervalInfo(ImmutableList.of(new StateIntervalStub(10000, 19999, (Object) null),
new StateIntervalStub(20000, 29999, "URL_REQUEST_DELEGATE"),
new StateIntervalStub(30000, 39999, (Object) null),
new StateIntervalStub(40000, 69999, "URL_REQUEST_START_JOB"),
new StateIntervalStub(70000, 79999, (Object) null),
new StateIntervalStub(80000, 99999, "URL_REQUEST_DELEGATE_UNMATCHED_BEGIN"),
new StateIntervalStub(100000, 200000, (Object) null)),
"Processes", "26037", "26065", "CallStack", "2"));
intervalInfos.add(new IntervalInfo(ImmutableList.of(new StateIntervalStub(10000, 19999, (Object) null),
new StateIntervalStub(20000, 39999, (Object) null),
new StateIntervalStub(40000, 49999, (Object) null),
new StateIntervalStub(50000, 59999, "URL_REQUEST_INNER"),
new StateIntervalStub(60000, 79999, (Object) null),
new StateIntervalStub(80000, 200000, (Object) null)),
"Processes", "26037", "26065", "CallStack", "3"));
// Second process, request foo
intervalInfos.add(new IntervalInfo(ImmutableList.of(new StateIntervalStub(10000, 109999, (Object) null),
new StateIntervalStub(110000, 199999, "REQUEST_FOO"),
new StateIntervalStub(200000, 200000, (Object) null)),
"Processes", "26037", "26066", "CallStack", "1"));
intervalInfos.add(new IntervalInfo(ImmutableList.of(new StateIntervalStub(10000, 109999, (Object) null),
new StateIntervalStub(110000, 129999, "URL_REQUEST_DELEGATE_UNMATCHED_END"),
new StateIntervalStub(130000, 139999, (Object) null),
new StateIntervalStub(140000, 169999, "URL_REQUEST_START_JOB"),
new StateIntervalStub(170000, 179999, (Object) null),
new StateIntervalStub(180000, 189999, "URL_REQUEST_DELEGATE"),
new StateIntervalStub(190000, 200000, (Object) null)),
"Processes", "26037", "26066", "CallStack", "2"));
intervalInfos.add(new IntervalInfo(ImmutableList.of(new StateIntervalStub(10000, 139999, (Object) null),
new StateIntervalStub(140000, 149999, (Object) null),
new StateIntervalStub(150000, 159999, "URL_REQUEST_INNER"),
new StateIntervalStub(160000, 179999, (Object) null),
new StateIntervalStub(180000, 200000, (Object) null)),
"Processes", "26037", "26066", "CallStack", "3"));
StateSystemTestUtils.testIntervals(ss, intervalInfos);
} finally {
csModule.dispose();
}
}
private @NonNull TraceEventCallstackAnalysis getTraceEventModule(String path) throws Exception {
TraceEventTrace trace = new TraceEventTrace();
TraceEventCallstackAnalysis csModule = null;
try {
IStatus validate = trace.validate(null, path);
assertTrue(validate.getMessage(), validate.isOK());
trace.initTrace(null, path, ITmfEvent.class);
csModule = new TraceEventCallstackAnalysis();
assertTrue(csModule.setTrace(trace));
assertTrue(TmfTestHelper.executeAnalysis(csModule));
fTrace = trace;
return csModule;
} catch (TmfTraceException | TmfAnalysisException e) {
trace.dispose();
if (csModule != null) {
csModule.dispose();
}
fTrace = null;
throw e;
}
}
}