Commit | Line | Data |
---|---|---|
c068a752 | 1 | /******************************************************************************* |
60ae41e1 | 2 | * Copyright (c) 2013, 2014 École Polytechnique de Montréal |
c068a752 GB |
3 | * |
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 | |
8 | * | |
9 | * Contributors: | |
10 | * Geneviève Bastien - Initial API and implementation | |
8c736b3c | 11 | * Mathieu Rail - Added tests for getting a module's requirements |
c068a752 GB |
12 | *******************************************************************************/ |
13 | ||
2bdf0193 | 14 | package org.eclipse.tracecompass.tmf.core.tests.analysis; |
c068a752 GB |
15 | |
16 | import static org.junit.Assert.assertEquals; | |
17 | import static org.junit.Assert.assertFalse; | |
18 | import static org.junit.Assert.assertNotNull; | |
19 | import static org.junit.Assert.assertNull; | |
20 | import static org.junit.Assert.assertTrue; | |
21 | import static org.junit.Assert.fail; | |
c068a752 | 22 | |
8c736b3c MR |
23 | import java.util.HashMap; |
24 | import java.util.Map; | |
25 | import java.util.Set; | |
26 | ||
c068a752 | 27 | import org.eclipse.core.runtime.Platform; |
9897c39c | 28 | import org.eclipse.jdt.annotation.NonNull; |
2bdf0193 AM |
29 | import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; |
30 | import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper; | |
2bdf0193 AM |
31 | import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager; |
32 | import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisModuleHelperConfigElement; | |
33 | import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisRequirement; | |
34 | import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException; | |
35 | import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace; | |
36 | import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; | |
37 | import org.eclipse.tracecompass.tmf.core.trace.TmfTrace; | |
ff7b95a5 | 38 | import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment; |
2bdf0193 AM |
39 | import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis; |
40 | import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis2; | |
41 | import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestRequirementAnalysis; | |
42 | import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub; | |
43 | import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub2; | |
44 | import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub3; | |
c068a752 GB |
45 | import org.junit.After; |
46 | import org.junit.Before; | |
47 | import org.junit.Test; | |
48 | import org.osgi.framework.Bundle; | |
49 | ||
04da5385 | 50 | import com.google.common.collect.ImmutableSet; |
9897c39c | 51 | import com.google.common.collect.Multimap; |
04da5385 | 52 | |
c068a752 | 53 | /** |
b3b03da0 | 54 | * Test suite for the {@link TmfAnalysisModuleHelperConfigElement} class |
c068a752 GB |
55 | * |
56 | * @author Geneviève Bastien | |
57 | */ | |
58 | public class AnalysisModuleHelperTest { | |
59 | ||
60 | private IAnalysisModuleHelper fModule; | |
4d2857be | 61 | private IAnalysisModuleHelper fModuleOther; |
8c736b3c | 62 | private IAnalysisModuleHelper fReqModule; |
4d2857be | 63 | private ITmfTrace fTrace; |
c068a752 | 64 | |
9897c39c GB |
65 | private static IAnalysisModuleHelper getModuleHelper(@NonNull String moduleId) { |
66 | Multimap<String, IAnalysisModuleHelper> helpers = TmfAnalysisManager.getAnalysisModules(); | |
67 | assertEquals(1, helpers.get(moduleId).size()); | |
68 | return helpers.get(moduleId).iterator().next(); | |
69 | } | |
70 | ||
c068a752 GB |
71 | /** |
72 | * Gets the module helpers for 2 test modules | |
73 | */ | |
74 | @Before | |
75 | public void getModules() { | |
9897c39c | 76 | fModule = getModuleHelper(AnalysisManagerTest.MODULE_PARAM); |
c068a752 | 77 | assertNotNull(fModule); |
b3b03da0 | 78 | assertTrue(fModule instanceof TmfAnalysisModuleHelperConfigElement); |
9897c39c | 79 | fModuleOther = getModuleHelper(AnalysisManagerTest.MODULE_SECOND); |
4d2857be GB |
80 | assertNotNull(fModuleOther); |
81 | assertTrue(fModuleOther instanceof TmfAnalysisModuleHelperConfigElement); | |
9897c39c | 82 | fReqModule = getModuleHelper(AnalysisManagerTest.MODULE_REQ); |
8c736b3c MR |
83 | assertNotNull(fReqModule); |
84 | assertTrue(fReqModule instanceof TmfAnalysisModuleHelperConfigElement); | |
4d2857be | 85 | fTrace = TmfTestTrace.A_TEST_10K2.getTraceAsStub2(); |
c068a752 GB |
86 | } |
87 | ||
88 | /** | |
89 | * Some tests use traces, let's clean them here | |
90 | */ | |
91 | @After | |
92 | public void cleanupTraces() { | |
93 | TmfTestTrace.A_TEST_10K.dispose(); | |
4d2857be | 94 | fTrace.dispose(); |
c068a752 GB |
95 | } |
96 | ||
97 | /** | |
98 | * Test the helper's getters and setters | |
99 | */ | |
100 | @Test | |
101 | public void testHelperGetters() { | |
102 | /* With first module */ | |
103 | assertEquals(AnalysisManagerTest.MODULE_PARAM, fModule.getId()); | |
104 | assertEquals("Test analysis", fModule.getName()); | |
105 | assertFalse(fModule.isAutomatic()); | |
106 | ||
107 | Bundle helperbundle = fModule.getBundle(); | |
c77a695a | 108 | Bundle thisbundle = Platform.getBundle("org.eclipse.tracecompass.tmf.core.tests"); |
c068a752 GB |
109 | assertNotNull(helperbundle); |
110 | assertEquals(thisbundle, helperbundle); | |
111 | ||
4d2857be GB |
112 | /* With other module */ |
113 | assertEquals(AnalysisManagerTest.MODULE_SECOND, fModuleOther.getId()); | |
114 | assertEquals("Test other analysis", fModuleOther.getName()); | |
115 | assertTrue(fModuleOther.isAutomatic()); | |
c068a752 GB |
116 | } |
117 | ||
118 | /** | |
8c736b3c MR |
119 | * Test the |
120 | * {@link TmfAnalysisModuleHelperConfigElement#appliesToTraceType(Class)} | |
c068a752 GB |
121 | * method for the 2 modules |
122 | */ | |
123 | @Test | |
124 | public void testAppliesToTrace() { | |
4d2857be | 125 | /* stub module */ |
c068a752 GB |
126 | assertFalse(fModule.appliesToTraceType(TmfTrace.class)); |
127 | assertTrue(fModule.appliesToTraceType(TmfTraceStub.class)); | |
4d2857be | 128 | assertTrue(fModule.appliesToTraceType(TmfTraceStub2.class)); |
04da5385 | 129 | assertFalse(fModule.appliesToTraceType(TmfTraceStub3.class)); |
ff7b95a5 | 130 | assertFalse(fModule.appliesToTraceType(TmfExperiment.class)); |
c068a752 | 131 | |
4d2857be GB |
132 | /* stub module 2 */ |
133 | assertFalse(fModuleOther.appliesToTraceType(TmfTrace.class)); | |
134 | assertFalse(fModuleOther.appliesToTraceType(TmfTraceStub.class)); | |
135 | assertTrue(fModuleOther.appliesToTraceType(TmfTraceStub2.class)); | |
04da5385 | 136 | assertTrue(fModuleOther.appliesToTraceType(TmfTraceStub3.class)); |
ff7b95a5 | 137 | assertFalse(fModuleOther.appliesToTraceType(TmfExperiment.class)); |
c068a752 GB |
138 | } |
139 | ||
140 | /** | |
8c736b3c MR |
141 | * Test the |
142 | * {@link TmfAnalysisModuleHelperConfigElement#newModule(ITmfTrace)} method | |
c068a752 GB |
143 | * for the 2 modules |
144 | */ | |
145 | @Test | |
146 | public void testNewModule() { | |
147 | /* Test analysis module with traceStub */ | |
03f0b0b1 AM |
148 | IAnalysisModule module = null; |
149 | try { | |
150 | module = fModule.newModule(TmfTestTrace.A_TEST_10K.getTrace()); | |
7b3eb8c0 AM |
151 | assertNotNull(module); |
152 | assertTrue(module instanceof TestAnalysis); | |
c068a752 | 153 | } catch (TmfAnalysisException e) { |
f479550c | 154 | fail(); |
03f0b0b1 AM |
155 | } finally { |
156 | if (module != null) { | |
157 | module.dispose(); | |
158 | } | |
c068a752 | 159 | } |
c068a752 | 160 | |
4d2857be | 161 | /* TestAnalysis2 module with trace, should return an exception */ |
03f0b0b1 AM |
162 | try { |
163 | module = fModuleOther.newModule(TmfTestTrace.A_TEST_10K.getTrace()); | |
f479550c | 164 | assertNull(module); |
c068a752 | 165 | } catch (TmfAnalysisException e) { |
f479550c | 166 | fail(); |
03f0b0b1 AM |
167 | } finally { |
168 | if (module != null) { | |
169 | module.dispose(); | |
170 | } | |
c068a752 | 171 | } |
c068a752 | 172 | |
4d2857be | 173 | /* TestAnalysis2 module with a TraceStub2 */ |
ba27dd38 GB |
174 | ITmfTrace trace = fTrace; |
175 | assertNotNull(trace); | |
03f0b0b1 | 176 | try { |
ba27dd38 | 177 | module = fModuleOther.newModule(trace); |
7b3eb8c0 AM |
178 | assertNotNull(module); |
179 | assertTrue(module instanceof TestAnalysis2); | |
c068a752 | 180 | } catch (TmfAnalysisException e) { |
f479550c | 181 | fail(); |
03f0b0b1 AM |
182 | } finally { |
183 | if (module != null) { | |
184 | module.dispose(); | |
185 | } | |
c068a752 | 186 | } |
c068a752 GB |
187 | } |
188 | ||
ff7b95a5 GB |
189 | |
190 | /** | |
191 | * Test the analysis modules with a differing result for experiments | |
192 | */ | |
193 | @Test | |
194 | public void testAppliesToExperiment() { | |
195 | ITmfTrace trace1 = TmfTestTrace.A_TEST_10K.getTrace(); | |
196 | ITmfTrace trace2 = TmfTestTrace.A_TEST_10K2.getTrace(); | |
197 | ITmfTrace trace3 = TmfTestTrace.A_TEST_10K2.getTraceAsStub2(); | |
198 | ||
199 | /* Create an experiment with TmfTraceStub */ | |
200 | ITmfTrace[] tracesExp1 = { trace1, trace2 }; | |
201 | TmfExperiment exp1 = new TmfExperiment(tracesExp1[0].getEventType(), "Experiment 1", tracesExp1, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null); | |
202 | ||
203 | /* Create an experiment containing some TmfTraceStub2 */ | |
204 | ITmfTrace[] tracesExp2 = { trace1, trace3 }; | |
205 | TmfExperiment exp2 = new TmfExperiment(tracesExp2[0].getEventType(), "Experiment 1", tracesExp2, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null); | |
206 | ||
207 | try { | |
208 | ||
f479550c | 209 | /* fModule should return null for both experiments */ |
ff7b95a5 GB |
210 | IAnalysisModule module = null; |
211 | try { | |
212 | module = fModule.newModule(exp1); | |
f479550c | 213 | assertNull(module); |
ff7b95a5 | 214 | } catch (TmfAnalysisException e) { |
f479550c | 215 | fail(); |
ff7b95a5 GB |
216 | } finally { |
217 | if (module != null) { | |
218 | module.dispose(); | |
219 | } | |
220 | } | |
ff7b95a5 | 221 | |
ff7b95a5 GB |
222 | try { |
223 | module = fModule.newModule(exp2); | |
f479550c | 224 | assertNull(module); |
ff7b95a5 | 225 | } catch (TmfAnalysisException e) { |
f479550c | 226 | fail(); |
ff7b95a5 GB |
227 | } finally { |
228 | if (module != null) { | |
229 | module.dispose(); | |
230 | } | |
231 | } | |
ff7b95a5 GB |
232 | |
233 | /* fModuleOther should throw exception for exp1, but not exp2 */ | |
ff7b95a5 GB |
234 | try { |
235 | module = fModuleOther.newModule(exp1); | |
f479550c | 236 | assertNull(module); |
ff7b95a5 | 237 | } catch (TmfAnalysisException e) { |
f479550c | 238 | fail(); |
ff7b95a5 GB |
239 | } finally { |
240 | if (module != null) { | |
241 | module.dispose(); | |
242 | } | |
243 | } | |
ff7b95a5 | 244 | |
ff7b95a5 GB |
245 | try { |
246 | module = fModuleOther.newModule(exp2); | |
247 | assertNotNull(module); | |
248 | } catch (TmfAnalysisException e) { | |
f479550c | 249 | fail(); |
ff7b95a5 GB |
250 | } finally { |
251 | if (module != null) { | |
252 | module.dispose(); | |
253 | } | |
254 | } | |
ff7b95a5 GB |
255 | |
256 | } finally { | |
257 | exp2.dispose(); | |
258 | exp1.dispose(); | |
259 | } | |
260 | } | |
261 | ||
c068a752 GB |
262 | /** |
263 | * Test for the initialization of parameters from the extension points | |
264 | */ | |
265 | @Test | |
266 | public void testParameters() { | |
c068a752 GB |
267 | ITmfTrace trace = TmfTestTrace.A_TEST_10K.getTrace(); |
268 | ||
269 | /* | |
270 | * This analysis has a parameter, but no default value. we should be | |
271 | * able to set the parameter | |
272 | */ | |
9897c39c | 273 | IAnalysisModuleHelper helper = getModuleHelper(AnalysisManagerTest.MODULE_PARAM); |
ba27dd38 | 274 | assertNotNull(helper); |
03f0b0b1 AM |
275 | IAnalysisModule module = null; |
276 | try { | |
277 | module = helper.newModule(trace); | |
f479550c | 278 | assertNotNull(module); |
7b3eb8c0 AM |
279 | assertNull(module.getParameter(TestAnalysis.PARAM_TEST)); |
280 | module.setParameter(TestAnalysis.PARAM_TEST, 1); | |
281 | assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST)); | |
282 | ||
c068a752 GB |
283 | } catch (TmfAnalysisException e1) { |
284 | fail(e1.getMessage()); | |
285 | return; | |
03f0b0b1 AM |
286 | } finally { |
287 | if (module != null) { | |
288 | module.dispose(); | |
289 | } | |
c068a752 GB |
290 | } |
291 | ||
c068a752 | 292 | /* This module has a parameter with default value */ |
9897c39c | 293 | helper = getModuleHelper(AnalysisManagerTest.MODULE_PARAM_DEFAULT); |
ba27dd38 | 294 | assertNotNull(helper); |
03f0b0b1 AM |
295 | try { |
296 | module = helper.newModule(trace); | |
f479550c | 297 | assertNotNull(module); |
7b3eb8c0 AM |
298 | assertEquals(3, module.getParameter(TestAnalysis.PARAM_TEST)); |
299 | module.setParameter(TestAnalysis.PARAM_TEST, 1); | |
300 | assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST)); | |
301 | ||
c068a752 GB |
302 | } catch (TmfAnalysisException e1) { |
303 | fail(e1.getMessage()); | |
304 | return; | |
03f0b0b1 AM |
305 | } finally { |
306 | if (module != null) { | |
307 | module.dispose(); | |
308 | } | |
c068a752 | 309 | } |
c068a752 GB |
310 | |
311 | /* | |
312 | * This module does not have a parameter so setting it should throw an | |
313 | * error | |
314 | */ | |
9897c39c | 315 | helper = getModuleHelper(AnalysisManagerTest.MODULE_SECOND); |
ba27dd38 | 316 | assertNotNull(helper); |
7b3eb8c0 | 317 | Exception exception = null; |
ba27dd38 GB |
318 | trace = fTrace; |
319 | assertNotNull(trace); | |
03f0b0b1 | 320 | try { |
ba27dd38 | 321 | module = helper.newModule(trace); |
f479550c | 322 | assertNotNull(module); |
7b3eb8c0 AM |
323 | assertNull(module.getParameter(TestAnalysis.PARAM_TEST)); |
324 | ||
325 | try { | |
326 | module.setParameter(TestAnalysis.PARAM_TEST, 1); | |
327 | } catch (RuntimeException e) { | |
328 | exception = e; | |
329 | } | |
c068a752 GB |
330 | } catch (TmfAnalysisException e1) { |
331 | fail(e1.getMessage()); | |
332 | return; | |
03f0b0b1 AM |
333 | } finally { |
334 | if (module != null) { | |
335 | module.dispose(); | |
336 | } | |
c068a752 | 337 | } |
c068a752 GB |
338 | assertNotNull(exception); |
339 | } | |
8c736b3c MR |
340 | |
341 | /** | |
342 | * Test for the | |
343 | * {@link TmfAnalysisModuleHelperConfigElement#getValidTraceTypes} method | |
344 | */ | |
345 | @Test | |
346 | public void testGetValidTraceTypes() { | |
04da5385 | 347 | Set<Class<? extends ITmfTrace>> expected = ImmutableSet.of((Class<? extends ITmfTrace>) TmfTraceStub.class, TmfTraceStub2.class, TmfTraceStub3.class); |
8c736b3c | 348 | Iterable<Class<? extends ITmfTrace>> traceTypes = fReqModule.getValidTraceTypes(); |
04da5385 | 349 | assertEquals(expected, traceTypes); |
8c736b3c MR |
350 | } |
351 | ||
352 | /** | |
353 | * Test for the | |
354 | * {@link TmfAnalysisModuleHelperConfigElement#getAnalysisRequirements} | |
355 | * method | |
356 | */ | |
357 | @Test | |
358 | public void testGetRequirements() { | |
359 | Iterable<TmfAnalysisRequirement> requirements = fReqModule.getAnalysisRequirements(); | |
360 | assertNotNull(requirements); | |
361 | ||
362 | Map<String, TmfAnalysisRequirement> rMap = new HashMap<>(); | |
363 | ||
364 | for (TmfAnalysisRequirement req : requirements) { | |
365 | assertFalse(rMap.containsKey(req.getType())); | |
366 | rMap.put(req.getType(), req); | |
367 | } | |
368 | assertEquals(2, rMap.size()); | |
369 | ||
370 | /* Test if all types and values have been obtained */ | |
371 | TmfAnalysisRequirement req = rMap.get(TestRequirementAnalysis.EVENT_TYPE); | |
372 | assertNotNull(req); | |
373 | ||
374 | Set<String> values = req.getValues(); | |
375 | assertEquals(3, values.size()); | |
376 | assertTrue(values.contains(TestRequirementAnalysis.EXIT_SYSCALL)); | |
377 | assertTrue(values.contains(TestRequirementAnalysis.SCHED_SWITCH)); | |
378 | assertTrue(values.contains(TestRequirementAnalysis.SCHED_WAKEUP)); | |
379 | ||
380 | req = rMap.get(TestRequirementAnalysis.FIELD_TYPE); | |
381 | assertNotNull(req); | |
382 | ||
383 | values = req.getValues(); | |
384 | assertEquals(2, values.size()); | |
385 | assertTrue(values.contains(TestRequirementAnalysis.PID)); | |
386 | assertTrue(values.contains(TestRequirementAnalysis.TID)); | |
387 | } | |
c068a752 | 388 | } |