tmf: bug 494698 Add per-event fields to custom parsers
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.core.tests / src / org / eclipse / tracecompass / tmf / core / tests / parsers / custom / CustomTxtTraceDataTest.java
index ea6b90d5147c327e7b58bf989ec62f7c035ca089..f78e22aafcfb824a10e92e81217d6c18e8655432 100644 (file)
 package org.eclipse.tracecompass.tmf.core.tests.parsers.custom;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
+import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
+import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
+import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition;
+import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.Tag;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtEvent;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTrace;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceDefinition;
@@ -29,6 +39,8 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
+import com.google.common.collect.Lists;
+
 /**
  * Test the events parsed by a custom txt trace
  *
@@ -43,14 +55,15 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
     /**
      * Constructor
      *
-     * @param name The name of the test
-     * @param data The test data
+     * @param name
+     *            The name of the test
+     * @param data
+     *            The test data
      */
     public CustomTxtTraceDataTest(String name, @NonNull ICustomTestData data) {
         super(data);
     }
 
-
     private static CustomTxtTraceDefinition getDefinition(int index) {
         CustomTxtTraceDefinition[] definitions = CustomTxtTraceDefinition.loadAll(new File(DEFINITION_PATH).toString());
         return definitions[index];
@@ -60,6 +73,7 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
 
         private static final int NB_EVENTS = 10;
         private CustomTxtTraceDefinition fDefinition;
+        private ITmfEventAspect<?> fTimestampAspect;
 
         @Override
         public ITmfTrace getTrace() throws IOException, TmfTraceException {
@@ -67,7 +81,8 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
             final File file = new File(TRACE_PATH);
             try (BufferedWriter writer = new BufferedWriter(new FileWriter(file));) {
                 for (int i = 0; i < NB_EVENTS; ++i) {
-                    String eventStr = i + " hello world\n";
+                    SimpleDateFormat f = new SimpleDateFormat(TIMESTAMP_FORMAT);
+                    String eventStr = f.format(new Date(i)) + " hello world\n";
                     writer.write(eventStr);
                     int extra = i % 3;
                     for (int j = 0; j < extra; j++) {
@@ -75,7 +90,10 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
                     }
                 }
             }
-            return new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
+            ITmfTrace trace = new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
+            ArrayList<@NonNull ITmfEventAspect<?>> aspects = Lists.newArrayList(trace.getEventAspects());
+            fTimestampAspect = aspects.stream().filter(aspect -> aspect.getName().equals("Timestamp")).findFirst().get();
+            return trace;
         }
 
         @Override
@@ -84,6 +102,7 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
             String name = fDefinition.definitionName;
             assertEquals("Event name", name, event.getName());
             assertEquals("Event name and type", event.getType().getName(), event.getName());
+            assertEquals("Timestamp", Long.toString(event.getTimestamp().toNanos()), fTimestampAspect.resolve(event));
         }
 
         @Override
@@ -100,6 +119,7 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
         private static final String ODD_EVENT = "OddName";
         private static final String EVEN_EVENT = "EvenName";
         private CustomTxtTraceDefinition fDefinition;
+        private ITmfEventAspect<?> fTimestampAspect;
 
         @Override
         public ITmfTrace getTrace() throws IOException, TmfTraceException {
@@ -116,7 +136,10 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
                     }
                 }
             }
-            return new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
+            ITmfTrace trace = new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
+            ArrayList<@NonNull ITmfEventAspect<?>> aspects = Lists.newArrayList(trace.getEventAspects());
+            fTimestampAspect = aspects.stream().filter(aspect -> aspect.getName().equals("Timestamp")).findFirst().get();
+            return trace;
         }
 
         @Override
@@ -131,6 +154,94 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
                 assertEquals("Event name", ODD_EVENT, event.getName());
             }
             assertEquals("Event name and type", event.getType().getName(), event.getName());
