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
CommitLineData
95916b5f 1/*******************************************************************************
d6650bca 2 * Copyright (c) 2016 École Polytechnique de Montréal and others
95916b5f
GB
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *******************************************************************************/
9
10package org.eclipse.tracecompass.tmf.core.tests.parsers.custom;
11
12import static org.junit.Assert.assertEquals;
efeeb733
GB
13import static org.junit.Assert.assertNotNull;
14import static org.junit.Assert.assertNull;
95916b5f 15import static org.junit.Assert.assertTrue;
efeeb733 16import static org.junit.Assert.fail;
95916b5f
GB
17
18import java.io.BufferedWriter;
19import java.io.File;
20import java.io.FileWriter;
21import java.io.IOException;
32877ae9
PT
22import java.text.SimpleDateFormat;
23import java.util.ArrayList;
95916b5f 24import java.util.Arrays;
32877ae9 25import java.util.Date;
95916b5f
GB
26
27import org.eclipse.jdt.annotation.NonNull;
28import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
32877ae9
PT
29import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
30import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
95916b5f 31import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
efeeb733
GB
32import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition;
33import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.Tag;
95916b5f
GB
34import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtEvent;
35import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTrace;
36import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTxtTraceDefinition;
37import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
38import org.junit.runner.RunWith;
39import org.junit.runners.Parameterized;
40import org.junit.runners.Parameterized.Parameters;
41
32877ae9
PT
42import com.google.common.collect.Lists;
43
95916b5f
GB
44/**
45 * Test the events parsed by a custom txt trace
46 *
47 * @author Geneviève Bastien
48 */
49@RunWith(Parameterized.class)
50public class CustomTxtTraceDataTest extends AbstractCustomTraceDataTest {
51
52 private static final String TRACE_PATH = TRACE_DIRECTORY + File.separator + "test.txt";
53 private static final String DEFINITION_PATH = "testfiles" + File.separator + "txt" + File.separator + "testTxtDefinition.xml";
54
55 /**
56 * Constructor
57 *
efeeb733
GB
58 * @param name
59 * The name of the test
60 * @param data
61 * The test data
95916b5f
GB
62 */
63 public CustomTxtTraceDataTest(String name, @NonNull ICustomTestData data) {
64 super(data);
65 }
66
95916b5f
GB
67 private static CustomTxtTraceDefinition getDefinition(int index) {
68 CustomTxtTraceDefinition[] definitions = CustomTxtTraceDefinition.loadAll(new File(DEFINITION_PATH).toString());
69 return definitions[index];
70 }
71
72 private static final ICustomTestData CUSTOM_TXT = new ICustomTestData() {
73
74 private static final int NB_EVENTS = 10;
75 private CustomTxtTraceDefinition fDefinition;
32877ae9 76 private ITmfEventAspect<?> fTimestampAspect;
95916b5f
GB
77
78 @Override
79 public ITmfTrace getTrace() throws IOException, TmfTraceException {
80 fDefinition = getDefinition(0);
81 final File file = new File(TRACE_PATH);
82 try (BufferedWriter writer = new BufferedWriter(new FileWriter(file));) {
83 for (int i = 0; i < NB_EVENTS; ++i) {
32877ae9
PT
84 SimpleDateFormat f = new SimpleDateFormat(TIMESTAMP_FORMAT);
85 String eventStr = f.format(new Date(i)) + " hello world\n";
95916b5f
GB
86 writer.write(eventStr);
87 int extra = i % 3;
88 for (int j = 0; j < extra; j++) {
89 writer.write("extra line\n");
90 }
91 }
92 }
32877ae9
PT
93 ITmfTrace trace = new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
94 ArrayList<@NonNull ITmfEventAspect<?>> aspects = Lists.newArrayList(trace.getEventAspects());
95 fTimestampAspect = aspects.stream().filter(aspect -> aspect.getName().equals("Timestamp")).findFirst().get();
96 return trace;
95916b5f
GB
97 }
98
99 @Override
100 public void validateEvent(ITmfEvent event) {
101 assertTrue(event instanceof CustomTxtEvent);
102 String name = fDefinition.definitionName;
103 assertEquals("Event name", name, event.getName());
104 assertEquals("Event name and type", event.getType().getName(), event.getName());
32877ae9 105 assertEquals("Timestamp", Long.toString(event.getTimestamp().toNanos()), fTimestampAspect.resolve(event));
95916b5f
GB
106 }
107
108 @Override
109 public void validateEventCount(int eventCount) {
110 assertEquals("Event count", NB_EVENTS, eventCount);
111 }
112
113 };
114
115 private static final ICustomTestData CUSTOM_TXT_EVENT_NAME = new ICustomTestData() {
116
117 private static final int NB_EVENTS = 10;
d6650bca 118 private static final String DEFAULT_EVENT = "DefaultName";
95916b5f
GB
119 private static final String ODD_EVENT = "OddName";
120 private static final String EVEN_EVENT = "EvenName";
121 private CustomTxtTraceDefinition fDefinition;
32877ae9 122 private ITmfEventAspect<?> fTimestampAspect;
95916b5f
GB
123
124 @Override
125 public ITmfTrace getTrace() throws IOException, TmfTraceException {
126 fDefinition = getDefinition(1);
127 final File file = new File(TRACE_PATH);
128 try (BufferedWriter writer = new BufferedWriter(new FileWriter(file));) {
129 for (int i = 1; i <= NB_EVENTS; ++i) {
d6650bca 130 String evName = (i % 5) == 0 ? DEFAULT_EVENT : ((i % 2) == 0) ? EVEN_EVENT : ODD_EVENT;
95916b5f
GB
131 String eventStr = i + " " + evName + "\n";
132 writer.write(eventStr);
133 int extra = i % 3;
134 for (int j = 0; j < extra; j++) {
135 writer.write("extra line\n");
136 }
137 }
138 }
32877ae9
PT
139 ITmfTrace trace = new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
140 ArrayList<@NonNull ITmfEventAspect<?>> aspects = Lists.newArrayList(trace.getEventAspects());
141 fTimestampAspect = aspects.stream().filter(aspect -> aspect.getName().equals("Timestamp")).findFirst().get();
142 return trace;
95916b5f
GB
143 }
144
145 @Override
146 public void validateEvent(ITmfEvent event) {
147 assertTrue(event instanceof CustomTxtEvent);
148 long ts = event.getTimestamp().getValue();
d6650bca
PT
149 if (ts % 5 == 0) {
150 assertEquals("Event name", DEFAULT_EVENT, event.getName());
151 } else if (ts % 2 == 0) {
95916b5f
GB
152 assertEquals("Event name", EVEN_EVENT, event.getName());
153 } else {
154 assertEquals("Event name", ODD_EVENT, event.getName());
155 }
156 assertEquals("Event name and type", event.getType().getName(), event.getName());
32877ae9 157 assertEquals("Timestamp", TmfBaseAspects.getTimestampAspect().resolve(event), fTimestampAspect.resolve(event));
95916b5f
GB
158 }
159
160 @Override
161 public void validateEventCount(int eventCount) {
162 assertEquals("Event count", NB_EVENTS, eventCount);
163 }
164
165 };
166
efeeb733
GB
167 private static final ICustomTestData CUSTOM_TXT_EXTRA_FIELDS = new ICustomTestData() {
168
169 private static final int NB_EVENTS = 6;
170 private static final String FOO = "foo";
171 private static final String BAR = "bar";
172 private static final String BAZ = "baz";
173 private static final String MESSAGE = "message";
174 private CustomTxtTraceDefinition fDefinition;
175
176 @Override
177 public ITmfTrace getTrace() throws IOException, TmfTraceException {
178 fDefinition = getDefinition(2);
179 final File file = new File(TRACE_PATH);
180 try (BufferedWriter writer = new BufferedWriter(new FileWriter(file));) {
181 // Event with one field to set
182 String eventStr = String.format("1 %s %s=%s\n", MESSAGE, FOO, BAR);
183 writer.write(eventStr);
184 // Event with 2 different fields and different values
185 eventStr = String.format("2 %s %s=%s %s=%s\n", MESSAGE, FOO, BAR, BAR, FOO);
186 writer.write(eventStr);
187 // Event with an extra field that conflicts with a built-in field
188 eventStr = String.format("3 %s Message=%s\n", MESSAGE, FOO);
189 writer.write(eventStr);
190 // Event with 2 extra fields with same name where the values
191 // should be appended
192 eventStr = String.format("4 %s %s=%s %s=%s\n", MESSAGE, FOO, BAR, FOO, BAZ);
193 writer.write(eventStr);
194 // Event with 2 extra fields with same name, where the values
195 // should be set
196 eventStr = String.format("5 %s %s=%s %s=%s %s=%s\n", MESSAGE, FOO, BAR, FOO, BAZ, BAR, BAZ);
197 writer.write(eventStr);
198 // Event with 2 non matching number extra field names/values
199 eventStr = String.format("6 %s %s=%s other %s\n", MESSAGE, FOO, BAR, BAZ);
200 writer.write(eventStr);
201 }
202 return new CustomTxtTrace(null, fDefinition, file.getPath(), BLOCK_SIZE);
203 }
204
205 @Override
206 public void validateEvent(ITmfEvent event) {
207 assertTrue(event instanceof CustomTxtEvent);
208 long ts = event.getTimestamp().getValue();
209 switch ((int) ts) {
210 case 1:
211 assertNotNull(event.getContent().getField(FOO));
212 assertEquals(BAR, event.getContent().getField(FOO).getValue());
213 assertNull(event.getContent().getField(BAR));
214 break;
215 case 2:
216 assertNotNull(event.getContent().getField(FOO));
217 assertEquals(BAR, event.getContent().getField(FOO).getValue());
218 assertNotNull(event.getContent().getField(BAR));
219 assertEquals(FOO, event.getContent().getField(BAR).getValue());
220 break;
221 case 3:
222 assertNotNull(event.getContent().getField(Tag.MESSAGE.toString()));
223 assertEquals(MESSAGE, event.getContent().getField(Tag.MESSAGE.toString()).getValue());
224 break;
225 case 4:
226 assertNotNull(event.getContent().getField(FOO));
227 assertEquals(BAR + CustomTraceDefinition.SEPARATOR + BAZ, event.getContent().getField(FOO).getValue());
228 assertNull(event.getContent().getField(BAR));
229 break;
230 case 5:
231 assertNotNull(event.getContent().getField(FOO));
232 assertEquals(BAZ, event.getContent().getField(FOO).getValue());
233 assertNotNull(event.getContent().getField(BAR));
234 assertEquals(BAZ, event.getContent().getField(BAR).getValue());
235 break;
236 case 6:
237 assertNotNull(event.getContent().getField(FOO));
238 assertEquals(BAR + CustomTraceDefinition.SEPARATOR + BAZ, event.getContent().getField(FOO).getValue());
239 assertNull(event.getContent().getField(BAR));
240 break;
241 default:
242 fail("unknown timestamp " + ts);
243 }
244 assertEquals("Event name and type", event.getType().getName(), event.getName());
245 }
246
247 @Override
248 public void validateEventCount(int eventCount) {
249 assertEquals("Event count", NB_EVENTS, eventCount);
250 }
251
252 };
253
95916b5f
GB
254 /**
255 * @return The arrays of parameters
256 */
257 @Parameters(name = "{index}: {0}")
258 public static Iterable<Object[]> getParameters() {
259 return Arrays.asList(new Object[][] {
260 { "Base parser", CUSTOM_TXT },
efeeb733
GB
261 { "Parse with event name", CUSTOM_TXT_EVENT_NAME },
262 { "Parse with extra fields", CUSTOM_TXT_EXTRA_FIELDS }
95916b5f
GB
263 });
264 }
265
266}
This page took 0.037746 seconds and 5 git commands to generate.