+ 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_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());