1 /*******************************************************************************
2 * Copyright (c) 2014, 2015 Ericsson
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
10 * Bernd Hufmann - Initial API and implementation
11 * Patrick Tasse - Move field declarations to trace
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.tmf
.core
.tests
.trace
.text
;
16 import static org
.junit
.Assert
.assertEquals
;
17 import static org
.junit
.Assert
.assertFalse
;
18 import static org
.junit
.Assert
.assertTrue
;
21 import java
.io
.IOException
;
23 import java
.net
.URISyntaxException
;
25 import java
.util
.Locale
;
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
;
34 import org
.eclipse
.tracecompass
.internal
.tmf
.core
.Activator
;
35 import org
.eclipse
.tracecompass
.tmf
.core
.request
.ITmfEventRequest
;
36 import org
.eclipse
.tracecompass
.tmf
.core
.request
.ITmfEventRequest
.ExecutionType
;
37 import org
.eclipse
.tracecompass
.tmf
.core
.request
.TmfEventRequest
;
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
;
49 import org
.eclipse
.tracecompass
.tmf
.tests
.stubs
.trace
.text
.SyslogTrace
.Field
;
50 import org
.junit
.AfterClass
;
51 import org
.junit
.BeforeClass
;
52 import org
.junit
.Test
;
54 @SuppressWarnings({ "nls", "javadoc"})
55 public class TextTraceTest
{
57 // ------------------------------------------------------------------------
59 // ------------------------------------------------------------------------
61 private static final String NAME
= "syslog";
62 private static final String PATH
= "testfiles/" + NAME
;
64 private static final String OTHER_PATH
= "testfiles/" + "A-Test-10K";
66 private static SyslogTrace fTrace
= null;
67 private static File fTestFile
= null;
69 // ------------------------------------------------------------------------
71 // ------------------------------------------------------------------------
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
);
78 defaultPreferences
.put(ITmfTimePreferencesConstants
.LOCALE
, Locale
.CANADA
.toLanguageTag());
79 TmfTimestampFormat
.updateDefaultFormats();
83 URL location
= FileLocator
.find(TmfCoreTestPlugin
.getDefault().getBundle(), new Path(PATH
), null);
84 URI uri
= FileLocator
.toFileURL(location
).toURI();
85 fTestFile
= new File(uri
);
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(
93 TmfTimeRange
.ETERNITY
,
95 ITmfEventRequest
.ALL_DATA
,
96 ExecutionType
.FOREGROUND
) {
98 fTrace
.sendRequest(request
);
99 request
.waitForCompletion();
100 } catch (URISyntaxException e
) {
102 } catch (IOException e
) {
109 public static void tearDown() {
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
);
115 defaultPreferences
.put(ITmfTimePreferencesConstants
.LOCALE
, Locale
.getDefault().toLanguageTag());
116 TmfTimestampFormat
.updateDefaultFormats();
119 // ------------------------------------------------------------------------
121 // ------------------------------------------------------------------------
123 public void testEmptyConstructor() {
124 SyslogTrace trace
= new SyslogTrace();
125 assertEquals("getType", null, trace
.getType());
126 assertEquals("getPath", null, trace
.getPath());
127 assertEquals("getName", "", trace
.getName());
128 assertEquals("getCacheSize", 100, trace
.getCacheSize());
130 TmfTimestamp initRange
= new TmfTimestamp(60, ITmfTimestamp
.SECOND_SCALE
);
131 assertEquals("getInitialRangeOffset", initRange
, trace
.getInitialRangeOffset());
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
);
141 assertEquals(185, ((TraceValidationStatus
) status
).getConfidence());
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
);
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());
153 String invalidTrace
= fTestFile
.getParentFile().getAbsolutePath();
154 status
= trace
.validate(null, invalidTrace
);
155 assertFalse(status
.isOK());
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);
165 assertEquals("getType", SyslogEvent
.class, trace
.getType());
166 assertEquals("getPath", fTestFile
.toURI().getPath(), trace
.getPath());
167 assertEquals("getName", NAME
, trace
.getName());
168 assertEquals("getCacheSize", 100, trace
.getCacheSize());
171 // ------------------------------------------------------------------------
173 // ------------------------------------------------------------------------
176 public void testTraceIndexing() {
177 assertEquals("getNbEvents", 6, fTrace
.getNbEvents());
179 TmfTimestamp initRange
= new TmfTimestamp(60, ITmfTimestamp
.SECOND_SCALE
);
180 assertEquals("getInitialRangeOffset", initRange
, fTrace
.getInitialRangeOffset());
183 // ------------------------------------------------------------------------
185 // ------------------------------------------------------------------------
188 public void testTraceParsing() {
189 ITmfContext context
= fTrace
.seekEvent(0);
190 SyslogEvent event
= fTrace
.getNext(context
);
191 TextTraceEventContent content
= event
.getContent();
192 assertEquals("getTimestamp", "Jan 1 01:01:01", event
.getTimestamp().toString());
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());
198 event
= fTrace
.getNext(context
);
199 content
= event
.getContent();
200 assertEquals("getTimestamp", "Jan 1 02:02:02", event
.getTimestamp().toString());
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());
206 event
= fTrace
.getNext(context
);
207 content
= event
.getContent();
208 assertEquals("getTimestamp", "Jan 1 03:03:03", event
.getTimestamp().toString());
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());
214 event
= fTrace
.getNext(context
);
215 content
= event
.getContent();
216 assertEquals("getTimestamp", "Jan 1 04:04:04", event
.getTimestamp().toString());
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());
222 event
= fTrace
.getNext(context
);
223 content
= event
.getContent();
224 assertEquals("getTimestamp", "Jan 1 05:05:05", event
.getTimestamp().toString());
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());
230 event
= fTrace
.getNext(context
);
231 content
= event
.getContent();
232 assertEquals("getTimestamp", "Jan 1 06:06:06", event
.getTimestamp().toString());
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());
238 event
= fTrace
.getNext(context
);
239 assertEquals("event", null, event
);
244 public void testLocationRatio() {
245 ITmfContext context
= fTrace
.seekEvent(3);
246 double ratio
= fTrace
.getLocationRatio(context
.getLocation());
247 SyslogEvent event
= fTrace
.getNext(context
);
248 TextTraceEventContent content
= event
.getContent();
249 Object logger
= content
.getFieldValue(Field
.LOGGER
);
251 context
= fTrace
.seekEvent(ratio
);
252 event
= fTrace
.getNext(context
);
253 content
= event
.getContent();
254 assertEquals("getField:LOGGER", logger
.toString(), content
.getFieldValue(Field
.LOGGER
).toString());
256 context
= fTrace
.seekEvent(0.0);
257 event
= fTrace
.getNext(context
);
258 content
= event
.getContent();
259 assertEquals("getField:LOGGER", "LoggerA", content
.getFieldValue(Field
.LOGGER
));
261 context
= fTrace
.seekEvent(1.0);
262 event
= fTrace
.getNext(context
);
263 assertEquals("event", null, event
);