6e1999de47e501437e34a28ab2cdff7331dcc074
[babeltrace.git] / tests / bindings / python / bt2 / test_message.py
1 #
2 # Copyright (C) 2019 EfficiOS Inc.
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; only version 2
7 # of the License.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 #
18
19 import collections
20 import unittest
21 import bt2
22
23
24 class AllMessagesTestCase(unittest.TestCase):
25 def setUp(self):
26
27 class MyIter(bt2._UserMessageIterator):
28 def __init__(self, self_port_output):
29 self._at = 0
30 self._with_stream_msgs_clock_snapshots = self_port_output.user_data.get('with_stream_msgs_clock_snapshots', False)
31
32 def __next__(self):
33 if test_obj._clock_class:
34 if self._at == 0:
35 if self._with_stream_msgs_clock_snapshots:
36 msg = self._create_stream_beginning_message(test_obj._stream, default_clock_snapshot=self._at)
37 else:
38 msg = self._create_stream_beginning_message(test_obj._stream)
39 elif self._at == 1:
40 msg = self._create_packet_beginning_message(test_obj._packet, self._at)
41 elif self._at == 2:
42 msg = self._create_event_message(test_obj._event_class, test_obj._packet, self._at)
43 elif self._at == 3:
44 msg = self._create_message_iterator_inactivity_message(test_obj._clock_class, self._at)
45 elif self._at == 4:
46 msg = self._create_discarded_events_message(test_obj._stream, 890, self._at, self._at)
47 elif self._at == 5:
48 msg = self._create_packet_end_message(test_obj._packet, self._at)
49 elif self._at == 6:
50 msg = self._create_discarded_packets_message(test_obj._stream, 678, self._at, self._at)
51 elif self._at == 7:
52 if self._with_stream_msgs_clock_snapshots:
53 msg = self._create_stream_end_message(test_obj._stream, default_clock_snapshot=self._at)
54 else:
55 msg = self._create_stream_end_message(test_obj._stream)
56 elif self._at >= 8:
57 raise bt2.Stop
58 else:
59 if self._at == 0:
60 msg = self._create_stream_beginning_message(test_obj._stream)
61 elif self._at == 1:
62 msg = self._create_packet_beginning_message(test_obj._packet)
63 elif self._at == 2:
64 msg = self._create_event_message(test_obj._event_class, test_obj._packet)
65 elif self._at == 3:
66 msg = self._create_discarded_events_message(test_obj._stream, 890)
67 elif self._at == 4:
68 msg = self._create_packet_end_message(test_obj._packet)
69 elif self._at == 5:
70 msg = self._create_discarded_packets_message(test_obj._stream, 678)
71 elif self._at == 6:
72 msg = self._create_stream_end_message(test_obj._stream)
73 elif self._at >= 7:
74 raise bt2.Stop
75
76 self._at += 1
77 return msg
78
79 class MySrc(bt2._UserSourceComponent, message_iterator_class=MyIter):
80 def __init__(self, params):
81 self._add_output_port('out', params)
82
83 with_cc = bool(params['with_cc'])
84 tc = self._create_trace_class()
85 if with_cc:
86 cc = self._create_clock_class()
87 else:
88 cc = None
89
90 sc = tc.create_stream_class(default_clock_class=cc,
91 supports_packets=True,
92 packets_have_beginning_default_clock_snapshot=with_cc,
93 packets_have_end_default_clock_snapshot=with_cc,
94 supports_discarded_events=True,
95 discarded_events_have_default_clock_snapshots=with_cc,
96 supports_discarded_packets=True,
97 discarded_packets_have_default_clock_snapshots=with_cc)
98
99 # Create payload field class
100 my_int_fc = tc.create_signed_integer_field_class(32)
101 payload_fc = tc.create_structure_field_class()
102 payload_fc += collections.OrderedDict([
103 ('my_int', my_int_fc),
104 ])
105
106 ec = sc.create_event_class(name='salut', payload_field_class=payload_fc)
107
108 trace = tc()
109 stream = trace.create_stream(sc)
110 packet = stream.create_packet()
111
112 test_obj._trace = trace
113 test_obj._stream = stream
114 test_obj._packet = packet
115 test_obj._event_class = ec
116 test_obj._clock_class = cc
117
118 test_obj = self
119 self._graph = bt2.Graph()
120 self._src = MySrc
121 self._iter = MyIter
122
123 def test_all_msg_with_cc(self):
124 params = {'with_cc': True}
125 self._src_comp = self._graph.add_component(self._src, 'my_source', params)
126 self._msg_iter = self._graph.create_output_port_message_iterator(self._src_comp.output_ports['out'])
127
128 for i, msg in enumerate(self._msg_iter):
129 if i == 0:
130 self.assertIsInstance(msg, bt2.message._StreamBeginningMessage)
131 self.assertEqual(msg.stream.addr, self._stream.addr)
132 self.assertIsInstance(msg.default_clock_snapshot, bt2.clock_snapshot._UnknownClockSnapshot)
133 elif i == 1:
134 self.assertIsInstance(msg, bt2.message._PacketBeginningMessage)
135 self.assertEqual(msg.packet.addr, self._packet.addr)
136 self.assertEqual(msg.default_clock_snapshot.value, i)
137 elif i == 2:
138 self.assertIsInstance(msg, bt2.message._EventMessage)
139 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
140 self.assertEqual(msg.default_clock_snapshot.value, i)
141 elif i == 3:
142 self.assertIsInstance(msg, bt2.message._MessageIteratorInactivityMessage)
143 self.assertEqual(msg.default_clock_snapshot.value, i)
144 elif i == 4:
145 self.assertIsInstance(msg, bt2.message._DiscardedEventsMessage)
146 self.assertEqual(msg.stream.addr, self._stream.addr)
147 self.assertEqual(msg.count, 890)
148 self.assertEqual(msg.stream.cls.default_clock_class.addr, self._clock_class.addr)
149 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
150 self.assertEqual(msg.end_default_clock_snapshot.value, i)
151 elif i == 5:
152 self.assertIsInstance(msg, bt2.message._PacketEndMessage)
153 self.assertEqual(msg.packet.addr, self._packet.addr)
154 self.assertEqual(msg.default_clock_snapshot.value, i)
155 elif i == 6:
156 self.assertIsInstance(msg, bt2.message._DiscardedPacketsMessage)
157 self.assertEqual(msg.stream.addr, self._stream.addr)
158 self.assertEqual(msg.count, 678)
159 self.assertEqual(msg.stream.cls.default_clock_class.addr, self._clock_class.addr)
160 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
161 self.assertEqual(msg.end_default_clock_snapshot.value, i)
162 elif i == 7:
163 self.assertIsInstance(msg, bt2.message._StreamEndMessage)
164 self.assertEqual(msg.stream.addr, self._stream.addr)
165 self.assertIsInstance(msg.default_clock_snapshot, bt2.clock_snapshot._UnknownClockSnapshot)
166 else:
167 raise Exception
168
169 def test_all_msg_without_cc(self):
170 params = {'with_cc': False}
171 self._src_comp = self._graph.add_component(self._src, 'my_source', params)
172 self._msg_iter = self._graph.create_output_port_message_iterator(self._src_comp.output_ports['out'])
173
174 for i, msg in enumerate(self._msg_iter):
175 if i == 0:
176 self.assertIsInstance(msg, bt2.message._StreamBeginningMessage)
177 self.assertEqual(msg.stream.addr, self._stream.addr)
178 with self.assertRaises(bt2.NonexistentClockSnapshot):
179 msg.default_clock_snapshot
180 elif i == 1:
181 self.assertIsInstance(msg, bt2.message._PacketBeginningMessage)
182 self.assertEqual(msg.packet.addr, self._packet.addr)
183 elif i == 2:
184 self.assertIsInstance(msg, bt2.message._EventMessage)
185 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
186 with self.assertRaises(bt2.NonexistentClockSnapshot):
187 msg.default_clock_snapshot
188 elif i == 3:
189 self.assertIsInstance(msg, bt2.message._DiscardedEventsMessage)
190 self.assertEqual(msg.stream.addr, self._stream.addr)
191 self.assertEqual(msg.count, 890)
192 self.assertIsNone(msg.stream.cls.default_clock_class)
193 with self.assertRaises(bt2.NonexistentClockSnapshot):
194 msg.beginning_default_clock_snapshot
195 with self.assertRaises(bt2.NonexistentClockSnapshot):
196 msg.end_default_clock_snapshot
197 elif i == 4:
198 self.assertIsInstance(msg, bt2.message._PacketEndMessage)
199 self.assertEqual(msg.packet.addr, self._packet.addr)
200 elif i == 5:
201 self.assertIsInstance(msg, bt2.message._DiscardedPacketsMessage)
202 self.assertEqual(msg.stream.addr, self._stream.addr)
203 self.assertEqual(msg.count, 678)
204 self.assertIsNone(msg.stream.cls.default_clock_class)
205 with self.assertRaises(bt2.NonexistentClockSnapshot):
206 msg.beginning_default_clock_snapshot
207 with self.assertRaises(bt2.NonexistentClockSnapshot):
208 msg.end_default_clock_snapshot
209 elif i == 6:
210 self.assertIsInstance(msg, bt2.message._StreamEndMessage)
211 self.assertEqual(msg.stream.addr, self._stream.addr)
212 with self.assertRaises(bt2.NonexistentClockSnapshot):
213 msg.default_clock_snapshot
214 else:
215 raise Exception
216
217 def test_msg_stream_with_clock_snapshots(self):
218 params = {
219 'with_cc': True,
220 'with_stream_msgs_clock_snapshots': True,
221 }
222
223 self._src_comp = self._graph.add_component(self._src, 'my_source', params)
224 self._msg_iter = self._graph.create_output_port_message_iterator(self._src_comp.output_ports['out'])
225 msgs = list(self._msg_iter)
226
227 msg_stream_beg = msgs[0]
228 self.assertIsInstance(msg_stream_beg, bt2.message._StreamBeginningMessage)
229 self.assertEqual(msg_stream_beg.default_clock_snapshot.value, 0)
230
231 msg_stream_end = msgs[7]
232 self.assertIsInstance(msg_stream_end, bt2.message._StreamEndMessage)
233 self.assertEqual(msg_stream_end.default_clock_snapshot.value, 7)
This page took 0.056006 seconds and 3 git commands to generate.