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