blob: 6699226eb0c14536b5e05e0463df0875dadd6faa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Ericsson
*
* 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
*
* Contributors:
* Alexandre Montplaisir - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.tests.trace;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Collection;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfCpuAspect;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.tests.analysis.AnalysisManagerTest;
import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
/**
* Test suite for {@link TmfTraceUtils}
*/
public class TmfTraceUtilsTest {
private static final TmfTestTrace TEST_TRACE = TmfTestTrace.A_TEST_10K;
private TmfTrace fTrace;
// ------------------------------------------------------------------------
// Test trace class definition
// ------------------------------------------------------------------------
private static class TmfTraceStubWithAspects extends TmfTraceStub {
private static final @NonNull Collection<ITmfEventAspect> EVENT_ASPECTS;
static {
ImmutableList.Builder<ITmfEventAspect> builder = ImmutableList.builder();
builder.add(new TmfCpuAspect() {
@Override
public Integer resolve(ITmfEvent event) {
return 1;
}
});
builder.addAll(TmfTrace.BASE_ASPECTS);
@SuppressWarnings("null")
@NonNull Collection<ITmfEventAspect> ret = builder.build();
EVENT_ASPECTS = ret;
}
public TmfTraceStubWithAspects(String path) throws TmfTraceException {
super(path, ITmfTrace.DEFAULT_TRACE_CACHE_SIZE, false, null);
}
@Override
public Iterable<ITmfEventAspect> getEventAspects() {
return EVENT_ASPECTS;
}
}
// ------------------------------------------------------------------------
// Housekeeping
// ------------------------------------------------------------------------
/**
* Test setup
*/
@Before
public void setUp() {
try {
fTrace = new TmfTraceStubWithAspects(TEST_TRACE.getPath());
TmfSignalManager.deregister(fTrace);
fTrace.indexTrace(true);
} catch (final TmfTraceException e) {
fail(e.getMessage());
}
}
/**
* Test cleanup
*/
@After
public void tearDown() {
fTrace.dispose();
fTrace = null;
}
// ------------------------------------------------------------------------
// Test methods
// ------------------------------------------------------------------------
/**
* Test the {@link TmfTraceUtils#getAnalysisModuleOfClass} method.
*/
@Test
public void testGetModulesByClass() {
TmfTrace trace = fTrace;
assertNotNull(trace);
/* Open the trace, the modules should be populated */
trace.traceOpened(new TmfTraceOpenedSignal(this, trace, null));
Iterable<TestAnalysis> testModules = TmfTraceUtils.getAnalysisModulesOfClass(trace, TestAnalysis.class);
assertTrue(testModules.iterator().hasNext());
int count = 0;
for (TestAnalysis module : testModules) {
assertNotNull(module);
count++;
}
/*
* FIXME: The exact count depends on the context the test is run (full
* test suite or this file only), but there must be at least 2 modules
*/
assertTrue(count >= 2);
TestAnalysis module = TmfTraceUtils.getAnalysisModuleOfClass(trace, TestAnalysis.class, AnalysisManagerTest.MODULE_PARAM);
assertNotNull(module);
IAnalysisModule traceModule = trace.getAnalysisModule(AnalysisManagerTest.MODULE_PARAM);
assertNotNull(traceModule);
assertEquals(module, traceModule);
}
/**
* Test the {@link TmfTraceUtils#resolveEventAspectOfClassForEvent(ITmfTrace, Class, ITmfEvent)} method.
*/
@Test
public void testResolveEventAspectsOfClassForEvent() {
TmfTrace trace = fTrace;
assertNotNull(trace);
ITmfContext context = trace.seekEvent(0L);
ITmfEvent event = trace.getNext(context);
assertNotNull(event);
/* Make sure the CPU aspect returns the expected value */
Object cpuObj = TmfTraceUtils.resolveEventAspectOfClassForEvent(trace, TmfCpuAspect.class, event);
assertNotNull(cpuObj);
assertEquals(1, cpuObj);
}
}