X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tmf%2Forg.eclipse.tracecompass.tmf.core.tests%2Fsrc%2Forg%2Feclipse%2Ftracecompass%2Ftmf%2Fcore%2Ftests%2Fparsers%2Fcustom%2FCustomTxtTraceDataTest.java;h=f78e22aafcfb824a10e92e81217d6c18e8655432;hb=efeeb73397f31c0c375555ca56b7225f68ebe4b0;hp=ea6b90d5147c327e7b58bf989ec62f7c035ca089;hpb=d6650bca79a435a0c68e92b3f89dc8fc09b66aa0;p=deliverable%2Ftracecompass.git diff --git a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/parsers/custom/CustomTxtTraceDataTest.java b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/parsers/custom/CustomTxtTraceDataTest.java index ea6b90d514..f78e22aafc 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/parsers/custom/CustomTxtTraceDataTest.java +++ b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/parsers/custom/CustomTxtTraceDataTest.java @@ -10,17 +10,27 @@ 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 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 } }); }