Commit | Line | Data |
---|---|---|
eadf9801 | 1 | /******************************************************************************* |
5b12450f | 2 | * Copyright (c) 2014, 2015 Ericsson |
eadf9801 BH |
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 | * Bernd Hufmann - Initial API and implementation | |
5b12450f | 11 | * Patrick Tasse - Move field declarations to trace |
eadf9801 BH |
12 | *******************************************************************************/ |
13 | ||
2bdf0193 | 14 | package org.eclipse.tracecompass.tmf.core.tests.trace.text; |
eadf9801 BH |
15 | |
16 | import static org.junit.Assert.assertEquals; | |
17 | import static org.junit.Assert.assertFalse; | |
18 | import static org.junit.Assert.assertTrue; | |
19 | ||
20 | import java.io.File; | |
21 | import java.io.IOException; | |
22 | import java.net.URI; | |
23 | import java.net.URISyntaxException; | |
24 | import java.net.URL; | |
8765b2d4 | 25 | import java.util.Locale; |
eadf9801 BH |
26 | |
27 | import org.eclipse.core.resources.IResource; | |
28 | import org.eclipse.core.resources.ResourcesPlugin; | |
29 | import org.eclipse.core.runtime.FileLocator; | |
30 | import org.eclipse.core.runtime.IStatus; | |
31 | import org.eclipse.core.runtime.Path; | |
32 | import org.eclipse.core.runtime.preferences.IEclipsePreferences; | |
33 | import org.eclipse.core.runtime.preferences.InstanceScope; | |
2bdf0193 AM |
34 | import org.eclipse.tracecompass.internal.tmf.core.Activator; |
35 | import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest; | |
2bdf0193 | 36 | import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest.ExecutionType; |
5b12450f | 37 | import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest; |
2bdf0193 AM |
38 | import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin; |
39 | import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimePreferencesConstants; | |
40 | import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp; | |
41 | import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange; | |
42 | import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp; | |
43 | import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestampFormat; | |
44 | import org.eclipse.tracecompass.tmf.core.trace.ITmfContext; | |
45 | import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; | |
46 | import org.eclipse.tracecompass.tmf.core.trace.text.TextTraceEventContent; | |
47 | import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogEvent; | |
48 | import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogTrace; | |
5b12450f | 49 | import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogTrace.Field; |
eadf9801 BH |
50 | import org.junit.AfterClass; |
51 | import org.junit.BeforeClass; | |
52 | import org.junit.Test; | |
53 | ||
54 | @SuppressWarnings({ "nls", "javadoc"}) | |
55 | public class TextTraceTest { | |
56 | ||
57 | // ------------------------------------------------------------------------ | |
58 | // Variables | |
59 | // ------------------------------------------------------------------------ | |
60 | ||
61 | private static final String NAME = "syslog"; | |
62 | private static final String PATH = "testfiles/" + NAME; | |
63 | ||
64 | private static final String OTHER_PATH = "testfiles/" + "A-Test-10K"; | |
65 | ||
66 | private static SyslogTrace fTrace = null; | |
67 | private static File fTestFile = null; | |
68 | ||
69 | // ------------------------------------------------------------------------ | |
70 | // Housekeeping | |
71 | // ------------------------------------------------------------------------ | |
72 | ||
73 | @BeforeClass | |
74 | public static void setUp() throws Exception { | |
75 | IEclipsePreferences defaultPreferences = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID); | |
76 | defaultPreferences.put(ITmfTimePreferencesConstants.DATIME, "MMM d HH:mm:ss"); | |
77 | defaultPreferences.put(ITmfTimePreferencesConstants.SUBSEC, ITmfTimePreferencesConstants.SUBSEC_NO_FMT); | |
8765b2d4 | 78 | defaultPreferences.put(ITmfTimePreferencesConstants.LOCALE, Locale.CANADA.toLanguageTag()); |
eadf9801 BH |
79 | TmfTimestampFormat.updateDefaultFormats(); |
80 | ||
81 | if (fTrace == null) { | |
82 | try { | |
83 | URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(PATH), null); | |
84 | URI uri = FileLocator.toFileURL(location).toURI(); | |
85 | fTestFile = new File(uri); | |
86 | ||
87 | fTrace = new SyslogTrace(); | |
88 | IResource resource = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(PATH)); | |
89 | fTrace.initTrace(resource, uri.getPath(), SyslogEvent.class); | |
90 | // Dummy request to force the trace indexing | |
91 | TmfEventRequest request = new TmfEventRequest( | |
92 | SyslogEvent.class, | |
93 | TmfTimeRange.ETERNITY, | |
94 | 0, | |
95 | ITmfEventRequest.ALL_DATA, | |
96 | ExecutionType.FOREGROUND) { | |
97 | }; | |
98 | fTrace.sendRequest(request); | |
99 | request.waitForCompletion(); | |
100 | } catch (URISyntaxException e) { | |
101 | e.printStackTrace(); | |
102 | } catch (IOException e) { | |
103 | e.printStackTrace(); | |
104 | } | |
105 | } | |
106 | } | |
107 | ||
108 | @AfterClass | |
109 | public static void tearDown() { | |
110 | fTrace.dispose(); | |
111 | fTrace = null; | |
112 | IEclipsePreferences defaultPreferences = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID); | |
113 | defaultPreferences.put(ITmfTimePreferencesConstants.DATIME, ITmfTimePreferencesConstants.TIME_HOUR_FMT); | |
114 | defaultPreferences.put(ITmfTimePreferencesConstants.SUBSEC, ITmfTimePreferencesConstants.SUBSEC_NANO_FMT); | |
8765b2d4 | 115 | defaultPreferences.put(ITmfTimePreferencesConstants.LOCALE, Locale.getDefault().toLanguageTag()); |
eadf9801 BH |
116 | TmfTimestampFormat.updateDefaultFormats(); |
117 | } | |
118 | ||
119 | // ------------------------------------------------------------------------ | |
120 | // Constructors | |
121 | // ------------------------------------------------------------------------ | |
122 | @Test | |
123 | public void testEmptyConstructor() { | |
124 | SyslogTrace trace = new SyslogTrace(); | |
ea652979 | 125 | assertEquals("getEventType", null, trace.getEventType()); |
eadf9801 BH |
126 | assertEquals("getPath", null, trace.getPath()); |
127 | assertEquals("getName", "", trace.getName()); | |
128 | assertEquals("getCacheSize", 100, trace.getCacheSize()); | |
129 | ||
130 | TmfTimestamp initRange = new TmfTimestamp(60, ITmfTimestamp.SECOND_SCALE); | |
131 | assertEquals("getInitialRangeOffset", initRange, trace.getInitialRangeOffset()); | |
132 | } | |
133 | ||
134 | @Test | |
135 | public void testValidation() throws URISyntaxException, IOException { | |
136 | SyslogTrace trace = new SyslogTrace(); | |
137 | String validTracePath = fTestFile.getAbsolutePath(); | |
138 | IStatus status = trace.validate(null, validTracePath); | |
139 | assertTrue(status.isOK()); | |
140 | assertTrue(status instanceof TraceValidationStatus); | |
32528869 | 141 | assertEquals(185, ((TraceValidationStatus) status).getConfidence()); |
eadf9801 BH |
142 | |
143 | URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(OTHER_PATH), null); | |
144 | URI uri = FileLocator.toFileURL(location).toURI(); | |
145 | File otherFile = new File(uri); | |
146 | ||
147 | String validNoConfidenceTrace = otherFile.getAbsolutePath(); | |
148 | status = trace.validate(null, validNoConfidenceTrace); | |
149 | assertTrue(status instanceof TraceValidationStatus); | |
150 | assertEquals(0, ((TraceValidationStatus) status).getConfidence()); | |
151 | assertTrue(status.isOK()); | |
152 | ||
153 | String invalidTrace = fTestFile.getParentFile().getAbsolutePath(); | |
154 | status = trace.validate(null, invalidTrace); | |
155 | assertFalse(status.isOK()); | |
156 | } | |
157 | ||
158 | @Test | |
159 | public void testInitTrace() throws Exception { | |
160 | URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(PATH), null); | |
161 | String path = FileLocator.toFileURL(location).toURI().getPath(); | |
162 | SyslogTrace trace = new SyslogTrace(); | |
163 | IResource resource = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(PATH)); | |
164 | trace.initTrace(resource, path, SyslogEvent.class); | |
ea652979 | 165 | assertEquals("getEventType", SyslogEvent.class, trace.getEventType()); |
eadf9801 BH |
166 | assertEquals("getPath", fTestFile.toURI().getPath(), trace.getPath()); |
167 | assertEquals("getName", NAME, trace.getName()); | |
168 | assertEquals("getCacheSize", 100, trace.getCacheSize()); | |
169 | } | |
170 | ||
171 | // ------------------------------------------------------------------------ | |
172 | // Indexing | |
173 | // ------------------------------------------------------------------------ | |
174 | ||
175 | @Test | |
176 | public void testTraceIndexing() { | |
177 | assertEquals("getNbEvents", 6, fTrace.getNbEvents()); | |
178 | ||
179 | TmfTimestamp initRange = new TmfTimestamp(60, ITmfTimestamp.SECOND_SCALE); | |
180 | assertEquals("getInitialRangeOffset", initRange, fTrace.getInitialRangeOffset()); | |
181 | } | |
182 | ||
183 | // ------------------------------------------------------------------------ | |
184 | // Parsing | |
185 | // ------------------------------------------------------------------------ | |
186 | ||
187 | @Test | |
188 | public void testTraceParsing() { | |
189 | ITmfContext context = fTrace.seekEvent(0); | |
190 | SyslogEvent event = fTrace.getNext(context); | |
5ece050b | 191 | TextTraceEventContent content = event.getContent(); |
eadf9801 | 192 | assertEquals("getTimestamp", "Jan 1 01:01:01", event.getTimestamp().toString()); |
5b12450f PT |
193 | assertEquals("getField:HOST", "HostA", content.getFieldValue(Field.HOST)); |
194 | assertEquals("getField:LOGGER", "LoggerA", content.getFieldValue(Field.LOGGER)); | |
195 | assertEquals("getField:FILE", "SourceFileA", content.getFieldValue(Field.FILE)); | |
196 | assertEquals("getField:LINE", "4", content.getFieldValue(Field.LINE)); | |
197 | assertEquals("getField:MESSAGE", "Message A", content.getFieldValue(Field.MESSAGE).toString()); | |
eadf9801 | 198 | event = fTrace.getNext(context); |
5ece050b | 199 | content = event.getContent(); |
eadf9801 | 200 | assertEquals("getTimestamp", "Jan 1 02:02:02", event.getTimestamp().toString()); |
5b12450f PT |
201 | assertEquals("getField:HOST", "HostB", content.getFieldValue(Field.HOST)); |
202 | assertEquals("getField:LOGGER", "LoggerB", content.getFieldValue(Field.LOGGER)); | |
203 | assertEquals("getField:FILE", "SourceFileB", content.getFieldValue(Field.FILE)); | |
204 | assertEquals("getField:LINE", "5", content.getFieldValue(Field.LINE)); | |
205 | assertEquals("getField:MESSAGE", "Message B", content.getFieldValue(Field.MESSAGE).toString()); | |
eadf9801 | 206 | event = fTrace.getNext(context); |
5ece050b | 207 | content = event.getContent(); |
eadf9801 | 208 | assertEquals("getTimestamp", "Jan 1 03:03:03", event.getTimestamp().toString()); |
5b12450f PT |
209 | assertEquals("getField:HOST", "HostC", content.getFieldValue(Field.HOST)); |
210 | assertEquals("getField:LOGGER", "LoggerC", content.getFieldValue(Field.LOGGER)); | |
211 | assertEquals("getField:FILE", "SourceFileC", content.getFieldValue(Field.FILE)); | |
212 | assertEquals("getField:LINE", "6", content.getFieldValue(Field.LINE)); | |
213 | assertEquals("getField:MESSAGE", "Message C", content.getFieldValue(Field.MESSAGE).toString()); | |
eadf9801 | 214 | event = fTrace.getNext(context); |
5ece050b | 215 | content = event.getContent(); |
eadf9801 | 216 | assertEquals("getTimestamp", "Jan 1 04:04:04", event.getTimestamp().toString()); |
5b12450f PT |
217 | assertEquals("getField:HOST", "HostD", content.getFieldValue(Field.HOST)); |
218 | assertEquals("getField:LOGGER", "LoggerD", content.getFieldValue(Field.LOGGER)); | |
219 | assertEquals("getField:FILE", "SourceFileD", content.getFieldValue(Field.FILE)); | |
220 | assertEquals("getField:LINE", "7", content.getFieldValue(Field.LINE)); | |
221 | assertEquals("getField:MESSAGE", "Message D", content.getFieldValue(Field.MESSAGE).toString()); | |
eadf9801 | 222 | event = fTrace.getNext(context); |
5ece050b | 223 | content = event.getContent(); |
eadf9801 | 224 | assertEquals("getTimestamp", "Jan 1 05:05:05", event.getTimestamp().toString()); |
5b12450f PT |
225 | assertEquals("getField:HOST", "HostE", content.getFieldValue(Field.HOST)); |
226 | assertEquals("getField:LOGGER", "LoggerE", content.getFieldValue(Field.LOGGER)); | |
227 | assertEquals("getField:FILE", "SourceFileE", content.getFieldValue(Field.FILE)); | |
228 | assertEquals("getField:LINE", "8", content.getFieldValue(Field.LINE)); | |
229 | assertEquals("getField:MESSAGE", "", content.getFieldValue(Field.MESSAGE).toString()); | |
eadf9801 | 230 | event = fTrace.getNext(context); |
5ece050b | 231 | content = event.getContent(); |
eadf9801 | 232 | assertEquals("getTimestamp", "Jan 1 06:06:06", event.getTimestamp().toString()); |
5b12450f PT |
233 | assertEquals("getField:HOST", "HostF", content.getFieldValue(Field.HOST)); |
234 | assertEquals("getField:LOGGER", "LoggerF", content.getFieldValue(Field.LOGGER)); | |
235 | assertEquals("getField:FILE", "SourceFileF", content.getFieldValue(Field.FILE)); | |
236 | assertEquals("getField:LINE", "9", content.getFieldValue(Field.LINE)); | |
237 | assertEquals("getField:MESSAGE", "Message F", content.getFieldValue(Field.MESSAGE).toString()); | |
eadf9801 BH |
238 | event = fTrace.getNext(context); |
239 | assertEquals("event", null, event); | |
240 | context.dispose(); | |
241 | } | |
242 | ||
243 | @Test | |
244 | public void testLocationRatio() { | |
245 | ITmfContext context = fTrace.seekEvent(3); | |
246 | double ratio = fTrace.getLocationRatio(context.getLocation()); | |
247 | SyslogEvent event = fTrace.getNext(context); | |
5ece050b | 248 | TextTraceEventContent content = event.getContent(); |
5b12450f | 249 | Object logger = content.getFieldValue(Field.LOGGER); |
eadf9801 BH |
250 | context.dispose(); |
251 | context = fTrace.seekEvent(ratio); | |
252 | event = fTrace.getNext(context); | |
5ece050b | 253 | content = event.getContent(); |
5b12450f | 254 | assertEquals("getField:LOGGER", logger.toString(), content.getFieldValue(Field.LOGGER).toString()); |
eadf9801 BH |
255 | context.dispose(); |
256 | context = fTrace.seekEvent(0.0); | |
257 | event = fTrace.getNext(context); | |
5ece050b | 258 | content = event.getContent(); |
5b12450f | 259 | assertEquals("getField:LOGGER", "LoggerA", content.getFieldValue(Field.LOGGER)); |
eadf9801 BH |
260 | context.dispose(); |
261 | context = fTrace.seekEvent(1.0); | |
262 | event = fTrace.getNext(context); | |
263 | assertEquals("event", null, event); | |
264 | context.dispose(); | |
265 | } | |
32528869 | 266 | } |