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; |
c068a752 | 28 | import org.eclipse.osgi.util.NLS; |
2bdf0193 AM |
29 | import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; |
30 | import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper; | |
31 | import org.eclipse.tracecompass.tmf.core.analysis.Messages; | |
32 | import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager; | |
33 | import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisModuleHelperConfigElement; | |
34 | import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisRequirement; | |
35 | import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException; | |
36 | import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace; | |
37 | import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; | |
38 | import org.eclipse.tracecompass.tmf.core.trace.TmfTrace; | |
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 GB |
50 | import com.google.common.collect.ImmutableSet; |
51 | ||
c068a752 | 52 | /** |
b3b03da0 | 53 | * Test suite for the {@link TmfAnalysisModuleHelperConfigElement} class |
c068a752 GB |
54 | * |
55 | * @author Geneviève Bastien | |
56 | */ | |
57 | public class AnalysisModuleHelperTest { | |
58 | ||
59 | private IAnalysisModuleHelper fModule; | |
4d2857be | 60 | private IAnalysisModuleHelper fModuleOther; |
8c736b3c | 61 | private IAnalysisModuleHelper fReqModule; |
4d2857be | 62 | private ITmfTrace fTrace; |
c068a752 GB |
63 | |
64 | /** | |
65 | * Gets the module helpers for 2 test modules | |
66 | */ | |
67 | @Before | |
68 | public void getModules() { | |
69 | fModule = TmfAnalysisManager.getAnalysisModule(AnalysisManagerTest.MODULE_PARAM); | |
70 | assertNotNull(fModule); | |
b3b03da0 | 71 | assertTrue(fModule instanceof TmfAnalysisModuleHelperConfigElement); |
4d2857be GB |
72 | fModuleOther = TmfAnalysisManager.getAnalysisModule(AnalysisManagerTest.MODULE_SECOND); |
73 | assertNotNull(fModuleOther); | |
74 | assertTrue(fModuleOther instanceof TmfAnalysisModuleHelperConfigElement); | |
8c736b3c MR |
75 | fReqModule = TmfAnalysisManager.getAnalysisModule(AnalysisManagerTest.MODULE_REQ); |
76 | assertNotNull(fReqModule); | |
77 | assertTrue(fReqModule instanceof TmfAnalysisModuleHelperConfigElement); | |
4d2857be | 78 | fTrace = TmfTestTrace.A_TEST_10K2.getTraceAsStub2(); |
c068a752 GB |
79 | } |
80 | ||
81 | /** | |
82 | * Some tests use traces, let's clean them here | |
83 | */ | |
84 | @After | |
85 | public void cleanupTraces() { | |
86 | TmfTestTrace.A_TEST_10K.dispose(); | |
4d2857be | 87 | fTrace.dispose(); |
c068a752 GB |
88 | } |
89 | ||
90 | /** | |
91 | * Test the helper's getters and setters | |
92 | */ | |
93 | @Test | |
94 | public void testHelperGetters() { | |
95 | /* With first module */ | |
96 | assertEquals(AnalysisManagerTest.MODULE_PARAM, fModule.getId()); | |
97 | assertEquals("Test analysis", fModule.getName()); | |
98 | assertFalse(fModule.isAutomatic()); | |
99 | ||
100 | Bundle helperbundle = fModule.getBundle(); | |
c77a695a | 101 | Bundle thisbundle = Platform.getBundle("org.eclipse.tracecompass.tmf.core.tests"); |
c068a752 GB |
102 | assertNotNull(helperbundle); |
103 | assertEquals(thisbundle, helperbundle); | |
104 | ||
4d2857be GB |
105 | /* With other module */ |
106 | assertEquals(AnalysisManagerTest.MODULE_SECOND, fModuleOther.getId()); | |
107 | assertEquals("Test other analysis", fModuleOther.getName()); | |
108 | assertTrue(fModuleOther.isAutomatic()); | |
c068a752 GB |
109 | } |
110 | ||
111 | /** | |
8c736b3c MR |
112 | * Test the |
113 | * {@link TmfAnalysisModuleHelperConfigElement#appliesToTraceType(Class)} | |
c068a752 GB |
114 | * method for the 2 modules |
115 | */ | |
116 | @Test | |
117 | public void testAppliesToTrace() { | |
4d2857be | 118 | /* stub module */ |
c068a752 GB |
119 | assertFalse(fModule.appliesToTraceType(TmfTrace.class)); |
120 | assertTrue(fModule.appliesToTraceType(TmfTraceStub.class)); | |
4d2857be | 121 | assertTrue(fModule.appliesToTraceType(TmfTraceStub2.class)); |
04da5385 | 122 | assertFalse(fModule.appliesToTraceType(TmfTraceStub3.class)); |
c068a752 | 123 | |
4d2857be GB |
124 | /* stub module 2 */ |
125 | assertFalse(fModuleOther.appliesToTraceType(TmfTrace.class)); | |
126 | assertFalse(fModuleOther.appliesToTraceType(TmfTraceStub.class)); | |
127 | assertTrue(fModuleOther.appliesToTraceType(TmfTraceStub2.class)); | |
04da5385 | 128 | assertTrue(fModuleOther.appliesToTraceType(TmfTraceStub3.class)); |
c068a752 GB |
129 | } |
130 | ||
131 | /** | |
8c736b3c MR |
132 | * Test the |
133 | * {@link TmfAnalysisModuleHelperConfigElement#newModule(ITmfTrace)} method | |
c068a752 GB |
134 | * for the 2 modules |
135 | */ | |
136 | @Test | |
137 | public void testNewModule() { | |
138 | /* Test analysis module with traceStub */ | |
139 | Exception exception = null; | |
7b3eb8c0 AM |
140 | try (IAnalysisModule module = fModule.newModule(TmfTestTrace.A_TEST_10K.getTrace());) { |
141 | assertNotNull(module); | |
142 | assertTrue(module instanceof TestAnalysis); | |
c068a752 GB |
143 | } catch (TmfAnalysisException e) { |
144 | exception = e; | |
145 | } | |
146 | assertNull(exception); | |
c068a752 | 147 | |
4d2857be | 148 | /* TestAnalysis2 module with trace, should return an exception */ |
7b3eb8c0 | 149 | try (IAnalysisModule module = fModuleOther.newModule(TmfTestTrace.A_TEST_10K.getTrace());) { |
c068a752 GB |
150 | } catch (TmfAnalysisException e) { |
151 | exception = e; | |
152 | } | |
153 | assertNotNull(exception); | |
4d2857be | 154 | assertEquals(NLS.bind(Messages.TmfAnalysisModuleHelper_AnalysisDoesNotApply, fModuleOther.getName()), exception.getMessage()); |
c068a752 | 155 | |
4d2857be | 156 | /* TestAnalysis2 module with a TraceStub2 */ |
c068a752 | 157 | exception = null; |
7b3eb8c0 AM |
158 | try (IAnalysisModule module = fModuleOther.newModule(fTrace);) { |
159 | assertNotNull(module); | |
160 | assertTrue(module instanceof TestAnalysis2); | |
c068a752 GB |
161 | } catch (TmfAnalysisException e) { |
162 | exception = e; | |
163 | } | |
164 | assertNull(exception); | |
c068a752 GB |
165 | } |
166 | ||
167 | /** | |
168 | * Test for the initialization of parameters from the extension points | |
169 | */ | |
170 | @Test | |
171 | public void testParameters() { | |
c068a752 GB |
172 | ITmfTrace trace = TmfTestTrace.A_TEST_10K.getTrace(); |
173 | ||
174 | /* | |
175 | * This analysis has a parameter, but no default value. we should be | |
176 | * able to set the parameter | |
177 | */ | |
178 | IAnalysisModuleHelper helper = TmfAnalysisManager.getAnalysisModule(AnalysisManagerTest.MODULE_PARAM); | |
7b3eb8c0 AM |
179 | try (IAnalysisModule module = helper.newModule(trace);) { |
180 | assertNull(module.getParameter(TestAnalysis.PARAM_TEST)); | |
181 | module.setParameter(TestAnalysis.PARAM_TEST, 1); | |
182 | assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST)); | |
183 | ||
c068a752 GB |
184 | } catch (TmfAnalysisException e1) { |
185 | fail(e1.getMessage()); | |
186 | return; | |
187 | } | |
188 | ||
c068a752 GB |
189 | /* This module has a parameter with default value */ |
190 | helper = TmfAnalysisManager.getAnalysisModule(AnalysisManagerTest.MODULE_PARAM_DEFAULT); | |
7b3eb8c0 AM |
191 | try (IAnalysisModule module = helper.newModule(trace);) { |
192 | assertEquals(3, module.getParameter(TestAnalysis.PARAM_TEST)); | |
193 | module.setParameter(TestAnalysis.PARAM_TEST, 1); | |
194 | assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST)); | |
195 | ||
c068a752 GB |
196 | } catch (TmfAnalysisException e1) { |
197 | fail(e1.getMessage()); | |
198 | return; | |
199 | } | |
c068a752 GB |
200 | |
201 | /* | |
202 | * This module does not have a parameter so setting it should throw an | |
203 | * error | |
204 | */ | |
4d2857be | 205 | helper = TmfAnalysisManager.getAnalysisModule(AnalysisManagerTest.MODULE_SECOND); |
7b3eb8c0 AM |
206 | Exception exception = null; |
207 | try (IAnalysisModule module = helper.newModule(fTrace);) { | |
208 | ||
209 | assertNull(module.getParameter(TestAnalysis.PARAM_TEST)); | |
210 | ||
211 | try { | |
212 | module.setParameter(TestAnalysis.PARAM_TEST, 1); | |
213 | } catch (RuntimeException e) { | |
214 | exception = e; | |
215 | } | |
c068a752 GB |
216 | } catch (TmfAnalysisException e1) { |
217 | fail(e1.getMessage()); | |
218 | return; | |
219 | } | |
c068a752 GB |
220 | assertNotNull(exception); |
221 | } | |
8c736b3c MR |
222 | |
223 | /** | |
224 | * Test for the | |
225 | * {@link TmfAnalysisModuleHelperConfigElement#getValidTraceTypes} method | |
226 | */ | |
227 | @Test | |
228 | public void testGetValidTraceTypes() { | |
04da5385 | 229 | Set<Class<? extends ITmfTrace>> expected = ImmutableSet.of((Class<? extends ITmfTrace>) TmfTraceStub.class, TmfTraceStub2.class, TmfTraceStub3.class); |
8c736b3c | 230 | Iterable<Class<? extends ITmfTrace>> traceTypes = fReqModule.getValidTraceTypes(); |
04da5385 | 231 | assertEquals(expected, traceTypes); |
8c736b3c MR |
232 | } |
233 | ||
234 | /** | |
235 | * Test for the | |
236 | * {@link TmfAnalysisModuleHelperConfigElement#getAnalysisRequirements} | |
237 | * method | |
238 | */ | |
239 | @Test | |
240 | public void testGetRequirements() { | |
241 | Iterable<TmfAnalysisRequirement> requirements = fReqModule.getAnalysisRequirements(); | |
242 | assertNotNull(requirements); | |
243 | ||
244 | Map<String, TmfAnalysisRequirement> rMap = new HashMap<>(); | |
245 | ||
246 | for (TmfAnalysisRequirement req : requirements) { | |
247 | assertFalse(rMap.containsKey(req.getType())); | |
248 | rMap.put(req.getType(), req); | |
249 | } | |
250 | assertEquals(2, rMap.size()); | |
251 | ||
252 | /* Test if all types and values have been obtained */ | |
253 | TmfAnalysisRequirement req = rMap.get(TestRequirementAnalysis.EVENT_TYPE); | |
254 | assertNotNull(req); | |
255 | ||
256 | Set<String> values = req.getValues(); | |
257 | assertEquals(3, values.size()); | |
258 | assertTrue(values.contains(TestRequirementAnalysis.EXIT_SYSCALL)); | |
259 | assertTrue(values.contains(TestRequirementAnalysis.SCHED_SWITCH)); | |
260 | assertTrue(values.contains(TestRequirementAnalysis.SCHED_WAKEUP)); | |
261 | ||
262 | req = rMap.get(TestRequirementAnalysis.FIELD_TYPE); | |
263 | assertNotNull(req); | |
264 | ||
265 | values = req.getValues(); | |
266 | assertEquals(2, values.size()); | |
267 | assertTrue(values.contains(TestRequirementAnalysis.PID)); | |
268 | assertTrue(values.contains(TestRequirementAnalysis.TID)); | |
269 | } | |
c068a752 | 270 | } |