TMF: Have IAnalysisModule#setTrace return boolean instead of throw exception
[deliverable/tracecompass.git] / 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.HashMap;
24import java.util.Map;
25import java.util.Set;
26
c068a752 27import org.eclipse.core.runtime.Platform;
9897c39c 28import org.eclipse.jdt.annotation.NonNull;
2bdf0193
AM
29import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
30import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper;
2bdf0193
AM
31import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager;
32import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisModuleHelperConfigElement;
33import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisRequirement;
34import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
35import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
36import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
37import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
ff7b95a5 38import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
2bdf0193
AM
39import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis;
40import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis2;
41import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestRequirementAnalysis;
42import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
43import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub2;
44import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub3;
c068a752
GB
45import org.junit.After;
46import org.junit.Before;
47import org.junit.Test;
48import org.osgi.framework.Bundle;
49
04da5385 50import com.google.common.collect.ImmutableSet;
9897c39c 51import 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 */
58public 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}
This page took 0.067644 seconds and 5 git commands to generate.