Commit | Line | Data |
---|---|---|
38403bf5 FD |
1 | import bt2 |
2 | ||
3 | ||
4 | class 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 | |
19 | class 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 | ||
30 | class 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 | ||
57 | class 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 | ||
84 | class 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 | ||
111 | class 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 | ||
138 | class 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 | ||
167 | class 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 | ||
197 | class 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 | ||
227 | class 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 | ||
252 | class 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 | ||
341 | class 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 | ||
377 | class 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 | ||
413 | class 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 | ||
431 | TEST_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 | ||
446 | bt2.register_plugin(__name__, 'test-muxer') |