blob: c02d53e0c209c1444cd8ea48113652fbd338fb1b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2017 École Polytechnique de Montréal and others
*
* 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.shared;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub2;
/**
* Generic TMF test traces
*
* @author Geneviève Bastien
*/
public enum TmfTestTrace {
/** A test */
A_TEST_10K("A-Test-10K"),
/** A second trace */
A_TEST_10K2("A-Test-10K-2"),
/** A third trace */
E_TEST_10K("E-Test-10K"),
/** A fourth trace */
O_TEST_10K("O-Test-10K"),
/** And oh! a fifth trace */
R_TEST_10K("R-Test-10K"),
/** Syslog trace */
SYSLOG_1("syslog1"),
/** Syslog trace */
SYSLOG_2("syslog2"),
/** Syslog trace */
SYSLOG_3("syslog3"),
/** Syslog trace */
SYSLOG_4("syslog4"),
/** Syslog trace */
SYSLOG_5("syslog5"),
/** Syslog trace */
SYSLOG_6("syslog6");
private final @NonNull String fPath;
private final String fDirectory = "testfiles";
private ITmfTrace fTrace = null;
private TmfTestTrace(@NonNull String file) {
fPath = file;
}
/**
* Get the path of the trace
*
* @return The path of this trace
*/
public @NonNull String getPath() {
return fPath;
}
/**
* Get the full path of the trace
*
* @return The full path of the trace
*/
public String getFullPath() {
URL resource = TmfCoreTestPlugin.getDefault().getBundle().getResource(fDirectory + IPath.SEPARATOR + fPath);
try {
return FileLocator.toFileURL(resource).toURI().getPath();
} catch (URISyntaxException | IOException e) {
throw new IllegalStateException(e);
}
}
/**
* Return a ITmfTrace object of this test trace. It will be already
* initTrace()'ed. This method will always return a new trace and dispose of
* the old one.
*
* After being used by unit tests, traces must be properly disposed of by
* calling the {@link TmfTestTrace#dispose()} method.
*
* @return A {@link ITmfTrace} reference to this trace
*/
public @NonNull ITmfTrace getTrace() {
if (fTrace != null) {
fTrace.dispose();
}
try {
ITmfTrace trace = new TmfTraceStub(getFullPath(), ITmfTrace.DEFAULT_TRACE_CACHE_SIZE, false, null);
fTrace = trace;
return trace;
} catch (TmfTraceException e) {
throw new IllegalStateException(e);
}
}
/**
* Return a ITmfTrace object that is of type {@link TmfTraceStub2}. It
* will be already initTrace()'ed. But the trace will be deregistered from
* signal managers and will need to be manually disposed of by the caller.
*
* @return a {@link ITmfTrace} reference to this trace
*/
public ITmfTrace getTraceAsStub2() {
ITmfTrace trace = null;
final URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(fDirectory + File.separator + fPath), null);
try {
File test = new File(FileLocator.toFileURL(location).toURI());
trace = new TmfTraceStub2(test.toURI().getPath(), ITmfTrace.DEFAULT_TRACE_CACHE_SIZE, false, null);
TmfSignalManager.deregister(trace);
} catch (URISyntaxException | IOException | TmfTraceException e) {
throw new IllegalStateException(e);
}
return trace;
}
/**
* Dispose of the trace
*/
public void dispose() {
if (fTrace != null) {
fTrace.dispose();
fTrace = null;
}
}
}