blob: bff25c9c1d6ba32ccdf723dece90bf9aecf8a683 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2015 Ericsson
*
* 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:
* Vincent Perot - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.pcap.core.tests.shared;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.internal.tmf.pcap.core.event.PcapEvent;
import org.eclipse.tracecompass.internal.tmf.pcap.core.trace.PcapTrace;
import org.eclipse.tracecompass.pcap.core.tests.shared.PcapTestTrace;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.pcap.core.tests.stubs.PcapTmfTraceStub;
/**
* Available Pcap TMF test traces. Kind-of-extends {@link PcapTestTrace}.
*
* To run tests using these, you first need to run the "get-traces.[xml|sh]"
* script located under org.eclipse.tracecompass.pcap.core.tests/rsc/ .
*
* @author Vincent Perot
*/
@NonNullByDefault
public enum PcapTmfTestTrace {
/** A bad pcap file. */
BAD_PCAPFILE,
/** A Valid Pcap that is empty. */
EMPTY_PCAP,
/** A Pcap that mostly contains TCP packets. */
MOSTLY_TCP,
/** A Pcap that mostly contains UDP packets. */
MOSTLY_UDP,
/** A big-endian trace that contains two packets. */
SHORT_BIG_ENDIAN,
/** A little-endian trace that contains two packets. */
SHORT_LITTLE_ENDIAN,
/** A trace used for benchmarking. */
BENCHMARK_TRACE,
/** A Kernel trace directory. */
KERNEL_DIRECTORY,
/** A Kernel trace file. */
KERNEL_TRACE;
private final String fPath;
private @Nullable PcapTmfTraceStub fTrace = null;
private PcapTmfTestTrace() {
@SuppressWarnings("null")
@NonNull String path = PcapTestTrace.valueOf(this.name()).getPath().toString();
fPath = path;
}
/**
* @return The path of this trace
*/
public String getPath() {
return fPath;
}
/**
* Return a PcapTmfTraceStub object of this test trace. It will be already
* initTrace()'ed.
*
* Make sure you call {@link #exists()} before calling this!
*
* After being used by unit tests, traces must be properly disposed of by
* calling the {@link PcapTmfTestTrace#dispose()} method.
*
* @return A PcapTmfTrace reference to this trace
*/
public synchronized PcapTrace getTrace() {
PcapTmfTraceStub trace = fTrace;
if (trace != null) {
trace.dispose();
}
trace = new PcapTmfTraceStub();
try {
trace.initTrace(null, fPath, PcapEvent.class);
} catch (TmfTraceException e) {
/* Should not happen if tracesExist() passed */
throw new RuntimeException(e);
}
fTrace = trace;
return trace;
}
/**
* Check if the trace actually exists on disk or not.
*
* @return If the trace is present
*/
public boolean exists() {
return PcapTestTrace.valueOf(this.name()).exists();
}
/**
* Dispose of the trace
*/
public void dispose() {
if (fTrace != null) {
fTrace.dispose();
fTrace = null;
}
}
}