/******************************************************************************* * Copyright (c) 2014, 2015 Ericsson * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bernd Hufmann - Initial API and implementation * Patrick Tasse - Move field declarations to trace *******************************************************************************/ package org.eclipse.tracecompass.tmf.core.tests.trace.text; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.Locale; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.tracecompass.internal.tmf.core.Activator; import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest; import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest.ExecutionType; import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest; import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin; import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimePreferencesConstants; import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp; import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestampFormat; import org.eclipse.tracecompass.tmf.core.trace.ITmfContext; import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus; import org.eclipse.tracecompass.tmf.core.trace.text.TextTraceEventContent; import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogEvent; import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogTrace; import org.eclipse.tracecompass.tmf.tests.stubs.trace.text.SyslogTrace.Field; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @SuppressWarnings({ "nls", "javadoc"}) public class TextTraceTest { // ------------------------------------------------------------------------ // Variables // ------------------------------------------------------------------------ private static final String NAME = "syslog"; private static final String PATH = "testfiles/" + NAME; private static final String OTHER_PATH = "testfiles/" + "A-Test-10K"; private static SyslogTrace fTrace = null; private static File fTestFile = null; // ------------------------------------------------------------------------ // Housekeeping // ------------------------------------------------------------------------ @BeforeClass public static void setUp() throws Exception { IEclipsePreferences defaultPreferences = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID); defaultPreferences.put(ITmfTimePreferencesConstants.DATIME, "MMM d HH:mm:ss"); defaultPreferences.put(ITmfTimePreferencesConstants.SUBSEC, ITmfTimePreferencesConstants.SUBSEC_NO_FMT); defaultPreferences.put(ITmfTimePreferencesConstants.LOCALE, Locale.CANADA.toLanguageTag()); TmfTimestampFormat.updateDefaultFormats(); if (fTrace == null) { try { URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(PATH), null); URI uri = FileLocator.toFileURL(location).toURI(); fTestFile = new File(uri); fTrace = new SyslogTrace(); IResource resource = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(PATH)); fTrace.initTrace(resource, uri.getPath(), SyslogEvent.class); // Dummy request to force the trace indexing TmfEventRequest request = new TmfEventRequest( SyslogEvent.class, TmfTimeRange.ETERNITY, 0, ITmfEventRequest.ALL_DATA, ExecutionType.FOREGROUND) { }; fTrace.sendRequest(request); request.waitForCompletion(); } catch (URISyntaxException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } @AfterClass public static void tearDown() { fTrace.dispose(); fTrace = null; IEclipsePreferences defaultPreferences = InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID); defaultPreferences.put(ITmfTimePreferencesConstants.DATIME, ITmfTimePreferencesConstants.TIME_HOUR_FMT); defaultPreferences.put(ITmfTimePreferencesConstants.SUBSEC, ITmfTimePreferencesConstants.SUBSEC_NANO_FMT); defaultPreferences.put(ITmfTimePreferencesConstants.LOCALE, Locale.getDefault().toLanguageTag()); TmfTimestampFormat.updateDefaultFormats(); } // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ @Test public void testEmptyConstructor() { SyslogTrace trace = new SyslogTrace(); assertEquals("getEventType", null, trace.getEventType()); assertEquals("getPath", null, trace.getPath()); assertEquals("getName", "", trace.getName()); assertEquals("getCacheSize", 100, trace.getCacheSize()); ITmfTimestamp initRange = TmfTimestamp.fromSeconds(60); assertEquals("getInitialRangeOffset", initRange, trace.getInitialRangeOffset()); trace.dispose(); } @Test public void testValidation() throws URISyntaxException, IOException { SyslogTrace trace = new SyslogTrace(); String validTracePath = fTestFile.getAbsolutePath(); IStatus status = trace.validate(null, validTracePath); assertTrue(status.isOK()); assertTrue(status instanceof TraceValidationStatus); assertEquals(185, ((TraceValidationStatus) status).getConfidence()); URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(OTHER_PATH), null); URI uri = FileLocator.toFileURL(location).toURI(); File otherFile = new File(uri); String validNoConfidenceTrace = otherFile.getAbsolutePath(); status = trace.validate(null, validNoConfidenceTrace); assertTrue(status instanceof TraceValidationStatus); assertEquals(0, ((TraceValidationStatus) status).getConfidence()); assertTrue(status.isOK()); String invalidTrace = fTestFile.getParentFile().getAbsolutePath(); status = trace.validate(null, invalidTrace); assertFalse(status.isOK()); trace.dispose(); } @Test public void testInitTrace() throws Exception { URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(PATH), null); String path = FileLocator.toFileURL(location).toURI().getPath(); SyslogTrace trace = new SyslogTrace(); IResource resource = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(PATH)); trace.initTrace(resource, path, SyslogEvent.class); assertEquals("getEventType", SyslogEvent.class, trace.getEventType()); assertEquals("getPath", fTestFile.toURI().getPath(), trace.getPath()); assertEquals("getName", NAME, trace.getName()); assertEquals("getCacheSize", 100, trace.getCacheSize()); trace.dispose(); } // ------------------------------------------------------------------------ // Indexing // ------------------------------------------------------------------------ @Test public void testTraceIndexing() { assertEquals("getNbEvents", 6, fTrace.getNbEvents()); ITmfTimestamp initRange = TmfTimestamp.fromSeconds(60); assertEquals("getInitialRangeOffset", initRange, fTrace.getInitialRangeOffset()); } // ------------------------------------------------------------------------ // Parsing // ------------------------------------------------------------------------ @Test public void testTraceParsing() { ITmfContext context = fTrace.seekEvent(0); SyslogEvent event = fTrace.getNext(context); assertNotNull(event); TextTraceEventContent content = event.getContent(); assertEquals("getTimestamp", "Jan 1 01:01:01", event.getTimestamp().toString()); assertEquals("getField:HOST", "HostA", content.getFieldValue(Field.HOST)); assertEquals("getField:LOGGER", "LoggerA", content.getFieldValue(Field.LOGGER)); assertEquals("getField:FILE", "SourceFileA", content.getFieldValue(Field.FILE)); assertEquals("getField:LINE", "4", content.getFieldValue(Field.LINE)); assertEquals("getField:MESSAGE", "Message A", content.getFieldValue(Field.MESSAGE).toString()); event = fTrace.getNext(context); assertNotNull(event); content = event.getContent(); assertEquals("getTimestamp", "Jan 1 02:02:02", event.getTimestamp().toString()); assertEquals("getField:HOST", "HostB", content.getFieldValue(Field.HOST)); assertEquals("getField:LOGGER", "LoggerB", content.getFieldValue(Field.LOGGER)); assertEquals("getField:FILE", "SourceFileB", content.getFieldValue(Field.FILE)); assertEquals("getField:LINE", "5", content.getFieldValue(Field.LINE)); assertEquals("getField:MESSAGE", "Message B", content.getFieldValue(Field.MESSAGE).toString()); event = fTrace.getNext(context); assertNotNull(event); content = event.getContent(); assertEquals("getTimestamp", "Jan 1 03:03:03", event.getTimestamp().toString()); assertEquals("getField:HOST", "HostC", content.getFieldValue(Field.HOST)); assertEquals("getField:LOGGER", "LoggerC", content.getFieldValue(Field.LOGGER)); assertEquals("getField:FILE", "SourceFileC", content.getFieldValue(Field.FILE)); assertEquals("getField:LINE", "6", content.getFieldValue(Field.LINE)); assertEquals("getField:MESSAGE", "Message C", content.getFieldValue(Field.MESSAGE).toString()); event = fTrace.getNext(context); assertNotNull(event); content = event.getContent(); assertEquals("getTimestamp", "Jan 1 04:04:04", event.getTimestamp().toString()); assertEquals("getField:HOST", "HostD", content.getFieldValue(Field.HOST)); assertEquals("getField:LOGGER", "LoggerD", content.getFieldValue(Field.LOGGER)); assertEquals("getField:FILE", "SourceFileD", content.getFieldValue(Field.FILE)); assertEquals("getField:LINE", "7", content.getFieldValue(Field.LINE)); assertEquals("getField:MESSAGE", "Message D", content.getFieldValue(Field.MESSAGE).toString()); event = fTrace.getNext(context); assertNotNull(event); content = event.getContent(); assertEquals("getTimestamp", "Jan 1 05:05:05", event.getTimestamp().toString()); assertEquals("getField:HOST", "HostE", content.getFieldValue(Field.HOST)); assertEquals("getField:LOGGER", "LoggerE", content.getFieldValue(Field.LOGGER)); assertEquals("getField:FILE", "SourceFileE", content.getFieldValue(Field.FILE)); assertEquals("getField:LINE", "8", content.getFieldValue(Field.LINE)); assertEquals("getField:MESSAGE", "", content.getFieldValue(Field.MESSAGE).toString()); event = fTrace.getNext(context); assertNotNull(event); content = event.getContent(); assertEquals("getTimestamp", "Jan 1 06:06:06", event.getTimestamp().toString()); assertEquals("getField:HOST", "HostF", content.getFieldValue(Field.HOST)); assertEquals("getField:LOGGER", "LoggerF", content.getFieldValue(Field.LOGGER)); assertEquals("getField:FILE", "SourceFileF", content.getFieldValue(Field.FILE)); assertEquals("getField:LINE", "9", content.getFieldValue(Field.LINE)); assertEquals("getField:MESSAGE", "Message F", content.getFieldValue(Field.MESSAGE).toString()); event = fTrace.getNext(context); assertEquals("event", null, event); context.dispose(); } @Test public void testLocationRatio() { ITmfContext context = fTrace.seekEvent(3); double ratio = fTrace.getLocationRatio(context.getLocation()); SyslogEvent event = fTrace.getNext(context); assertNotNull(event); TextTraceEventContent content = event.getContent(); Object logger = content.getFieldValue(Field.LOGGER); context.dispose(); context = fTrace.seekEvent(ratio); event = fTrace.getNext(context); assertNotNull(event); content = event.getContent(); assertEquals("getField:LOGGER", logger.toString(), content.getFieldValue(Field.LOGGER).toString()); context.dispose(); context = fTrace.seekEvent(0.0); event = fTrace.getNext(context); assertNotNull(event); content = event.getContent(); assertEquals("getField:LOGGER", "LoggerA", content.getFieldValue(Field.LOGGER)); context.dispose(); context = fTrace.seekEvent(1.0); event = fTrace.getNext(context); assertEquals("event", null, event); context.dispose(); } }