import bt2
import os
-# This file defines source component classes that can print (depending the on
-# the `print` param):
+# This file defines source component classes to help verify the parameters an
+# log levels passed to components. Each component creates one stream, with a
+# name derived from either:
#
-# - Parameter names and values, for parameter whose name starts with `test-`.
-# - Component log levels as integers
+# - the received params that start with `test-`
+# - the received log level
+#
+# The `what` parameter determines what is used.
class TestIter(bt2._UserMessageIterator):
- pass
+ def __init__(self, output_port):
+ params = output_port.user_data['params']
+ comp_cls_name = self._component.__class__.__name__
-class Base:
- @classmethod
- def _print_test_params(cls, params):
- items = sorted([str(x) for x in params.items() if x[0].startswith('test-')])
- print('{}: {}'.format(cls.__name__, ', '.join(items)))
-
- def _print_log_level(self):
- cls_name = self.__class__.__name__
- log_level = self.logging_level
- print('{}: {}'.format(cls_name, log_level))
-
- def _print_info(self, params):
- what = params['print']
- if what == 'test-params':
- self._print_test_params(params)
- elif what == 'log-level':
- self._print_log_level()
+ if params['what'] == 'test-params':
+ items = sorted([str(x) for x in params.items() if x[0].startswith('test-')])
+ stream_name = '{}: {}'.format(comp_cls_name, ', '.join(items))
+ elif params['what'] == 'log-level':
+ log_level = self._component.logging_level
+ stream_name = '{}: {}'.format(comp_cls_name, log_level)
else:
assert False
+ sc = output_port.user_data['sc']
+ tc = sc.trace_class
+ t = tc()
+ s = t.create_stream(sc, name=stream_name)
+
+ self._msgs = [
+ self._create_stream_beginning_message(s),
+ self._create_stream_end_message(s),
+ ]
+
+ def __next__(self):
+ if len(self._msgs) == 0:
+ raise StopIteration
+
+ return self._msgs.pop(0)
+
+
+class Base:
+ def __init__(self, params):
+ tc = self._create_trace_class()
+ sc = tc.create_stream_class()
+
+ self._add_output_port('out', {'params': params, 'sc': sc})
+
@bt2.plugin_component_class
class TestSourceA(Base, bt2._UserSourceComponent, message_iterator_class=TestIter):
- def __init__(self, params):
- self._print_info(params)
+ def __init__(self, params, obj):
+ super().__init__(params)
@staticmethod
def _user_query(priv_query_exec, obj, params, method_obj):
@bt2.plugin_component_class
class TestSourceB(Base, bt2._UserSourceComponent, message_iterator_class=TestIter):
- def __init__(self, params):
- self._print_info(params)
+ def __init__(self, params, obj):
+ super().__init__(params)
@staticmethod
def _user_query(priv_query_exec, obj, params, method_obj):