blob: 6ffb67298fbcb2b313533e0ce0d09b3b98900469 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 É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 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.incubator.virtual.machine.analysis.core.tests.shared.vm;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.virtual.machine.analysis.core.tests.Activator;
import org.eclipse.tracecompass.incubator.virtual.machine.analysis.core.tests.shared.trace.VmXmlKernelTraceStub;
import org.eclipse.tracecompass.tmf.core.event.TmfEvent;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
/**
* List the available virtual machine host and guest traces
*
* @author Geneviève Bastien
*/
public enum VmTraces {
/** Host from simple QEMU/KVM experiment */
HOST_ONE_QEMUKVM("vm/OneQemuKvm/host.xml"),
/** Guest from simple QEMU/KVM experiment */
GUEST_ONE_QEMUKVM("vm/OneQemuKvm/guest.xml"),
/** Guest from simple QEMU/KVM experiment */
ONE_CONTAINER("vm/Containers/withContainers.xml"),
/** Host from simple QEMU/KVM experiment */
HOST_QEMUKVM_CONTAINER("vm/QemuContainer/host.xml", "host"),
/** Guest from simple QEMU/KVM experiment */
GUEST_QEMUKVM_CONTAINER("vm/QemuContainer/guest.xml", "guest"),;
private static final @NonNull String filePath = "testfiles";
private final @NonNull IPath fPath;
private final @NonNull String fHostId;
VmTraces(String path) {
this(path, null);
}
VmTraces(String path, @Nullable String hostId) {
IPath relativePath = new Path(filePath + File.separator + path);
Activator plugin = Activator.getDefault();
URL location = FileLocator.find(plugin.getBundle(), relativePath, null);
try {
fPath = new Path(FileLocator.toFileURL(location).getPath());
} catch (IOException e) {
throw new IllegalStateException();
}
fHostId = hostId != null ? hostId : getFileName();
}
/**
* Return a TmfXmlTraceStub object of this test trace. It will be already
* initTrace()'ed.
*
* Make sure you call {@link #exists()} before calling this!
*
* @return A TmfXmlTraceStub reference to this trace
*/
public @Nullable ITmfTrace getTrace() {
VmXmlKernelTraceStub trace = new VmXmlKernelTraceStub() {
@Override
public @NonNull String getHostId() {
return fHostId;
}
};
IStatus status = trace.validate(null, fPath.toOSString());
if (!status.isOK()) {
return null;
}
try {
trace.initTrace(null, fPath.toOSString(), TmfEvent.class);
} catch (TmfTraceException e) {
return null;
}
return trace;
}
/**
* Check if the trace actually exists on disk or not.
*
* @return If the trace is present
*/
public boolean exists() {
return fPath.toFile().exists();
}
/**
* Get the filename of this trace
*
* @return The last segment (file name of this trace)
*/
public @NonNull String getHostId() {
return fHostId;
}
/**
* Get the filename of this trace
*
* @return The last segment (file name of this trace)
*/
public @NonNull String getFileName() {
return String.valueOf(fPath.lastSegment());
}
/**
* Get the path of the trace file
*
* @return The full path of the trace file
*/
public @NonNull IPath getPath() {
return fPath;
}
}