configure: disable -Wmaybe-uninitialized
[babeltrace.git] / tests / bindings / python / bt2 / test_trace_collection_message_iterator.py
CommitLineData
0235b0db 1# SPDX-License-Identifier: GPL-2.0-only
d2d857a8
MJ
2#
3# Copyright (C) 2019 EfficiOS Inc.
4#
d2d857a8 5
704c2307
PP
6import unittest
7import datetime
704c2307
PP
8import bt2
9import os
10import os.path
11
12
f3c9a159 13_BT_TESTS_DATADIR = os.environ['BT_TESTS_DATADIR']
bbff0ab4 14_BT_CTF_TRACES_PATH = os.environ['BT_CTF_TRACES_PATH']
cfbd7cf3
FD
15_3EVENTS_INTERSECT_TRACE_PATH = os.path.join(
16 _BT_CTF_TRACES_PATH, 'intersection', '3eventsintersect'
17)
f3c9a159
SM
18_NOINTERSECT_TRACE_PATH = os.path.join(
19 _BT_CTF_TRACES_PATH, 'intersection', 'nointersect'
20)
21_SEQUENCE_TRACE_PATH = os.path.join(_BT_CTF_TRACES_PATH, 'succeed', 'sequence')
22_AUTO_SOURCE_DISCOVERY_GROUPING_PATH = os.path.join(
23 _BT_TESTS_DATADIR, 'auto-source-discovery', 'grouping'
24)
25_AUTO_SOURCE_DISCOVERY_PARAMS_LOG_LEVEL_PATH = os.path.join(
26 _BT_TESTS_DATADIR, 'auto-source-discovery', 'params-log-level'
27)
704c2307
PP
28
29
c87f23fa
SM
30class _SomeSource(
31 bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
32):
33 pass
34
35
36class _SomeFilter(
37 bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
38):
39 pass
40
41
42class _SomeSink(bt2._UserSinkComponent):
43 def _user_consume(self):
44 pass
45
46
3d60267b 47class ComponentSpecTestCase(unittest.TestCase):
c87f23fa
SM
48 def setUp(self):
49 # A source CC from a plugin.
50 self._dmesg_cc = bt2.find_plugin('text').source_component_classes['dmesg']
51 assert self._dmesg_cc is not None
52
53 # A filter CC from a plugin.
54 self._muxer_cc = bt2.find_plugin('utils').filter_component_classes['muxer']
55 assert self._muxer_cc is not None
56
57 # A sink CC from a plugin.
58 self._pretty_cc = bt2.find_plugin('text').sink_component_classes['pretty']
59 assert self._pretty_cc is not None
60
61 def test_create_source_from_name(self):
62 spec = bt2.ComponentSpec.from_named_plugin_and_component_class('text', 'dmesg')
63 self.assertEqual(spec.component_class.name, 'dmesg')
64
65 def test_create_source_from_plugin(self):
66 spec = bt2.ComponentSpec(self._dmesg_cc)
67 self.assertEqual(spec.component_class.name, 'dmesg')
68
69 def test_create_source_from_user(self):
70 spec = bt2.ComponentSpec(_SomeSource)
71 self.assertEqual(spec.component_class.name, '_SomeSource')
72
73 def test_create_filter_from_name(self):
74 spec = bt2.ComponentSpec.from_named_plugin_and_component_class('utils', 'muxer')
75 self.assertEqual(spec.component_class.name, 'muxer')
76
77 def test_create_filter_from_object(self):
78 spec = bt2.ComponentSpec(self._muxer_cc)
79 self.assertEqual(spec.component_class.name, 'muxer')
80
81 def test_create_sink_from_name(self):
82 with self.assertRaisesRegex(
83 KeyError,
84 'source or filter component class `pretty` not found in plugin `text`',
85 ):
86 bt2.ComponentSpec.from_named_plugin_and_component_class('text', 'pretty')
87
88 def test_create_sink_from_object(self):
89 with self.assertRaisesRegex(
615238be
FD
90 TypeError,
91 "'_SinkComponentClassConst' is not a source or filter component class",
c87f23fa
SM
92 ):
93 bt2.ComponentSpec(self._pretty_cc)
94
95 def test_create_from_object_with_params(self):
96 spec = bt2.ComponentSpec(self._dmesg_cc, {'salut': 23})
97 self.assertEqual(spec.params['salut'], 23)
98
99 def test_create_from_name_with_params(self):
100 spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
101 'text', 'dmesg', {'salut': 23}
102 )
103 self.assertEqual(spec.params['salut'], 23)
704c2307 104
c87f23fa
SM
105 def test_create_from_object_with_path_params(self):
106 spec = spec = bt2.ComponentSpec(self._dmesg_cc, 'a path')
107 self.assertEqual(spec.params['inputs'], ['a path'])
704c2307 108
c87f23fa
SM
109 def test_create_from_name_with_path_params(self):
110 spec = spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
111 'text', 'dmesg', 'a path'
112 )
73760435 113 self.assertEqual(spec.params['inputs'], ['a path'])
704c2307 114
c87f23fa
SM
115 def test_create_wrong_comp_class_type(self):
116 with self.assertRaisesRegex(
117 TypeError, "'int' is not a source or filter component class"
118 ):
119 bt2.ComponentSpec(18)
704c2307 120
c87f23fa
SM
121 def test_create_from_name_wrong_plugin_name_type(self):
122 with self.assertRaisesRegex(TypeError, "'int' is not a 'str' object"):
123 bt2.ComponentSpec.from_named_plugin_and_component_class(23, 'compcls')
124
125 def test_create_from_name_non_existent_plugin(self):
126 with self.assertRaisesRegex(
127 ValueError, "no such plugin: this_plugin_does_not_exist"
128 ):
129 bt2.ComponentSpec.from_named_plugin_and_component_class(
130 'this_plugin_does_not_exist', 'compcls'
131 )
132
133 def test_create_from_name_wrong_component_class_name_type(self):
134 with self.assertRaisesRegex(TypeError, "'int' is not a 'str' object"):
135 bt2.ComponentSpec.from_named_plugin_and_component_class('utils', 190)
704c2307
PP
136
137 def test_create_wrong_params_type(self):
c87f23fa
SM
138 with self.assertRaisesRegex(
139 TypeError, "cannot create value object from 'datetime' object"
140 ):
141 bt2.ComponentSpec(self._dmesg_cc, params=datetime.datetime.now())
142
143 def test_create_from_name_wrong_params_type(self):
144 with self.assertRaisesRegex(
145 TypeError, "cannot create value object from 'datetime' object"
146 ):
147 bt2.ComponentSpec.from_named_plugin_and_component_class(
148 'text', 'dmesg', datetime.datetime.now()
149 )
150
151 def test_create_wrong_log_level_type(self):
152 with self.assertRaisesRegex(TypeError, "'str' is not an 'int' object"):
153 bt2.ComponentSpec(self._dmesg_cc, logging_level='banane')
154
155 def test_create_from_name_wrong_log_level_type(self):
156 with self.assertRaisesRegex(TypeError, "'str' is not an 'int' object"):
157 bt2.ComponentSpec.from_named_plugin_and_component_class(
158 'text', 'dmesg', logging_level='banane'
159 )
907f2b70
SM
160
161
162# Return a map, msg type -> number of messages of this type.
163
cfbd7cf3 164
907f2b70
SM
165def _count_msgs_by_type(msgs):
166 res = {}
167
168 for msg in msgs:
169 t = type(msg)
170 n = res.get(t, 0)
171 res[t] = n + 1
172
173 return res
704c2307
PP
174
175
5602ef81 176class TraceCollectionMessageIteratorTestCase(unittest.TestCase):
704c2307 177 def test_create_wrong_stream_intersection_mode_type(self):
c87f23fa
SM
178 specs = [
179 bt2.ComponentSpec.from_named_plugin_and_component_class(
180 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
181 )
182 ]
704c2307
PP
183
184 with self.assertRaises(TypeError):
907f2b70 185 bt2.TraceCollectionMessageIterator(specs, stream_intersection_mode=23)
704c2307
PP
186
187 def test_create_wrong_begin_type(self):
c87f23fa
SM
188 specs = [
189 bt2.ComponentSpec.from_named_plugin_and_component_class(
190 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
191 )
192 ]
704c2307
PP
193
194 with self.assertRaises(TypeError):
907f2b70 195 bt2.TraceCollectionMessageIterator(specs, begin='hi')
704c2307
PP
196
197 def test_create_wrong_end_type(self):
c87f23fa
SM
198 specs = [
199 bt2.ComponentSpec.from_named_plugin_and_component_class(
200 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
201 )
202 ]
704c2307
PP
203
204 with self.assertRaises(TypeError):
907f2b70 205 bt2.TraceCollectionMessageIterator(specs, begin='lel')
704c2307 206
704c2307 207 def test_create_begin_s(self):
c87f23fa
SM
208 specs = [
209 bt2.ComponentSpec.from_named_plugin_and_component_class(
210 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
211 )
212 ]
907f2b70 213 bt2.TraceCollectionMessageIterator(specs, begin=19457.918232)
704c2307
PP
214
215 def test_create_end_s(self):
c87f23fa
SM
216 specs = [
217 bt2.ComponentSpec.from_named_plugin_and_component_class(
218 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
219 )
220 ]
907f2b70 221 bt2.TraceCollectionMessageIterator(specs, end=123.12312)
704c2307
PP
222
223 def test_create_begin_datetime(self):
c87f23fa
SM
224 specs = [
225 bt2.ComponentSpec.from_named_plugin_and_component_class(
226 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
227 )
228 ]
907f2b70 229 bt2.TraceCollectionMessageIterator(specs, begin=datetime.datetime.now())
704c2307
PP
230
231 def test_create_end_datetime(self):
c87f23fa
SM
232 specs = [
233 bt2.ComponentSpec.from_named_plugin_and_component_class(
234 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
235 )
236 ]
907f2b70 237 bt2.TraceCollectionMessageIterator(specs, end=datetime.datetime.now())
704c2307
PP
238
239 def test_iter_no_intersection(self):
c87f23fa
SM
240 specs = [
241 bt2.ComponentSpec.from_named_plugin_and_component_class(
242 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
243 )
244 ]
5602ef81 245 msg_iter = bt2.TraceCollectionMessageIterator(specs)
907f2b70 246 msgs = list(msg_iter)
188edac1 247 self.assertEqual(len(msgs), 28)
907f2b70 248 hist = _count_msgs_by_type(msgs)
f0a42b33 249 self.assertEqual(hist[bt2._EventMessageConst], 8)
704c2307 250
907f2b70 251 # Same as the above, but we pass a single spec instead of a spec list.
3d60267b 252 def test_iter_specs_not_list(self):
c87f23fa
SM
253 spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
254 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
255 )
907f2b70
SM
256 msg_iter = bt2.TraceCollectionMessageIterator(spec)
257 msgs = list(msg_iter)
188edac1 258 self.assertEqual(len(msgs), 28)
907f2b70 259 hist = _count_msgs_by_type(msgs)
f0a42b33 260 self.assertEqual(hist[bt2._EventMessageConst], 8)
3d60267b
PP
261
262 def test_iter_custom_filter(self):
c87f23fa
SM
263 src_spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
264 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
265 )
266 flt_spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
267 'utils', 'trimmer', {'end': '13515309.000000075'}
268 )
907f2b70
SM
269 msg_iter = bt2.TraceCollectionMessageIterator(src_spec, flt_spec)
270 hist = _count_msgs_by_type(msg_iter)
f0a42b33 271 self.assertEqual(hist[bt2._EventMessageConst], 5)
3d60267b 272
704c2307 273 def test_iter_intersection(self):
c87f23fa
SM
274 specs = [
275 bt2.ComponentSpec.from_named_plugin_and_component_class(
276 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
277 )
278 ]
cfbd7cf3
FD
279 msg_iter = bt2.TraceCollectionMessageIterator(
280 specs, stream_intersection_mode=True
281 )
907f2b70 282 msgs = list(msg_iter)
188edac1 283 self.assertEqual(len(msgs), 15)
907f2b70 284 hist = _count_msgs_by_type(msgs)
f0a42b33 285 self.assertEqual(hist[bt2._EventMessageConst], 3)
704c2307 286
3f3d89b4
SM
287 def test_iter_intersection_params(self):
288 # Check that all params used to create the source component are passed
5f2a1585 289 # to the `babeltrace.trace-infos` query.
c87f23fa
SM
290 specs = [
291 bt2.ComponentSpec.from_named_plugin_and_component_class(
3f3d89b4
SM
292 'ctf',
293 'fs',
294 {
295 'inputs': [_3EVENTS_INTERSECT_TRACE_PATH],
296 'clock-class-offset-s': 1000,
297 },
c87f23fa
SM
298 )
299 ]
704c2307 300
3f3d89b4
SM
301 msg_iter = bt2.TraceCollectionMessageIterator(
302 specs, stream_intersection_mode=True
303 )
304
f0a42b33 305 event_msgs = [x for x in msg_iter if type(x) is bt2._EventMessageConst]
3f3d89b4
SM
306 self.assertEqual(len(event_msgs), 3)
307 self.assertEqual(
308 event_msgs[0].default_clock_snapshot.ns_from_origin, 13516309000000071
309 )
310 self.assertEqual(
311 event_msgs[1].default_clock_snapshot.ns_from_origin, 13516309000000072
312 )
313 self.assertEqual(
314 event_msgs[2].default_clock_snapshot.ns_from_origin, 13516309000000082
315 )
704c2307
PP
316
317 def test_iter_no_intersection_two_traces(self):
c87f23fa
SM
318 spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
319 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
320 )
704c2307 321 specs = [spec, spec]
5602ef81 322 msg_iter = bt2.TraceCollectionMessageIterator(specs)
907f2b70 323 msgs = list(msg_iter)
188edac1 324 self.assertEqual(len(msgs), 56)
907f2b70 325 hist = _count_msgs_by_type(msgs)
f0a42b33 326 self.assertEqual(hist[bt2._EventMessageConst], 16)
704c2307
PP
327
328 def test_iter_no_intersection_begin(self):
c87f23fa
SM
329 specs = [
330 bt2.ComponentSpec.from_named_plugin_and_component_class(
331 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
332 )
333 ]
907f2b70
SM
334 msg_iter = bt2.TraceCollectionMessageIterator(specs, begin=13515309.000000023)
335 hist = _count_msgs_by_type(msg_iter)
f0a42b33 336 self.assertEqual(hist[bt2._EventMessageConst], 6)
704c2307
PP
337
338 def test_iter_no_intersection_end(self):
c87f23fa
SM
339 specs = [
340 bt2.ComponentSpec.from_named_plugin_and_component_class(
341 'ctf', 'fs', _3EVENTS_INTERSECT_TRACE_PATH
342 )
343 ]
907f2b70
SM
344 msg_iter = bt2.TraceCollectionMessageIterator(specs, end=13515309.000000075)
345 hist = _count_msgs_by_type(msg_iter)
f0a42b33 346 self.assertEqual(hist[bt2._EventMessageConst], 5)
f3c9a159
SM
347
348 def test_iter_auto_source_component_spec(self):
349 specs = [bt2.AutoSourceComponentSpec(_3EVENTS_INTERSECT_TRACE_PATH)]
350 msg_iter = bt2.TraceCollectionMessageIterator(specs)
351 msgs = list(msg_iter)
352 self.assertEqual(len(msgs), 28)
353 hist = _count_msgs_by_type(msgs)
f0a42b33 354 self.assertEqual(hist[bt2._EventMessageConst], 8)
f3c9a159
SM
355
356 def test_iter_auto_source_component_spec_list_of_strings(self):
357 msg_iter = bt2.TraceCollectionMessageIterator([_3EVENTS_INTERSECT_TRACE_PATH])
358 msgs = list(msg_iter)
359 self.assertEqual(len(msgs), 28)
360 hist = _count_msgs_by_type(msgs)
f0a42b33 361 self.assertEqual(hist[bt2._EventMessageConst], 8)
f3c9a159
SM
362
363 def test_iter_auto_source_component_spec_string(self):
364 msg_iter = bt2.TraceCollectionMessageIterator(_3EVENTS_INTERSECT_TRACE_PATH)
365 msgs = list(msg_iter)
366 self.assertEqual(len(msgs), 28)
367 hist = _count_msgs_by_type(msgs)
f0a42b33 368 self.assertEqual(hist[bt2._EventMessageConst], 8)
f3c9a159
SM
369
370 def test_iter_mixed_inputs(self):
371 msg_iter = bt2.TraceCollectionMessageIterator(
372 [
373 _3EVENTS_INTERSECT_TRACE_PATH,
374 bt2.AutoSourceComponentSpec(_SEQUENCE_TRACE_PATH),
c87f23fa
SM
375 bt2.ComponentSpec.from_named_plugin_and_component_class(
376 'ctf', 'fs', _NOINTERSECT_TRACE_PATH
377 ),
f3c9a159
SM
378 ]
379 )
380 msgs = list(msg_iter)
381 self.assertEqual(len(msgs), 76)
382 hist = _count_msgs_by_type(msgs)
f0a42b33 383 self.assertEqual(hist[bt2._EventMessageConst], 24)
f3c9a159 384
39b351f9
SM
385 def test_auto_source_component_non_existent(self):
386 with self.assertRaisesRegex(
387 RuntimeError,
388 'Some auto source component specs did not produce any component',
389 ):
390 # Test with one path known to contain a trace and one path known
391 # to not contain any trace.
392 bt2.TraceCollectionMessageIterator(
393 [_SEQUENCE_TRACE_PATH, '/this/path/better/not/exist']
394 )
395
f3c9a159
SM
396
397class _TestAutoDiscoverSourceComponentSpecs(unittest.TestCase):
398 def setUp(self):
399 self._saved_babeltrace_plugin_path = os.environ['BABELTRACE_PLUGIN_PATH']
53487b4e 400 os.environ['BABELTRACE_PLUGIN_PATH'] += os.pathsep + self._plugin_path
f3c9a159
SM
401
402 def tearDown(self):
403 os.environ['BABELTRACE_PLUGIN_PATH'] = self._saved_babeltrace_plugin_path
404
405
406class TestAutoDiscoverSourceComponentSpecsGrouping(
407 _TestAutoDiscoverSourceComponentSpecs
408):
409 _plugin_path = _AUTO_SOURCE_DISCOVERY_GROUPING_PATH
410
411 def test_grouping(self):
412 specs = [
413 bt2.AutoSourceComponentSpec('ABCDE'),
414 bt2.AutoSourceComponentSpec(_AUTO_SOURCE_DISCOVERY_GROUPING_PATH),
f3c9a159
SM
415 ]
416 it = bt2.TraceCollectionMessageIterator(specs)
f0a42b33 417 msgs = [x for x in it if type(x) is bt2._StreamBeginningMessageConst]
f3c9a159
SM
418
419 self.assertEqual(len(msgs), 8)
420
421 self.assertEqual(msgs[0].stream.name, 'TestSourceABCDE: ABCDE')
422 self.assertEqual(msgs[1].stream.name, 'TestSourceExt: aaa1, aaa2, aaa3')
423 self.assertEqual(msgs[2].stream.name, 'TestSourceExt: bbb1, bbb2')
424 self.assertEqual(msgs[3].stream.name, 'TestSourceExt: ccc1')
425 self.assertEqual(msgs[4].stream.name, 'TestSourceExt: ccc2')
426 self.assertEqual(msgs[5].stream.name, 'TestSourceExt: ccc3')
427 self.assertEqual(msgs[6].stream.name, 'TestSourceExt: ccc4')
428 self.assertEqual(msgs[7].stream.name, 'TestSourceSomeDir: some-dir')
429
430
431class TestAutoDiscoverSourceComponentSpecsParamsObjLogLevel(
432 _TestAutoDiscoverSourceComponentSpecs
433):
434 _plugin_path = _AUTO_SOURCE_DISCOVERY_PARAMS_LOG_LEVEL_PATH
435
436 _dir_a = os.path.join(_AUTO_SOURCE_DISCOVERY_PARAMS_LOG_LEVEL_PATH, 'dir-a')
437 _dir_b = os.path.join(_AUTO_SOURCE_DISCOVERY_PARAMS_LOG_LEVEL_PATH, 'dir-b')
438 _dir_ab = os.path.join(_AUTO_SOURCE_DISCOVERY_PARAMS_LOG_LEVEL_PATH, 'dir-ab')
439
440 def _test_two_comps_from_one_spec(self, params, obj=None, logging_level=None):
441 specs = [
442 bt2.AutoSourceComponentSpec(
443 self._dir_ab, params=params, obj=obj, logging_level=logging_level
444 )
445 ]
446 it = bt2.TraceCollectionMessageIterator(specs)
f0a42b33 447 msgs = [x for x in it if type(x) is bt2._StreamBeginningMessageConst]
f3c9a159
SM
448
449 self.assertEqual(len(msgs), 2)
450
451 return msgs
452
453 def test_params_two_comps_from_one_spec(self):
454 msgs = self._test_two_comps_from_one_spec(
455 params={'test-allo': 'madame', 'what': 'test-params'}
456 )
457
458 self.assertEqual(msgs[0].stream.name, "TestSourceA: ('test-allo', 'madame')")
459 self.assertEqual(msgs[1].stream.name, "TestSourceB: ('test-allo', 'madame')")
460
461 def test_obj_two_comps_from_one_spec(self):
462 msgs = self._test_two_comps_from_one_spec(
463 params={'what': 'python-obj'}, obj='deore'
464 )
465
466 self.assertEqual(msgs[0].stream.name, "TestSourceA: deore")
467 self.assertEqual(msgs[1].stream.name, "TestSourceB: deore")
468
469 def test_log_level_two_comps_from_one_spec(self):
470 msgs = self._test_two_comps_from_one_spec(
471 params={'what': 'log-level'}, logging_level=bt2.LoggingLevel.DEBUG
472 )
473
474 self.assertEqual(
475 msgs[0].stream.name, "TestSourceA: {}".format(bt2.LoggingLevel.DEBUG)
476 )
477 self.assertEqual(
478 msgs[1].stream.name, "TestSourceB: {}".format(bt2.LoggingLevel.DEBUG)
479 )
480
481 def _test_two_comps_from_two_specs(
482 self,
483 params_a=None,
484 params_b=None,
485 obj_a=None,
486 obj_b=None,
487 logging_level_a=None,
488 logging_level_b=None,
489 ):
490 specs = [
491 bt2.AutoSourceComponentSpec(
492 self._dir_a, params=params_a, obj=obj_a, logging_level=logging_level_a
493 ),
494 bt2.AutoSourceComponentSpec(
495 self._dir_b, params=params_b, obj=obj_b, logging_level=logging_level_b
496 ),
497 ]
498 it = bt2.TraceCollectionMessageIterator(specs)
f0a42b33 499 msgs = [x for x in it if type(x) is bt2._StreamBeginningMessageConst]
f3c9a159
SM
500
501 self.assertEqual(len(msgs), 2)
502
503 return msgs
504
505 def test_params_two_comps_from_two_specs(self):
506 msgs = self._test_two_comps_from_two_specs(
507 params_a={'test-allo': 'madame', 'what': 'test-params'},
508 params_b={'test-bonjour': 'monsieur', 'what': 'test-params'},
509 )
510
511 self.assertEqual(msgs[0].stream.name, "TestSourceA: ('test-allo', 'madame')")
512 self.assertEqual(
513 msgs[1].stream.name, "TestSourceB: ('test-bonjour', 'monsieur')"
514 )
515
516 def test_obj_two_comps_from_two_specs(self):
517 msgs = self._test_two_comps_from_two_specs(
518 params_a={'what': 'python-obj'},
519 params_b={'what': 'python-obj'},
520 obj_a='deore',
521 obj_b='alivio',
522 )
523
524 self.assertEqual(msgs[0].stream.name, "TestSourceA: deore")
525 self.assertEqual(msgs[1].stream.name, "TestSourceB: alivio")
526
527 def test_log_level_two_comps_from_two_specs(self):
528 msgs = self._test_two_comps_from_two_specs(
529 params_a={'what': 'log-level'},
530 params_b={'what': 'log-level'},
531 logging_level_a=bt2.LoggingLevel.DEBUG,
532 logging_level_b=bt2.LoggingLevel.TRACE,
533 )
534
535 self.assertEqual(
536 msgs[0].stream.name, "TestSourceA: {}".format(bt2.LoggingLevel.DEBUG)
537 )
538 self.assertEqual(
539 msgs[1].stream.name, "TestSourceB: {}".format(bt2.LoggingLevel.TRACE)
540 )
541
542 def _test_one_comp_from_one_spec_one_comp_from_both_1(
543 self,
544 params_a=None,
545 params_ab=None,
546 obj_a=None,
547 obj_ab=None,
548 logging_level_a=None,
549 logging_level_ab=None,
550 ):
551 specs = [
552 bt2.AutoSourceComponentSpec(
553 self._dir_a, params=params_a, obj=obj_a, logging_level=logging_level_a
554 ),
555 bt2.AutoSourceComponentSpec(
556 self._dir_ab,
557 params=params_ab,
558 obj=obj_ab,
559 logging_level=logging_level_ab,
560 ),
561 ]
562 it = bt2.TraceCollectionMessageIterator(specs)
f0a42b33 563 msgs = [x for x in it if type(x) is bt2._StreamBeginningMessageConst]
f3c9a159
SM
564
565 self.assertEqual(len(msgs), 2)
566
567 return msgs
568
569 def test_params_one_comp_from_one_spec_one_comp_from_both_1(self):
570 msgs = self._test_one_comp_from_one_spec_one_comp_from_both_1(
571 params_a={'test-allo': 'madame', 'what': 'test-params'},
572 params_ab={'test-bonjour': 'monsieur', 'what': 'test-params'},
573 )
574
575 self.assertEqual(
576 msgs[0].stream.name,
577 "TestSourceA: ('test-allo', 'madame'), ('test-bonjour', 'monsieur')",
578 )
579 self.assertEqual(
580 msgs[1].stream.name, "TestSourceB: ('test-bonjour', 'monsieur')"
581 )
582
583 def test_obj_one_comp_from_one_spec_one_comp_from_both_1(self):
584 msgs = self._test_one_comp_from_one_spec_one_comp_from_both_1(
585 params_a={'what': 'python-obj'},
586 params_ab={'what': 'python-obj'},
587 obj_a='deore',
588 obj_ab='alivio',
589 )
590
591 self.assertEqual(msgs[0].stream.name, "TestSourceA: alivio")
592 self.assertEqual(msgs[1].stream.name, "TestSourceB: alivio")
593
594 def test_log_level_one_comp_from_one_spec_one_comp_from_both_1(self):
595 msgs = self._test_one_comp_from_one_spec_one_comp_from_both_1(
596 params_a={'what': 'log-level'},
597 params_ab={'what': 'log-level'},
598 logging_level_a=bt2.LoggingLevel.DEBUG,
599 logging_level_ab=bt2.LoggingLevel.TRACE,
600 )
601
602 self.assertEqual(
603 msgs[0].stream.name, "TestSourceA: {}".format(bt2.LoggingLevel.TRACE)
604 )
605 self.assertEqual(
606 msgs[1].stream.name, "TestSourceB: {}".format(bt2.LoggingLevel.TRACE)
607 )
608
609 def _test_one_comp_from_one_spec_one_comp_from_both_2(
610 self,
611 params_ab=None,
612 params_a=None,
613 obj_ab=None,
614 obj_a=None,
615 logging_level_ab=None,
616 logging_level_a=None,
617 ):
618 specs = [
619 bt2.AutoSourceComponentSpec(
620 self._dir_ab,
621 params=params_ab,
622 obj=obj_ab,
623 logging_level=logging_level_ab,
624 ),
625 bt2.AutoSourceComponentSpec(
626 self._dir_a, params=params_a, obj=obj_a, logging_level=logging_level_a
627 ),
628 ]
629 it = bt2.TraceCollectionMessageIterator(specs)
f0a42b33 630 msgs = [x for x in it if type(x) is bt2._StreamBeginningMessageConst]
f3c9a159
SM
631
632 self.assertEqual(len(msgs), 2)
633
634 return msgs
635
636 def test_params_one_comp_from_one_spec_one_comp_from_both_2(self):
637 msgs = self._test_one_comp_from_one_spec_one_comp_from_both_2(
638 params_ab={
639 'test-bonjour': 'madame',
640 'test-salut': 'les amis',
641 'what': 'test-params',
642 },
643 params_a={'test-bonjour': 'monsieur', 'what': 'test-params'},
644 )
645
646 self.assertEqual(
647 msgs[0].stream.name,
648 "TestSourceA: ('test-bonjour', 'monsieur'), ('test-salut', 'les amis')",
649 )
650 self.assertEqual(
651 msgs[1].stream.name,
652 "TestSourceB: ('test-bonjour', 'madame'), ('test-salut', 'les amis')",
653 )
654
655 def test_obj_one_comp_from_one_spec_one_comp_from_both_2(self):
656 msgs = self._test_one_comp_from_one_spec_one_comp_from_both_2(
657 params_ab={'what': 'python-obj'},
658 params_a={'what': 'python-obj'},
659 obj_ab='deore',
660 obj_a='alivio',
661 )
662
663 self.assertEqual(msgs[0].stream.name, "TestSourceA: alivio")
664 self.assertEqual(msgs[1].stream.name, "TestSourceB: deore")
665
666 def test_log_level_one_comp_from_one_spec_one_comp_from_both_2(self):
667 msgs = self._test_one_comp_from_one_spec_one_comp_from_both_2(
668 params_ab={'what': 'log-level'},
669 params_a={'what': 'log-level'},
670 logging_level_ab=bt2.LoggingLevel.DEBUG,
671 logging_level_a=bt2.LoggingLevel.TRACE,
672 )
673
674 self.assertEqual(
675 msgs[0].stream.name, "TestSourceA: {}".format(bt2.LoggingLevel.TRACE)
676 )
677 self.assertEqual(
678 msgs[1].stream.name, "TestSourceB: {}".format(bt2.LoggingLevel.DEBUG)
679 )
680
681 def test_obj_override_with_none(self):
682 specs = [
683 bt2.AutoSourceComponentSpec(
684 self._dir_ab, params={'what': 'python-obj'}, obj='deore'
685 ),
686 bt2.AutoSourceComponentSpec(
687 self._dir_a, params={'what': 'python-obj'}, obj=None
688 ),
689 ]
690 it = bt2.TraceCollectionMessageIterator(specs)
f0a42b33 691 msgs = [x for x in it if type(x) is bt2._StreamBeginningMessageConst]
f3c9a159
SM
692
693 self.assertEqual(len(msgs), 2)
694 self.assertEqual(msgs[0].stream.name, "TestSourceA: None")
695 self.assertEqual(msgs[1].stream.name, "TestSourceB: deore")
696
697 def test_obj_no_override_with_no_obj(self):
698 specs = [
699 bt2.AutoSourceComponentSpec(
700 self._dir_ab, params={'what': 'python-obj'}, obj='deore'
701 ),
702 bt2.AutoSourceComponentSpec(self._dir_a, params={'what': 'python-obj'}),
703 ]
704 it = bt2.TraceCollectionMessageIterator(specs)
f0a42b33 705 msgs = [x for x in it if type(x) is bt2._StreamBeginningMessageConst]
f3c9a159
SM
706
707 self.assertEqual(len(msgs), 2)
708 self.assertEqual(msgs[0].stream.name, "TestSourceA: deore")
709 self.assertEqual(msgs[1].stream.name, "TestSourceB: deore")
710
711
712if __name__ == '__main__':
713 unittest.main()
This page took 0.089157 seconds and 4 git commands to generate.