/******************************************************************************* * Copyright (c) 2015 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: * Bernd Hufmann - IInitial API and implementation *******************************************************************************/ package org.eclipse.tracecompass.tmf.ctf.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.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IStatus; import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace; import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace; import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTraceValidationStatus; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; /** * The class <code>CtfTmfTraceValidateTest</code> contains tests for trace * validation * <code>{@link CtfTmfTrace#validate(org.eclipse.core.resources.IProject, String)}</code> * . * * @author Bernd Hufmann */ @RunWith(Parameterized.class) public class CtfTmfTraceValidateTest { private static final Path BASE_PATH = Paths.get("../org.eclipse.tracecompass.ctf.core.tests", "traces"); private static final Path CTF_SUITE_BASE_PATH = Paths.get("../org.eclipse.tracecompass.ctf.core.tests", "traces", "ctf-testsuite", "tests", "1.8"); private String fTrace; private int fServerity; private int fConfidence; private boolean fHasException; /** * Gets a list of test case parameters. * * @return The list of CTF traces (directories) to test * @throws Exception in case of error */ @Parameters(name = "{index}: {0}") public static Iterable<Object[]> getTracePaths() throws Exception { final List<Object[]> dirs = new LinkedList<>(); // text-only metadata, valid CTF trace (lttle-endian) addDirsFrom(dirs, CTF_SUITE_BASE_PATH.resolve(Paths.get("regression", "metadata", "pass", "literal-integers")), IStatus.OK, 10, false); // packet-based metadata, valid CTF trace (lttle-endian) URI tracePath = FileLocator.toFileURL(CtfTestTrace.KERNEL.getTraceURL()).toURI(); addDirsFrom(dirs, Paths.get(tracePath), IStatus.OK, 10, false); // text-only metadata, but invalid addDirsFrom(dirs, CTF_SUITE_BASE_PATH.resolve(Paths.get("regression", "metadata", "fail", "enum-empty")), IStatus.WARNING, 1, true); // packet-based metadata, but invalid addDirsFrom(dirs, CTF_SUITE_BASE_PATH.resolve(Paths.get("regression", "metadata", "fail", "lttng-modules-2.0-pre1")), IStatus.WARNING, 1, true); // pass file instead of directory addDirsFrom(dirs, BASE_PATH.resolve(Paths.get("synctraces.tar.gz")), IStatus.ERROR, 1, false); return dirs; } private static void addDirsFrom(List<Object[]> dirs, Path path, int severity, int confidence, boolean hasException) { if (!Files.exists(path)) { /* Some planned directories may not exist yet in the test suite */ return; } Object array[] = new Object[] { path.toString(), severity, confidence, hasException }; dirs.add(array); } /** * @param trace * a trace path * @param severity * severity of validation status expected * @param confidence * confidence of validation status expected * @param hasException * flag whether validation status should contain exception */ public CtfTmfTraceValidateTest(String trace, int severity, int confidence, boolean hasException) { fTrace = trace; fServerity = severity; fConfidence = confidence; fHasException = hasException; } /** * Main test cases */ @Test public void testValidate() { CtfTmfTrace trace = new CtfTmfTrace(); IStatus status = trace.validate(null, fTrace); assertEquals(toString(), fServerity, status.getSeverity()); if (fHasException) { assertNotNull(toString(), status.getException()); } switch (status.getSeverity()) { case IStatus.OK: { assertTrue(status instanceof CtfTraceValidationStatus); CtfTraceValidationStatus ctfStatus = (CtfTraceValidationStatus) status; assertEquals(toString(), fConfidence, ctfStatus.getConfidence()); assertNotNull(ctfStatus.getEnvironment()); break; } case IStatus.WARNING: { assertTrue(status instanceof TraceValidationStatus); TraceValidationStatus ctfStatus = (TraceValidationStatus) status; assertEquals(fConfidence, ctfStatus.getConfidence()); break; } case IStatus.ERROR: { // nothing else to check here break; } default: // no other severity should be returned fail(); break; } assertEquals(fServerity, status.getSeverity()); trace.dispose(); } }