1 /*******************************************************************************
2 * Copyright (c) 2015 École Polytechnique de Montréal
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Geneviève Bastien - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.tracecompass
.analysis
.os
.linux
.core
.tests
.kernelanalysis
;
15 import static org
.junit
.Assert
.assertEquals
;
16 import static org
.junit
.Assert
.assertNotNull
;
17 import static org
.junit
.Assert
.assertNull
;
18 import static org
.junit
.Assert
.fail
;
22 import org
.eclipse
.core
.runtime
.IPath
;
23 import org
.eclipse
.core
.runtime
.IStatus
;
24 import org
.eclipse
.jdt
.annotation
.NonNull
;
25 import org
.eclipse
.tracecompass
.analysis
.os
.linux
.core
.kernelanalysis
.KernelAnalysisModule
;
26 import org
.eclipse
.tracecompass
.analysis
.os
.linux
.core
.kernelanalysis
.KernelTidAspect
;
27 import org
.eclipse
.tracecompass
.analysis
.os
.linux
.core
.kernelanalysis
.ThreadPriorityAspect
;
28 import org
.eclipse
.tracecompass
.analysis
.os
.linux
.core
.tests
.Activator
;
29 import org
.eclipse
.tracecompass
.analysis
.os
.linux
.core
.tests
.stubs
.trace
.TmfXmlKernelTraceStub
;
30 import org
.eclipse
.tracecompass
.common
.core
.NonNullUtils
;
31 import org
.eclipse
.tracecompass
.tmf
.core
.analysis
.IAnalysisModule
;
32 import org
.eclipse
.tracecompass
.tmf
.core
.event
.ITmfEvent
;
33 import org
.eclipse
.tracecompass
.tmf
.core
.event
.TmfEvent
;
34 import org
.eclipse
.tracecompass
.tmf
.core
.event
.aspect
.ITmfEventAspect
;
35 import org
.eclipse
.tracecompass
.tmf
.core
.exceptions
.TmfTraceException
;
36 import org
.eclipse
.tracecompass
.tmf
.core
.signal
.TmfTraceOpenedSignal
;
37 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.ITmfContext
;
38 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.ITmfTrace
;
39 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTrace
;
40 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTraceManager
;
41 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTraceUtils
;
42 import org
.junit
.After
;
43 import org
.junit
.Before
;
44 import org
.junit
.Test
;
46 import com
.google
.common
.collect
.ImmutableSet
;
49 * Test the {@link KernelTidAspect} class
51 * @author Geneviève Bastien
53 public class KernelTidAspectTest
{
55 private static final @NonNull String LTTNG_KERNEL_FILE
= "testfiles/lttng_kernel_analysis.xml";
57 // ------------------------------------------------------------------------
58 // Test trace class definition
59 // ------------------------------------------------------------------------
61 private static class TmfXmlTraceStubWithTidAspects
extends TmfXmlKernelTraceStub
{
63 public TmfXmlTraceStubWithTidAspects() {
68 public Iterable
<ITmfEventAspect
> getEventAspects() {
69 ImmutableSet
.Builder
<ITmfEventAspect
> builder
= ImmutableSet
.builder();
70 builder
.addAll(super.getEventAspects());
71 builder
.add(KernelTidAspect
.INSTANCE
);
72 builder
.add(ThreadPriorityAspect
.INSTANCE
);
73 return NonNullUtils
.checkNotNull(builder
.build());
78 private ITmfTrace fTrace
;
80 private static void deleteSuppFiles(ITmfTrace trace
) {
81 /* Remove supplementary files */
82 File suppDir
= new File(TmfTraceManager
.getSupplementaryFileDir(trace
));
83 for (File file
: suppDir
.listFiles()) {
93 ITmfTrace trace
= new TmfXmlTraceStubWithTidAspects();
94 IPath filePath
= Activator
.getAbsoluteFilePath(LTTNG_KERNEL_FILE
);
95 IStatus status
= trace
.validate(null, filePath
.toOSString());
97 fail(status
.getException().getMessage());
100 trace
.initTrace(null, filePath
.toOSString(), TmfEvent
.class);
101 } catch (TmfTraceException e
) {
102 fail(e
.getMessage());
104 deleteSuppFiles(trace
);
105 /* Make sure the Kernel analysis has run */
106 ((TmfTrace
) trace
).traceOpened(new TmfTraceOpenedSignal(this, trace
, null));
107 IAnalysisModule module
= null;
108 for (IAnalysisModule mod
: TmfTraceUtils
.getAnalysisModulesOfClass(trace
, KernelAnalysisModule
.class)) {
111 assertNotNull(module
);
113 module
.waitForCompletion();
121 public void tearDown() {
125 private void resolveNextEvent(ITmfContext context
, Integer tid
) {
126 ITmfTrace trace
= fTrace
;
127 ITmfEvent event
= trace
.getNext(context
);
128 assertNotNull(event
);
130 Object tidObj
= TmfTraceUtils
.resolveEventAspectOfClassForEvent(trace
, KernelTidAspect
.class, event
);
134 assertNotNull(tidObj
);
135 assertEquals(tid
, tidObj
);
140 * Test the {@link KernelTidAspect#resolve(ITmfEvent)} method method
143 public void testResolveTidAspect() {
145 ITmfContext context
= fTrace
.seekEvent(0L);
146 resolveNextEvent(context
, null);
147 resolveNextEvent(context
, null);
148 resolveNextEvent(context
, null);
149 resolveNextEvent(context
, 11);
150 resolveNextEvent(context
, null);
151 resolveNextEvent(context
, null);
152 resolveNextEvent(context
, 20);
153 resolveNextEvent(context
, 20);
154 resolveNextEvent(context
, 21);
155 resolveNextEvent(context
, 11);
156 resolveNextEvent(context
, 30);
157 resolveNextEvent(context
, 21);
158 resolveNextEvent(context
, 20);