tests: src.ctf.fs: add test for metadata with invalid syntax
[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
f5567ea8
FD
13_BT_TESTS_DATADIR = os.environ["BT_TESTS_DATADIR"]
14_BT_CTF_TRACES_PATH = os.environ["BT_CTF_TRACES_PATH"]
cfbd7cf3 15_3EVENTS_INTERSECT_TRACE_PATH = os.path.join(
f5567ea8 16 _BT_CTF_TRACES_PATH, "intersection", "3eventsintersect"
cfbd7cf3 17)
f3c9a159 18_NOINTERSECT_TRACE_PATH = os.path.join(
f5567ea8 19 _BT_CTF_TRACES_PATH, "intersection", "nointersect"
f3c9a159 20)
f5567ea8 21_SEQUENCE_TRACE_PATH = os.path.join(_BT_CTF_TRACES_PATH, "succeed", "sequence")
f3c9a159 22_AUTO_SOURCE_DISCOVERY_GROUPING_PATH = os.path.join(
f5567ea8 23 _BT_TESTS_DATADIR, "auto-source-discovery", "grouping"
f3c9a159
SM
24)
25_AUTO_SOURCE_DISCOVERY_PARAMS_LOG_LEVEL_PATH = os.path.join(
f5567ea8 26 _BT_TESTS_DATADIR, "auto-source-discovery", "params-log-level"
f3c9a159 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.
f5567ea8 50 self._dmesg_cc = bt2.find_plugin("text").source_component_classes["dmesg"]
c87f23fa
SM
51 assert self._dmesg_cc is not None
52
53 # A filter CC from a plugin.
f5567ea8 54 self._muxer_cc = bt2.find_plugin("utils").filter_component_classes["muxer"]
c87f23fa
SM
55 assert self._muxer_cc is not None
56
57 # A sink CC from a plugin.
f5567ea8 58 self._pretty_cc = bt2.find_plugin("text").sink_component_classes["pretty"]
c87f23fa
SM
59 assert self._pretty_cc is not None
60
61 def test_create_source_from_name(self):
f5567ea8
FD
62 spec = bt2.ComponentSpec.from_named_plugin_and_component_class("text", "dmesg")
63 self.assertEqual(spec.component_class.name, "dmesg")
c87f23fa
SM
64
65 def test_create_source_from_plugin(self):
66 spec = bt2.ComponentSpec(self._dmesg_cc)
f5567ea8 67 self.assertEqual(spec.component_class.name, "dmesg")
c87f23fa
SM
68
69 def test_create_source_from_user(self):
70 spec = bt2.ComponentSpec(_SomeSource)
f5567ea8 71 self.assertEqual(spec.component_class.name, "_SomeSource")
c87f23fa
SM
72
73 def test_create_filter_from_name(self):
f5567ea8
FD
74 spec = bt2.ComponentSpec.from_named_plugin_and_component_class("utils", "muxer")
75 self.assertEqual(spec.component_class.name, "muxer")
c87f23fa
SM
76
77 def test_create_filter_from_object(self):
78 spec = bt2.ComponentSpec(self._muxer_cc)
f5567ea8 79 self.assertEqual(spec.component_class.name, "muxer")
c87f23fa
SM
80
81 def test_create_sink_from_name(self):
82 with self.assertRaisesRegex(
83 KeyError,
f5567ea8 84 "source or filter component class `pretty` not found in plugin `text`",
c87f23fa 85 ):
f5567ea8 86 bt2.ComponentSpec.from_named_plugin_and_component_class("text", "pretty")
c87f23fa
SM
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):
f5567ea8
FD
96 spec = bt2.ComponentSpec(self._dmesg_cc, {"salut": 23})
97 self.assertEqual(spec.params["salut"], 23)
c87f23fa
SM
98
99 def test_create_from_name_with_params(self):
100 spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
f5567ea8 101 "text", "dmesg", {"salut": 23}
c87f23fa 102 )
f5567ea8 103 self.assertEqual(spec.params["salut"], 23)
704c2307 104
c87f23fa 105 def test_create_from_object_with_path_params(self):
f5567ea8
FD
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(
f5567ea8 111 "text", "dmesg", "a path"
c87f23fa 112 )
f5567ea8 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"):
f5567ea8 123 bt2.ComponentSpec.from_named_plugin_and_component_class(23, "compcls")
c87f23fa
SM
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(
f5567ea8 130 "this_plugin_does_not_exist", "compcls"
c87f23fa
SM
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"):
f5567ea8 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(
f5567ea8 148 "text", "dmesg", datetime.datetime.now()
c87f23fa
SM
149 )
150
151 def test_create_wrong_log_level_type(self):
152 with self.assertRaisesRegex(TypeError, "'str' is not an 'int' object"):
f5567ea8 153 bt2.ComponentSpec(self._dmesg_cc, logging_level="banane")
c87f23fa
SM
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(
f5567ea8 158 "text", "dmesg", logging_level="banane"
c87f23fa 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(
f5567ea8 180 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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(
f5567ea8 190 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
191 )
192 ]
704c2307
PP
193
194 with self.assertRaises(TypeError):
f5567ea8 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(
f5567ea8 200 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
201 )
202 ]
704c2307
PP
203
204 with self.assertRaises(TypeError):
f5567ea8 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(
f5567ea8 210 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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(
f5567ea8 218 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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(
f5567ea8 226 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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(
f5567ea8 234 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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(
f5567ea8 242 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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 253 spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
f5567ea8 254 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa 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 263 src_spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
f5567ea8 264 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
265 )
266 flt_spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
f5567ea8 267 "utils", "trimmer", {"end": "13515309.000000075"}
c87f23fa 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(
f5567ea8 276 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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(
f5567ea8
FD
292 "ctf",
293 "fs",
3f3d89b4 294 {
f5567ea8
FD
295 "inputs": [_3EVENTS_INTERSECT_TRACE_PATH],
296 "clock-class-offset-s": 1000,
3f3d89b4 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 318 spec = bt2.ComponentSpec.from_named_plugin_and_component_class(
f5567ea8 319 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa 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(
f5567ea8 331 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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(
f5567ea8 341 "ctf", "fs", _3EVENTS_INTERSECT_TRACE_PATH
c87f23fa
SM
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 375 bt2.ComponentSpec.from_named_plugin_and_component_class(
f5567ea8 376 "ctf", "fs", _NOINTERSECT_TRACE_PATH
c87f23fa 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,
f5567ea8 388 "Some auto source component specs did not produce any component",
39b351f9
SM
389 ):
390 # Test with one path known to contain a trace and one path known
391 # to not contain any trace.
392 bt2.TraceCollectionMessageIterator(
f5567ea8 393 [_SEQUENCE_TRACE_PATH, "/this/path/better/not/exist"]
39b351f9
SM
394 )
395
f3c9a159
SM
396
397class _TestAutoDiscoverSourceComponentSpecs(unittest.TestCase):
398 def setUp(self):
f5567ea8
FD
399 self._saved_babeltrace_plugin_path = os.environ["BABELTRACE_PLUGIN_PATH"]
400 os.environ["BABELTRACE_PLUGIN_PATH"] += os.pathsep + self._plugin_path
f3c9a159
SM
401
402 def tearDown(self):
f5567ea8 403 os.environ["BABELTRACE_PLUGIN_PATH"] = self._saved_babeltrace_plugin_path
f3c9a159
SM
404
405
406class TestAutoDiscoverSourceComponentSpecsGrouping(
407 _TestAutoDiscoverSourceComponentSpecs
408):
409 _plugin_path = _AUTO_SOURCE_DISCOVERY_GROUPING_PATH
410
411 def test_grouping(self):
412 specs = [
f5567ea8 413 bt2.AutoSourceComponentSpec("ABCDE"),
f3c9a159 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
f5567ea8
FD
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")
f3c9a159
SM
429
430
431class TestAutoDiscoverSourceComponentSpecsParamsObjLogLevel(
432 _TestAutoDiscoverSourceComponentSpecs
433):
434 _plugin_path = _AUTO_SOURCE_DISCOVERY_PARAMS_LOG_LEVEL_PATH
435
f5567ea8
FD
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")
f3c9a159
SM
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(
f5567ea8 455 params={"test-allo": "madame", "what": "test-params"}
f3c9a159
SM
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(
f5567ea8 463 params={"what": "python-obj"}, obj="deore"
f3c9a159
SM
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(
f5567ea8 471 params={"what": "log-level"}, logging_level=bt2.LoggingLevel.DEBUG
f3c9a159
SM
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(
f5567ea8
FD
507 params_a={"test-allo": "madame", "what": "test-params"},
508 params_b={"test-bonjour": "monsieur", "what": "test-params"},
f3c9a159
SM
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(
f5567ea8
FD
518 params_a={"what": "python-obj"},
519 params_b={"what": "python-obj"},
520 obj_a="deore",
521 obj_b="alivio",
f3c9a159
SM
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(
f5567ea8
FD
529 params_a={"what": "log-level"},
530 params_b={"what": "log-level"},
f3c9a159
SM
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(
f5567ea8
FD
571 params_a={"test-allo": "madame", "what": "test-params"},
572 params_ab={"test-bonjour": "monsieur", "what": "test-params"},
f3c9a159
SM
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(
f5567ea8
FD
585 params_a={"what": "python-obj"},
586 params_ab={"what": "python-obj"},
587 obj_a="deore",
588 obj_ab="alivio",
f3c9a159
SM
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(
f5567ea8
FD
596 params_a={"what": "log-level"},
597 params_ab={"what": "log-level"},
f3c9a159
SM
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={
f5567ea8
FD
639 "test-bonjour": "madame",
640 "test-salut": "les amis",
641 "what": "test-params",
f3c9a159 642 },
f5567ea8 643 params_a={"test-bonjour": "monsieur", "what": "test-params"},
f3c9a159
SM
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(
f5567ea8
FD
657 params_ab={"what": "python-obj"},
658 params_a={"what": "python-obj"},
659 obj_ab="deore",
660 obj_a="alivio",
f3c9a159
SM
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(
f5567ea8
FD
668 params_ab={"what": "log-level"},
669 params_a={"what": "log-level"},
f3c9a159
SM
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(
f5567ea8 684 self._dir_ab, params={"what": "python-obj"}, obj="deore"
f3c9a159
SM
685 ),
686 bt2.AutoSourceComponentSpec(
f5567ea8 687 self._dir_a, params={"what": "python-obj"}, obj=None
f3c9a159
SM
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(
f5567ea8 700 self._dir_ab, params={"what": "python-obj"}, obj="deore"
f3c9a159 701 ),
f5567ea8 702 bt2.AutoSourceComponentSpec(self._dir_a, params={"what": "python-obj"}),
f3c9a159
SM
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
f5567ea8 712if __name__ == "__main__":
f3c9a159 713 unittest.main()
This page took 0.09208 seconds and 4 git commands to generate.