tmf: bug 493661 Return analyses who apply to experiment
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.core.tests / src / org / eclipse / tracecompass / tmf / core / tests / analysis / AnalysisModuleHelperTest.java
CommitLineData
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 14package org.eclipse.tracecompass.tmf.core.tests.analysis;
c068a752
GB
15
16import static org.junit.Assert.assertEquals;
17import static org.junit.Assert.assertFalse;
18import static org.junit.Assert.assertNotNull;
19import static org.junit.Assert.assertNull;
20import static org.junit.Assert.assertTrue;
21import static org.junit.Assert.fail;
c068a752 22
8c736b3c
MR
23import java.util.Set;
24
c068a752 25import org.eclipse.core.runtime.Platform;
9897c39c 26import org.eclipse.jdt.annotation.NonNull;
2bdf0193
AM
27import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
28import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper;
2bdf0193
AM
29import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager;
30import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisModuleHelperConfigElement;
58080002 31import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement;
2bdf0193
AM
32import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
33import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
34import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
35import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
ff7b95a5 36import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
66ee355d 37import org.eclipse.tracecompass.tmf.tests.stubs.analysis.AnalysisRequirementFactory;
2bdf0193
AM
38import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis;
39import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis2;
2bdf0193
AM
40import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
41import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub2;
42import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub3;
c068a752
GB
43import org.junit.After;
44import org.junit.Before;
45import org.junit.Test;
46import org.osgi.framework.Bundle;
47
04da5385 48import com.google.common.collect.ImmutableSet;
9897c39c 49import 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 */
56public 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}
This page took 0.10767 seconds and 5 git commands to generate.