-class OutputPortMessageIteratorTestCase(unittest.TestCase):
- def test_component(self):
- class MyIter(bt2._UserMessageIterator):
- def __init__(self, self_port_output):
- self._at = 0
-
- def __next__(self):
- if self._at == 7:
- raise bt2.Stop
-
- if self._at == 0:
- msg = self._create_stream_beginning_message(test_obj._stream)
- elif self._at == 1:
- msg = self._create_packet_beginning_message(test_obj._packet)
- elif self._at == 5:
- msg = self._create_packet_end_message(test_obj._packet)
- elif self._at == 6:
- msg = self._create_stream_end_message(test_obj._stream)
- else:
- msg = self._create_event_message(
- test_obj._event_class, test_obj._packet
- )
- msg.event.payload_field['my_int'] = self._at * 3
-
- self._at += 1
- return msg
-
- class MySource(bt2._UserSourceComponent, message_iterator_class=MyIter):
- def __init__(self, params):
- self._add_output_port('out')
-
- trace_class = self._create_trace_class()
- stream_class = trace_class.create_stream_class(supports_packets=True)
-
- # Create payload field class
- my_int_ft = trace_class.create_signed_integer_field_class(32)
- payload_ft = trace_class.create_structure_field_class()
- payload_ft += [('my_int', my_int_ft)]
-
- event_class = stream_class.create_event_class(
- name='salut', payload_field_class=payload_ft
- )
-
- trace = trace_class()
- stream = trace.create_stream(stream_class)
- packet = stream.create_packet()
-
- test_obj._event_class = event_class
- test_obj._stream = stream
- test_obj._packet = packet
-
- test_obj = self
- graph = bt2.Graph()
- src = graph.add_component(MySource, 'src')
- msg_iter = graph.create_output_port_message_iterator(src.output_ports['out'])
-
- for at, msg in enumerate(msg_iter):
- if at == 0:
- self.assertIsInstance(msg, bt2._StreamBeginningMessage)
- elif at == 1:
- self.assertIsInstance(msg, bt2._PacketBeginningMessage)
- elif at == 5:
- self.assertIsInstance(msg, bt2._PacketEndMessage)
- elif at == 6:
- self.assertIsInstance(msg, bt2._StreamEndMessage)
- else:
- self.assertIsInstance(msg, bt2._EventMessage)
- self.assertEqual(msg.event.cls.name, 'salut')
- field = msg.event.payload_field['my_int']
- self.assertEqual(field, at * 3)
-
-