Tests: flt.utils.muxer: add message ordering tests
[babeltrace.git] / tests / data / plugins / flt.utils.muxer / bt_plugin_muxer_test.py
CommitLineData
38403bf5
FD
1import bt2
2
3
4class TheIteratorOfConfusion(bt2._UserMessageIterator):
5 def __init__(self, port):
6 self._at = 0
7 test_name = port.user_data[0]
8 TEST_CASES[test_name].create_msgs(self, port.user_data[1:])
9
10 def __next__(self):
11 if self._at < len(self._msgs):
12 msg = self._msgs[self._at]
13 self._at += 1
14 return msg
15 raise StopIteration
16
17
18@bt2.plugin_component_class
19class TheSourceOfConfusion(
20 bt2._UserSourceComponent, message_iterator_class=TheIteratorOfConfusion
21):
22 def __init__(self, params, obj):
23 tc = self._create_trace_class()
24
25 test_name = str(params['test-name'])
26
27 TEST_CASES[test_name].source_setup(self, test_name)
28
29
30class DiffTraceName:
31 def source_setup(src, test_name):
32 tc1 = src._create_trace_class()
33 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
34 tc2 = src._create_trace_class()
35 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
36
37 trace_name1 = 'rouyn'
38 trace_name2 = 'noranda'
39
40 src._add_output_port('out1', (test_name, 1, tc1, cc1, trace_name1))
41 src._add_output_port('out2', (test_name, 2, tc2, cc2, trace_name2))
42
43 def create_msgs(msg_iter, params):
44 iter_id, tc, cc, trace_name = params
45 trace = tc(name=trace_name)
46 sc = tc.create_stream_class(
47 default_clock_class=cc, assigns_automatic_stream_id=False
48 )
49 stream = trace.create_stream(sc, 0)
50
51 sb_msg = msg_iter._create_stream_beginning_message(stream, 0)
52 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
53
54 msg_iter._msgs = [sb_msg, se_msg]
55
56
57class DiffStreamName:
58 def source_setup(src, test_name):
59 tc1 = src._create_trace_class()
60 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
61 tc2 = src._create_trace_class()
62 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
63
64 stream_name1 = 'port-daniel'
65 stream_name2 = 'gascon'
66
67 src._add_output_port('out1', (test_name, 1, tc1, cc1, stream_name1))
68 src._add_output_port('out2', (test_name, 2, tc2, cc2, stream_name2))
69
70 def create_msgs(msg_iter, params):
71 iter_id, tc, cc, stream_name = params
72 trace = tc()
73 sc = tc.create_stream_class(
74 default_clock_class=cc, assigns_automatic_stream_id=False
75 )
76 stream = trace.create_stream(sc, 0, stream_name)
77
78 sb_msg = msg_iter._create_stream_beginning_message(stream, 0)
79 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
80
81 msg_iter._msgs = [sb_msg, se_msg]
82
83
84class DiffStreamId:
85 def source_setup(src, test_name):
86 tc1 = src._create_trace_class()
87 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
88 tc2 = src._create_trace_class()
89 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
90
91 stream_id1 = 18
92 stream_id2 = 23
93
94 src._add_output_port('out1', (test_name, 1, tc1, cc1, stream_id1))
95 src._add_output_port('out2', (test_name, 2, tc2, cc2, stream_id2))
96
97 def create_msgs(msg_iter, params):
98 iter_id, tc, cc, stream_id = params
99 trace = tc()
100 sc = tc.create_stream_class(
101 default_clock_class=cc, assigns_automatic_stream_id=False
102 )
103 stream = trace.create_stream(sc, stream_id)
104
105 sb_msg = msg_iter._create_stream_beginning_message(stream, 0)
106 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
107
108 msg_iter._msgs = [sb_msg, se_msg]
109
110
111class DiffStreamNoName:
112 def source_setup(src, test_name):
113 tc1 = src._create_trace_class()
114 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
115 tc2 = src._create_trace_class()
116 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
117
118 stream_name1 = "one"
119 stream_name2 = None
120
121 src._add_output_port('out1', (test_name, 1, tc1, cc1, stream_name1))
122 src._add_output_port('out2', (test_name, 2, tc2, cc2, stream_name2))
123
124 def create_msgs(msg_iter, params):
125 iter_id, tc, cc, stream_no_name = params
126 trace = tc()
127 sc = tc.create_stream_class(
128 default_clock_class=cc, assigns_automatic_stream_id=False
129 )
130 stream = trace.create_stream(sc, 0, name=stream_no_name)
131
132 sb_msg = msg_iter._create_stream_beginning_message(stream, 0)
133 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
134
135 msg_iter._msgs = [sb_msg, se_msg]
136
137
138class DiffStreamClassId:
139 def source_setup(src, test_name):
140 tc1 = src._create_trace_class(assigns_automatic_stream_class_id=False)
141 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
142 tc2 = src._create_trace_class(assigns_automatic_stream_class_id=False)
143 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
144
145 stream_class_id1 = 18
146 stream_class_id2 = 23
147
148 src._add_output_port('out1', (test_name, 1, tc1, cc1, stream_class_id1))
149 src._add_output_port('out2', (test_name, 2, tc2, cc2, stream_class_id2))
150
151 def create_msgs(msg_iter, params):
152 iter_id, tc, cc, stream_class_id = params
153 trace = tc()
154 sc = tc.create_stream_class(
155 default_clock_class=cc,
156 id=stream_class_id,
157 assigns_automatic_stream_id=False,
158 )
159 stream = trace.create_stream(sc, 0)
160
161 sb_msg = msg_iter._create_stream_beginning_message(stream, 0)
162 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
163
164 msg_iter._msgs = [sb_msg, se_msg]
165
166
167class DiffStreamClassName:
168 def source_setup(src, test_name):
169 tc1 = src._create_trace_class(assigns_automatic_stream_class_id=False)
170 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
171 tc2 = src._create_trace_class(assigns_automatic_stream_class_id=False)
172 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
173
174 stream_class_name1 = 'one'
175 stream_class_name2 = 'two'
176
177 src._add_output_port('out1', (test_name, 1, tc1, cc1, stream_class_name1))
178 src._add_output_port('out2', (test_name, 2, tc2, cc2, stream_class_name2))
179
180 def create_msgs(msg_iter, params):
181 iter_id, tc, cc, stream_class_name = params
182 trace = tc()
183 sc = tc.create_stream_class(
184 default_clock_class=cc,
185 id=0,
186 name=stream_class_name,
187 assigns_automatic_stream_id=False,
188 )
189 stream = trace.create_stream(sc, 0)
190
191 sb_msg = msg_iter._create_stream_beginning_message(stream, 0)
192 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
193
194 msg_iter._msgs = [sb_msg, se_msg]
195
196
197class DiffStreamClassNoName:
198 def source_setup(src, test_name):
199 tc1 = src._create_trace_class(assigns_automatic_stream_class_id=False)
200 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
201 tc2 = src._create_trace_class(assigns_automatic_stream_class_id=False)
202 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
203
204 stream_class_name1 = 'one'
205 stream_class_name2 = None
206
207 src._add_output_port('out1', (test_name, 1, tc1, cc1, stream_class_name1))
208 src._add_output_port('out2', (test_name, 2, tc2, cc2, stream_class_name2))
209
210 def create_msgs(msg_iter, params):
211 iter_id, tc, cc, stream_class_name = params
212 trace = tc()
213 sc = tc.create_stream_class(
214 default_clock_class=cc,
215 id=0,
216 name=stream_class_name,
217 assigns_automatic_stream_id=False,
218 )
219 stream = trace.create_stream(sc, 0)
220
221 sb_msg = msg_iter._create_stream_beginning_message(stream, 0)
222 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
223
224 msg_iter._msgs = [sb_msg, se_msg]
225
226
227class BasicTimestampOrdering:
228 def source_setup(src, test_name):
229 tc = src._create_trace_class()
230 cc = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
231
232 timestamp1 = 0
233 timestamp2 = 120
234 timestamp3 = 4
235
236 src._add_output_port('out1', (test_name, 1, tc, cc, timestamp1))
237 src._add_output_port('out2', (test_name, 2, tc, cc, timestamp2))
238 src._add_output_port('out3', (test_name, 3, tc, cc, timestamp3))
239
240 def create_msgs(msg_iter, params):
241 iter_id, tc, cc, timestamp = params
242 trace = tc()
243 sc = tc.create_stream_class(default_clock_class=cc)
244 stream = trace.create_stream(sc)
245
246 sb_msg = msg_iter._create_stream_beginning_message(stream, timestamp)
247 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
248
249 msg_iter._msgs = [sb_msg, se_msg]
250
251
252class MultiIterOrdering:
253 def source_setup(src, test_name):
254 tc1 = src._create_trace_class(assigns_automatic_stream_class_id=False)
255 tc2 = src._create_trace_class(assigns_automatic_stream_class_id=False)
256 tc3 = src._create_trace_class(assigns_automatic_stream_class_id=False)
257 tc4 = src._create_trace_class(assigns_automatic_stream_class_id=False)
258 cc = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
259
260 src._add_output_port('out1', (test_name, 1, tc1, cc))
261 src._add_output_port('out2', (test_name, 2, tc2, cc))
262 src._add_output_port('out3', (test_name, 3, tc3, cc))
263 src._add_output_port('out4', (test_name, 4, tc4, cc))
264
265 def create_msgs(msg_iter, params):
266 iter_id, tc, cc = params
267 trace_hello = tc(name='hello')
268 trace_meow = tc(name='meow')
269
270 # Craft list of messages for each iterator so that the last messages of
271 # each iterator are all sharing the same timestamp.
272 clock_snapshot_value = 25
273
274 if iter_id == 1:
275 # Event, 2500 ns, trace "hello", stream class 0, stream 1
276 stream_class0 = tc.create_stream_class(
277 id=0, default_clock_class=cc, assigns_automatic_stream_id=False
278 )
279 sc_0_stream_1 = trace_hello.create_stream(stream_class0, id=1)
280 event_class = stream_class0.create_event_class(name='saumon atlantique')
281
282 msg_iter._msgs = [
283 msg_iter._create_stream_beginning_message(sc_0_stream_1, 0),
284 msg_iter._create_event_message(
285 event_class, sc_0_stream_1, clock_snapshot_value
286 ),
287 msg_iter._create_stream_end_message(sc_0_stream_1, iter_id*193)
288 ]
289 elif iter_id == 2:
290 # Packet beginning, 2500 ns, trace "meow", stream class 0, stream 1
291 stream_class0 = tc.create_stream_class(
292 id=0,
293 default_clock_class=cc,
294 supports_packets=True,
295 packets_have_beginning_default_clock_snapshot=True,
296 packets_have_end_default_clock_snapshot=True,
297 assigns_automatic_stream_id=False,
298 )
299
300 sc_0_stream_1 = trace_meow.create_stream(stream_class0, id=1)
301 packet = sc_0_stream_1.create_packet()
302
303 msg_iter._msgs = [
304 msg_iter._create_stream_beginning_message(sc_0_stream_1, 1),
305 msg_iter._create_packet_beginning_message(packet, clock_snapshot_value),
306 msg_iter._create_packet_end_message(packet, iter_id*79),
307 msg_iter._create_stream_end_message(sc_0_stream_1, iter_id*193)
308 ]
309 elif iter_id == 3:
310 # Stream beginning, 2500 ns, trace "hello", stream class 0, stream 0
311 stream_class0 = tc.create_stream_class(
312 id=0, default_clock_class=cc, assigns_automatic_stream_id=False
313 )
314
315 sc_0_stream_0 = trace_hello.create_stream(stream_class0, id=0)
316
317 msg_iter._msgs = [
318 msg_iter._create_stream_beginning_message(
319 sc_0_stream_0, clock_snapshot_value
320 ),
321 msg_iter._create_stream_end_message(sc_0_stream_0, iter_id*193)
322 ]
323 elif iter_id == 4:
324 # Event, 2500 ns, trace "meow", stream class 1, stream 1
325 stream_class1 = tc.create_stream_class(
326 id=1, default_clock_class=cc, assigns_automatic_stream_id=False
327 )
328
329 sc_1_stream_1 = trace_meow.create_stream(stream_class1, id=1)
330
331 event_class = stream_class1.create_event_class(name='bar rayƩ')
332 msg_iter._msgs = [
333 msg_iter._create_stream_beginning_message(sc_1_stream_1, 3),
334 msg_iter._create_event_message(
335 event_class, sc_1_stream_1, clock_snapshot_value
336 ),
337 msg_iter._create_stream_end_message(sc_1_stream_1, iter_id*193)
338 ]
339
340
341class DiffEventClassName:
342 def source_setup(src, test_name):
343 tc1 = src._create_trace_class(assigns_automatic_stream_class_id=False)
344 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
345 tc2 = src._create_trace_class(assigns_automatic_stream_class_id=False)
346 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
347
348 event_class_name1 = 'Hull'
349 event_class_name2 = 'Gatineau'
350
351 src._add_output_port('out1', (test_name, 1, tc1, cc1, event_class_name1))
352 src._add_output_port('out2', (test_name, 2, tc2, cc2, event_class_name2))
353
354 def create_msgs(msg_iter, params):
355 iter_id, tc, cc, event_class_name = params
356 trace = tc()
357 sc = tc.create_stream_class(
358 default_clock_class=cc,
359 id=0,
360 assigns_automatic_stream_id=False,
361 supports_packets=False,
362 )
363 ec = sc.create_event_class(name=event_class_name)
364
365 stream = trace.create_stream(sc, 0)
366
367 # Use event class name length as timestamp so that both stream
368 # beginning message are not at the same time. This test is targetting
369 # event message.
370 sb_msg = msg_iter._create_stream_beginning_message(stream, len(ec.name))
371 ev_msg = msg_iter._create_event_message(ec, stream, 50)
372 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
373
374 msg_iter._msgs = [sb_msg, ev_msg, se_msg]
375
376
377class DiffEventClassId:
378 def source_setup(src, test_name):
379 tc1 = src._create_trace_class(assigns_automatic_stream_class_id=False)
380 cc1 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
381 tc2 = src._create_trace_class(assigns_automatic_stream_class_id=False)
382 cc2 = src._create_clock_class(frequency=1, offset=bt2.ClockClassOffset(0))
383
384 event_class_id1 = 1
385 event_class_id2 = 2
386
387 src._add_output_port('out1', (test_name, 1, tc1, cc1, event_class_id1))
388 src._add_output_port('out2', (test_name, 2, tc2, cc2, event_class_id2))
389
390 def create_msgs(msg_iter, params):
391 iter_id, tc, cc, event_class_id = params
392 trace = tc()
393 sc = tc.create_stream_class(
394 default_clock_class=cc,
395 id=0,
396 assigns_automatic_stream_id=False,
397 assigns_automatic_event_class_id=False,
398 supports_packets=False,
399 )
400 ec = sc.create_event_class(id=event_class_id)
401
402 stream = trace.create_stream(sc, 0)
403
404 # Use event class id as timestamp so that both stream beginning message
405 # are not at the same time. This test is targetting event message.
406 sb_msg = msg_iter._create_stream_beginning_message(stream, ec.id)
407 ev_msg = msg_iter._create_event_message(ec, stream, 50)
408 se_msg = msg_iter._create_stream_end_message(stream, iter_id*193)
409
410 msg_iter._msgs = [sb_msg, ev_msg, se_msg]
411
412
413class DiffInactivityMsgCs:
414 def source_setup(src, test_name):
415 cc1 = src._create_clock_class(
416 frequency=1, name='La Baie', offset=bt2.ClockClassOffset(0)
417 )
418 cc2 = src._create_clock_class(
419 frequency=1, name='Chicoutimi', offset=bt2.ClockClassOffset(0)
420 )
421
422 src._add_output_port('out1', (test_name, cc1))
423 src._add_output_port('out2', (test_name, cc2))
424
425 def create_msgs(msg_iter, params):
426 cc, = params
427 sb_msg = msg_iter._create_message_iterator_inactivity_message(cc, 0)
428 msg_iter._msgs = [sb_msg]
429
430
431TEST_CASES = {
432 'diff_trace_name': DiffTraceName,
433 'diff_event_class_name': DiffEventClassName,
434 'diff_event_class_id': DiffEventClassId,
435 'diff_stream_name': DiffStreamName,
436 'diff_stream_no_name': DiffStreamNoName,
437 'diff_stream_id': DiffStreamId,
438 'diff_stream_class_id': DiffStreamClassId,
439 'diff_stream_class_name': DiffStreamClassName,
440 'diff_stream_class_no_name': DiffStreamClassNoName,
441 'diff_inactivity_msg_cs': DiffInactivityMsgCs,
442 'basic_timestamp_ordering': BasicTimestampOrdering,
443 'multi_iter_ordering': MultiIterOrdering,
444}
445
446bt2.register_plugin(__name__, 'test-muxer')
This page took 0.037625 seconds and 4 git commands to generate.