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 / CustomXmlTraceDataTest.java
index 372322ed136a8f591ab4f5e3465bf7e962d872f5..f40db45ce1302e160946e003e200057e749592fd 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;
@@ -26,9 +29,11 @@ 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.CustomXmlEvent;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTrace;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTraceDefinition;
+import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.Tag;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -156,6 +161,99 @@ public class CustomXmlTraceDataTest extends AbstractCustomTraceDataTest {
 
     };
 
+    private static final ICustomTestData CUSTOM_XML_EXTRA_FIELDS = new ICustomTestData() {
+
+        private static final int NB_EVENTS = 5;
+        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 CustomXmlTraceDefinition 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));) {
+                writer.write("<trace>");
+                // Event with one field to set
+                String eventStr = String.format("<event timestamp=\"%s\" name=\"%s\">\n", "1", MESSAGE);
+                eventStr += String.format("<field name=\"%s\" value=\"%s\"/>\n", FOO, BAR);
+                eventStr += "</event>\n";
+                writer.write(eventStr);
+                // Event with 2 different fields and different values
+                eventStr = String.format("<event timestamp=\"%s\" name=\"%s\">\n", "2", MESSAGE);
+                eventStr += String.format("<field name=\"%s\" value=\"%s\"/>\n", FOO, BAR);
+                eventStr += String.format("<field name=\"%s\" value=\"%s\"/>\n", BAR, FOO);
+                eventStr += "</event>\n";
+                writer.write(eventStr);
+                // Event with an extra field that conflicts with a built-in field
+                eventStr = String.format("<event timestamp=\"%s\" name=\"%s\">\n", "3", MESSAGE);
+                eventStr += String.format("<field name=\"Message\" value=\"%s\"/>\n", FOO);
+                eventStr += "</event>\n";
+                writer.write(eventStr);
+                // Event with 2 extra fields with same name where the values
+                // should be appended
+                eventStr = String.format("<event timestamp=\"%s\" name=\"%s\">\n", "4", MESSAGE);
+                eventStr += String.format("<field name=\"%s\" value=\"%s\"/>\n", FOO, BAR);
+                eventStr += String.format("<field name=\"%s\" value=\"%s\"/>\n", FOO, BAZ);
+                eventStr += "</event>\n";
+                writer.write(eventStr);
+                // Event with 2 non matching number extra field names/values
+                eventStr = String.format("<event timestamp=\"%s\" name=\"%s\">\n", "5", MESSAGE);
+                eventStr += String.format("<fieldName value=\"%s\"/>\n", FOO);
+                eventStr += String.format("<fieldValue value=\"%s\"/>\n", BAR);
+                eventStr += String.format("<fieldValue value=\"%s\"/>\n", BAZ);
+                eventStr += "</event>\n";
+                writer.write(eventStr);
+                writer.write("</trace>");
+            }
+            return new CustomXmlTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
+        }
+
+        @Override
+        public void validateEvent(ITmfEvent event) {
+            assertTrue(event instanceof CustomXmlEvent);
+            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());
+                assertNull(event.getContent().getField(BAR));
+                break;
+            default:
+                fail("unknown timestamp " + ts);
+            }
+            assertEquals("Event name and type", event.getType().getName(), event.getName());
+        }
+
+        @Override
+        public void validateEventCount(int eventCount) {
+            assertEquals("Event count", NB_EVENTS, eventCount);
+        }
+
+    };
+
     /**
      * @return The arrays of parameters
      */
@@ -163,7 +261,8 @@ public class CustomXmlTraceDataTest extends AbstractCustomTraceDataTest {
     public static Iterable<Object[]> getParameters() {
         return Arrays.asList(new Object[][] {
                 { "Base parser", CUSTOM_XML },
-                { "Parse with event name", CUSTOM_XML_EVENT_NAME }
+                { "Parse with event name", CUSTOM_XML_EVENT_NAME },
+                { "Parse with extra fields", CUSTOM_XML_EXTRA_FIELDS }
         });
     }
 
This page took 0.025941 seconds and 5 git commands to generate.