From 0783ea52bd1621f71e7f579ec6d8020784a306b2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Genevi=C3=A8ve=20Bastien?= Date: Tue, 1 Mar 2016 15:22:01 -0500 Subject: [PATCH] os.tests: introduce test cases for the kernel analysis module MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit It changes the current tests to use this notion of test case that will be used to add unit tests for kernel analysis. Change-Id: I1ccf0c68c48507a0948b29100058f0091e1a758b Signed-off-by: Geneviève Bastien Reviewed-on: https://git.eclipse.org/r/67628 Reviewed-by: Patrick Tasse Tested-by: Patrick Tasse Reviewed-by: Hudson CI --- .../META-INF/MANIFEST.MF | 1 + .../KernelStateProviderTest.java | 24 +-- .../KernelThreadInformationProviderTest.java | 23 +-- .../kernelanalysis/KernelTidAspectTest.java | 23 +-- .../linux/core/tests/stubs/LinuxTestCase.java | 187 ++++++++++++++++++ .../kernel/KernelAnalysisTestFactory.java | 33 ++++ .../core/tests/stubs/kernel/package-info.java | 11 ++ .../linux/core/tests/stubs/package-info.java | 11 ++ .../lttng_kernel_analysis.xml | 0 9 files changed, 255 insertions(+), 58 deletions(-) create mode 100644 analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/LinuxTestCase.java create mode 100644 analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/KernelAnalysisTestFactory.java create mode 100644 analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/package-info.java create mode 100644 analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/package-info.java rename analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/testfiles/{ => kernel_analysis}/lttng_kernel_analysis.xml (100%) diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/META-INF/MANIFEST.MF b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/META-INF/MANIFEST.MF index 7cd1290ccf..1372c27c12 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/META-INF/MANIFEST.MF +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/META-INF/MANIFEST.MF @@ -20,6 +20,7 @@ Require-Bundle: org.junit;bundle-version="4.0.0", org.eclipse.tracecompass.analysis.timing.core;bundle-version="1.0.0", org.eclipse.tracecompass.statesystem.core.tests Import-Package: com.google.common.collect, + org.apache.commons.io;version="2.2.0", org.eclipse.tracecompass.testtraces.ctf;version="1.0.0" Export-Package: org.eclipse.tracecompass.analysis.os.linux.core.tests, org.eclipse.tracecompass.analysis.os.linux.core.tests.cpuusage, diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelStateProviderTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelStateProviderTest.java index d163f7efeb..abce66bdb0 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelStateProviderTest.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelStateProviderTest.java @@ -13,17 +13,12 @@ package org.eclipse.tracecompass.analysis.os.linux.core.tests.kernelanalysis; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.tracecompass.analysis.os.linux.core.tests.Activator; -import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.TmfXmlKernelTraceStub; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.LinuxTestCase; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.kernel.KernelAnalysisTestFactory; import org.eclipse.tracecompass.analysis.os.linux.core.trace.IKernelTrace; import org.eclipse.tracecompass.internal.analysis.os.linux.core.kernel.KernelStateProvider; -import org.eclipse.tracecompass.tmf.core.event.TmfEvent; -import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.statesystem.ITmfStateProvider; import org.junit.After; import org.junit.Before; @@ -36,7 +31,7 @@ import org.junit.Test; */ public class KernelStateProviderTest { - private static final @NonNull String LTTNG_KERNEL_FILE = "testfiles/lttng_kernel_analysis.xml"; + private static final @NonNull LinuxTestCase KERNEL_TEST_CASE = KernelAnalysisTestFactory.KERNEL_SCHED; private IKernelTrace fTrace; private ITmfStateProvider fInput; @@ -46,18 +41,7 @@ public class KernelStateProviderTest { */ @Before public void initialize() { - IKernelTrace thetrace = new TmfXmlKernelTraceStub(); - IPath filePath = Activator.getAbsoluteFilePath(LTTNG_KERNEL_FILE); - IStatus status = thetrace.validate(null, filePath.toOSString()); - if (!status.isOK()) { - fail(status.getException().getMessage()); - } - try { - thetrace.initTrace(null, filePath.toOSString(), TmfEvent.class); - } catch (TmfTraceException e) { - fail(e.getMessage()); - } - + IKernelTrace thetrace = KERNEL_TEST_CASE.getKernelTrace(); fTrace = thetrace; fInput = new KernelStateProvider(thetrace, thetrace.getKernelEventLayout()); } diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelThreadInformationProviderTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelThreadInformationProviderTest.java index 9e88a9880a..024f4748c7 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelThreadInformationProviderTest.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelThreadInformationProviderTest.java @@ -17,28 +17,23 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import java.io.File; import java.util.Collection; import java.util.List; -import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.KernelAnalysisModule; import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.KernelThreadInformationProvider; import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.StateValues; -import org.eclipse.tracecompass.analysis.os.linux.core.tests.Activator; -import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.TmfXmlKernelTraceStub; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.LinuxTestCase; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.kernel.KernelAnalysisTestFactory; import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval; import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue; import org.eclipse.tracecompass.statesystem.core.statevalue.TmfStateValue; import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; -import org.eclipse.tracecompass.tmf.core.event.TmfEvent; -import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal; import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; import org.eclipse.tracecompass.tmf.core.trace.TmfTrace; @@ -57,7 +52,7 @@ import com.google.common.collect.ImmutableSet; */ public class KernelThreadInformationProviderTest { - private static final @NonNull String LTTNG_KERNEL_FILE = "testfiles/lttng_kernel_analysis.xml"; + private static final @NonNull LinuxTestCase KERNEL_TEST_CASE = KernelAnalysisTestFactory.KERNEL_SCHED; private ITmfTrace fTrace; private KernelAnalysisModule fModule; @@ -75,17 +70,7 @@ public class KernelThreadInformationProviderTest { */ @Before public void setUp() { - ITmfTrace trace = new TmfXmlKernelTraceStub(); - IPath filePath = Activator.getAbsoluteFilePath(LTTNG_KERNEL_FILE); - IStatus status = trace.validate(null, filePath.toOSString()); - if (!status.isOK()) { - fail(status.getException().getMessage()); - } - try { - trace.initTrace(null, filePath.toOSString(), TmfEvent.class); - } catch (TmfTraceException e) { - fail(e.getMessage()); - } + ITmfTrace trace = KERNEL_TEST_CASE.getKernelTrace(); deleteSuppFiles(trace); ((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null)); IAnalysisModule module = null; diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelTidAspectTest.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelTidAspectTest.java index a327617a10..613fc16ef9 100644 --- a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelTidAspectTest.java +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/kernelanalysis/KernelTidAspectTest.java @@ -12,21 +12,16 @@ package org.eclipse.tracecompass.analysis.os.linux.core.tests.kernelanalysis; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; import java.io.File; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.KernelAnalysisModule; import org.eclipse.tracecompass.analysis.os.linux.core.kernelanalysis.KernelTidAspect; -import org.eclipse.tracecompass.analysis.os.linux.core.tests.Activator; -import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.TmfXmlKernelTraceStub; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.LinuxTestCase; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.kernel.KernelAnalysisTestFactory; import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; -import org.eclipse.tracecompass.tmf.core.event.TmfEvent; -import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal; import org.eclipse.tracecompass.tmf.core.trace.ITmfContext; import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; @@ -44,7 +39,7 @@ import org.junit.Test; */ public class KernelTidAspectTest { - private static final @NonNull String LTTNG_KERNEL_FILE = "testfiles/lttng_kernel_analysis.xml"; + private static final @NonNull LinuxTestCase KERNEL_TEST_CASE = KernelAnalysisTestFactory.KERNEL_SCHED; // ------------------------------------------------------------------------ // Test trace class definition @@ -65,17 +60,7 @@ public class KernelTidAspectTest { */ @Before public void setUp() { - ITmfTrace trace = new TmfXmlKernelTraceStub(); - IPath filePath = Activator.getAbsoluteFilePath(LTTNG_KERNEL_FILE); - IStatus status = trace.validate(null, filePath.toOSString()); - if (!status.isOK()) { - fail(status.getException().getMessage()); - } - try { - trace.initTrace(null, filePath.toOSString(), TmfEvent.class); - } catch (TmfTraceException e) { - fail(e.getMessage()); - } + ITmfTrace trace = KERNEL_TEST_CASE.getKernelTrace(); deleteSuppFiles(trace); /* Make sure the Kernel analysis has run */ ((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null)); diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/LinuxTestCase.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/LinuxTestCase.java new file mode 100644 index 0000000000..c762c52d1d --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/LinuxTestCase.java @@ -0,0 +1,187 @@ +/******************************************************************************* + * Copyright (c) 2016 É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 v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +package org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs; + +import static org.junit.Assert.fail; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.io.FilenameUtils; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.Activator; +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.trace.TmfXmlKernelTraceStub; +import org.eclipse.tracecompass.common.core.NonNullUtils; +import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval; +import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue; +import org.eclipse.tracecompass.tmf.core.event.TmfEvent; +import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; + +/** + * Describe a test case for a linux unit test + * + * @author Geneviève Bastien + */ +public class LinuxTestCase { + + private final String fTraceFile; + + /** + * Class to group an attribute path and its intervals + */ + public static class IntervalInfo { + + private final String[] fAttributePath; + private final List fIntervals; + + IntervalInfo(List intervals, String... attributePath) { + fAttributePath = attributePath; + fIntervals = intervals; + } + + /** + * Get the attribute path + * + * @return The attribute path + */ + public String[] getAttributePath() { + return fAttributePath; + } + + /** + * Get the list of intervals + * + * @return The list of intervals + */ + public List getIntervals() { + return fIntervals; + } + } + + /** + * Class to group a timestamp with a map of attributes and their expected + * values + */ + public static class PunctualInfo { + + private final long fTs; + private final Map fValueMap; + + /** + * Constructor + * + * @param ts + * Timestamp of this test data + */ + public PunctualInfo(long ts) { + fTs = ts; + fValueMap = new HashMap<>(); + } + + /** + * Get the timestamp this data is applied to + * + * @return The timestamp of this test data + */ + public long getTimestamp() { + return fTs; + } + + /** + * Get the test values + * + * @return The map of attribute path and values + */ + public Map getValues() { + return fValueMap; + } + + /** + * Add an attribute value to verify + * + * @param key + * The attribute path + * @param value + * The value of this attribute at timestamp + */ + public void addValue(String[] key, ITmfStateValue value) { + fValueMap.put(key, value); + } + } + + /** + * Constructor + * + * @param filename + * The filename of the trace file + */ + public LinuxTestCase(String filename) { + fTraceFile = filename; + } + + /** + * Get the last part of the file name containing the test trace + * + * @return The name of the file + */ + public String getTraceFileName() { + return NonNullUtils.checkNotNull(FilenameUtils.getName(fTraceFile)); + } + + /** + * Initializes the trace for this test case. This method will always create + * a new trace. The caller must dispose of it the proper way. + * + * @return The {@link TmfXmlKernelTraceStub} created for this test case + */ + public TmfXmlKernelTraceStub getKernelTrace() { + TmfXmlKernelTraceStub trace = new TmfXmlKernelTraceStub(); + IPath filePath = Activator.getAbsoluteFilePath(fTraceFile); + IStatus status = trace.validate(null, filePath.toOSString()); + if (!status.isOK()) { + fail(status.getException().getMessage()); + } + try { + trace.initTrace(null, filePath.toOSString(), TmfEvent.class); + } catch (TmfTraceException e) { + fail(e.getMessage()); + } + return trace; + } + + /** + * This method will return a set of attributes and their corresponding + * expected intervals that will be tested with the actual intervals obtained + * from the state system. It does not have to return all attributes of a + * given state system, only the ones interesting for this test case. + * + * @return A set of {@link IntervalInfo} objects to verify + */ + public Set getTestIntervals() { + return Collections.EMPTY_SET; + } + + /** + * This method will return a set of timestamps and their corresponding map + * of attributes and state values. The attribute list does not have to + * contain all attributes in the state system, only the ones that should be + * tested. + * + * @return A set of {@link PunctualInfo} objects to verify + */ + public Set getPunctualTestData() { + return Collections.EMPTY_SET; + } + +} diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/KernelAnalysisTestFactory.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/KernelAnalysisTestFactory.java new file mode 100644 index 0000000000..f549156cfd --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/KernelAnalysisTestFactory.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2016 É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 v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +package org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.kernel; + +import org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.LinuxTestCase; + +/** + * Factory of tests for the kernel analysis module + * + * @author Geneviève Bastien + */ +public final class KernelAnalysisTestFactory { + + private final static String TRACE_FILE_PATH = "testfiles/kernel_analysis/"; + + private KernelAnalysisTestFactory() { + + } + + /** + * This test case contains simple kernel trace events + */ + public final static LinuxTestCase KERNEL_SCHED = new LinuxTestCase(TRACE_FILE_PATH + "lttng_kernel_analysis.xml") { + + }; +} diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/package-info.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/package-info.java new file mode 100644 index 0000000000..05911c4fc4 --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/kernel/package-info.java @@ -0,0 +1,11 @@ +/******************************************************************************* + * Copyright (c) 2016 É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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +@org.eclipse.jdt.annotation.NonNullByDefault +package org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs.kernel; diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/package-info.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/package-info.java new file mode 100644 index 0000000000..f78457cdd0 --- /dev/null +++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/stubs/org/eclipse/tracecompass/analysis/os/linux/core/tests/stubs/package-info.java @@ -0,0 +1,11 @@ +/******************************************************************************* + * Copyright (c) 2016 É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 v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +@org.eclipse.jdt.annotation.NonNullByDefault +package org.eclipse.tracecompass.analysis.os.linux.core.tests.stubs; diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/testfiles/lttng_kernel_analysis.xml b/analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/testfiles/kernel_analysis/lttng_kernel_analysis.xml similarity index 100% rename from analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/testfiles/lttng_kernel_analysis.xml rename to analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/testfiles/kernel_analysis/lttng_kernel_analysis.xml -- 2.34.1