+            assertEquals("Timestamp", TmfBaseAspects.getTimestampAspect().resolve(event), fTimestampAspect.resolve(event));
+        }
+
+        @Override
+        public void validateEventCount(int eventCount) {
+            assertEquals("Event count", NB_EVENTS, eventCount);
+        }
+
+    };
+
+    private static final ICustomTestData CUSTOM_TXT_EXTRA_FIELDS = new ICustomTestData() {
+
+        private static final int NB_EVENTS = 6;
+        private static final String FOO = "foo";
+        private static final String BAR = "bar";
+        private static final String BAZ = "baz";
+        private static final String MESSAGE = "message";
+        private CustomTxtTraceDefinition fDefinition;
+
+        @Override
+        public ITmfTrace getTrace() throws IOException, TmfTraceException {
+            fDefinition = getDefinition(2);
+            final File file = new File(TRACE_PATH);
+            try (BufferedWriter writer = new BufferedWriter(new FileWriter(file));) {
+                // Event with one field to set
+                String eventStr = String.format("1 %s %s=%s\n", MESSAGE, FOO, BAR);
+                writer.write(eventStr);
+                // Event with 2 different fields and different values
+                eventStr = String.format("2 %s %s=%s %s=%s\n", MESSAGE, FOO, BAR, BAR, FOO);
+                writer.write(eventStr);
+                // Event with an extra field that conflicts with a built-in field
+                eventStr = String.format("3 %s Message=%s\n", MESSAGE, FOO);
+                writer.write(eventStr);
+                // Event with 2 extra fields with same name where the values
+                // should be appended
+                eventStr = String.format("4 %s %s=%s %s=%s\n", MESSAGE, FOO, BAR, FOO, BAZ);
+                writer.write(eventStr);
+                // Event with 2 extra fields with same name, where the values
+                // should be set
+                eventStr = String.format("5 %s %s=%s %s=%s %s=%s\n", MESSAGE, FOO, BAR, FOO, BAZ, BAR, BAZ);
+                writer.write(eventStr);
+                // Event with 2 non matching number extra field names/values
+                eventStr = String.format("6 %s %s=%s other %s\n", MESSAGE, FOO, BAR, BAZ);
+                writer.write(eventStr);
+            }
+            return new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
+        }
+
+        @Override
+        public void validateEvent(ITmfEvent event) {
+            assertTrue(event instanceof CustomTxtEvent);
+            long ts = event.getTimestamp().getValue();
+            switch ((int) ts) {
+            case 1:
+                assertNotNull(event.getContent().getField(FOO));
+                assertEquals(BAR, event.getContent().getField(FOO).getValue());
+                assertNull(event.getContent().getField(BAR));
+                break;
+            case 2:
+                assertNotNull(event.getContent().getField(FOO));
+                assertEquals(BAR, event.getContent().getField(FOO).getValue());
+                assertNotNull(event.getContent().getField(BAR));
+                assertEquals(FOO, event.getContent().getField(BAR).getValue());
+                break;
+            case 3:
+                assertNotNull(event.getContent().getField(Tag.MESSAGE.toString()));
+                assertEquals(MESSAGE, event.getContent().getField(Tag.MESSAGE.toString()).getValue());
+                break;
+            case 4:
+                assertNotNull(event.getContent().getField(FOO));
+                assertEquals(BAR + CustomTraceDefinition.SEPARATOR + BAZ, event.getContent().getField(FOO).getValue());
+                assertNull(event.getContent().getField(BAR));
+                break;
+            case 5:
+                assertNotNull(event.getContent().getField(FOO));
+                assertEquals(BAZ, event.getContent().getField(FOO).getValue());
+                assertNotNull(event.getContent().getField(BAR));
+                assertEquals(BAZ, event.getContent().getField(BAR).getValue());
+                break;
+            case 6:
+                assertNotNull(event.getContent().getField(FOO));
+                assertEquals(BAR + CustomTraceDefinition.SEPARATOR + BAZ, event.getContent().getField(FOO).getValue());
+                assertNull(event.getContent().getField(BAR));
+                break;
+            default:
+                fail("unknown timestamp " + ts);
+            }
+            assertEquals("Event name and type", event.getType().getName(), event.getName());
         }
 
         @Override
@@ -147,7 +258,8 @@ public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
     public static Iterable<Object[]> getParameters() {
         return Arrays.asList(new Object[][] {
                 { "Base parser", CUSTOM_TXT },
-                { "Parse with event name", CUSTOM_TXT_EVENT_NAME }
+                { "Parse with event name", CUSTOM_TXT_EVENT_NAME },
+                { "Parse with extra fields", CUSTOM_TXT_EXTRA_FIELDS }
         });
     }
 
This page took 0.026888 seconds and 5 git commands to generate.