bt2: Add remaining trace-ir `*Const` classes and adapt tests
[babeltrace.git] / tests / bindings / python / bt2 / test_message.py
CommitLineData
d2d857a8
MJ
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
811644b8 19import unittest
811644b8 20import bt2
f0a42b33 21import utils
6c373cc9 22from utils import TestOutputPortMessageIterator
f0a42b33
FD
23from bt2 import clock_snapshot as bt2_clock_snapshot
24from bt2 import event as bt2_event
25from bt2 import event_class as bt2_event_class
26from bt2 import field as bt2_field
27from bt2 import packet as bt2_packet
28from bt2 import stream as bt2_stream
29from bt2 import stream_class as bt2_stream_class
30from bt2 import trace as bt2_trace
31from bt2 import trace_class as bt2_trace_class
811644b8
PP
32
33
9ec609ec 34class AllMessagesTestCase(unittest.TestCase):
811644b8 35 def setUp(self):
5602ef81 36 class MyIter(bt2._UserMessageIterator):
c5f330cd 37 def __init__(self, self_port_output):
9ec609ec 38 self._at = 0
cfbd7cf3
FD
39 self._with_stream_msgs_clock_snapshots = self_port_output.user_data.get(
40 'with_stream_msgs_clock_snapshots', False
41 )
811644b8
PP
42
43 def __next__(self):
9ec609ec
SM
44 if test_obj._clock_class:
45 if self._at == 0:
188edac1 46 if self._with_stream_msgs_clock_snapshots:
cfbd7cf3
FD
47 msg = self._create_stream_beginning_message(
48 test_obj._stream, default_clock_snapshot=self._at
49 )
188edac1 50 else:
cfbd7cf3
FD
51 msg = self._create_stream_beginning_message(
52 test_obj._stream
53 )
f0a42b33 54 test_obj.assertIs(type(msg), bt2._StreamBeginningMessage)
9ec609ec 55 elif self._at == 1:
cfbd7cf3
FD
56 msg = self._create_packet_beginning_message(
57 test_obj._packet, self._at
58 )
f0a42b33 59 test_obj.assertIs(type(msg), bt2._PacketBeginningMessage)
188edac1 60 elif self._at == 2:
cfbd7cf3
FD
61 msg = self._create_event_message(
62 test_obj._event_class, test_obj._packet, self._at
63 )
f0a42b33 64 test_obj.assertIs(type(msg), bt2._EventMessage)
188edac1 65 elif self._at == 3:
cfbd7cf3
FD
66 msg = self._create_message_iterator_inactivity_message(
67 test_obj._clock_class, self._at
68 )
188edac1 69 elif self._at == 4:
cfbd7cf3
FD
70 msg = self._create_discarded_events_message(
71 test_obj._stream, 890, self._at, self._at
72 )
f0a42b33 73 test_obj.assertIs(type(msg), bt2._DiscardedEventsMessage)
188edac1 74 elif self._at == 5:
cfbd7cf3
FD
75 msg = self._create_packet_end_message(
76 test_obj._packet, self._at
77 )
f0a42b33 78 test_obj.assertIs(type(msg), bt2._PacketEndMessage)
188edac1 79 elif self._at == 6:
cfbd7cf3
FD
80 msg = self._create_discarded_packets_message(
81 test_obj._stream, 678, self._at, self._at
82 )
f0a42b33 83 test_obj.assertIs(type(msg), bt2._DiscardedPacketsMessage)
188edac1
SM
84 elif self._at == 7:
85 if self._with_stream_msgs_clock_snapshots:
cfbd7cf3
FD
86 msg = self._create_stream_end_message(
87 test_obj._stream, default_clock_snapshot=self._at
88 )
188edac1
SM
89 else:
90 msg = self._create_stream_end_message(test_obj._stream)
f0a42b33 91 test_obj.assertIs(type(msg), bt2._StreamEndMessage)
188edac1 92 elif self._at >= 8:
9ec609ec 93 raise bt2.Stop
811644b8 94 else:
9ec609ec
SM
95 if self._at == 0:
96 msg = self._create_stream_beginning_message(test_obj._stream)
97 elif self._at == 1:
9ec609ec 98 msg = self._create_packet_beginning_message(test_obj._packet)
188edac1 99 elif self._at == 2:
cfbd7cf3
FD
100 msg = self._create_event_message(
101 test_obj._event_class, test_obj._packet
102 )
188edac1 103 elif self._at == 3:
cfbd7cf3
FD
104 msg = self._create_discarded_events_message(
105 test_obj._stream, 890
106 )
188edac1 107 elif self._at == 4:
9ec609ec 108 msg = self._create_packet_end_message(test_obj._packet)
188edac1 109 elif self._at == 5:
cfbd7cf3
FD
110 msg = self._create_discarded_packets_message(
111 test_obj._stream, 678
112 )
188edac1 113 elif self._at == 6:
9ec609ec 114 msg = self._create_stream_end_message(test_obj._stream)
188edac1 115 elif self._at >= 7:
9ec609ec 116 raise bt2.Stop
811644b8
PP
117
118 self._at += 1
5602ef81 119 return msg
811644b8 120
9ec609ec 121 class MySrc(bt2._UserSourceComponent, message_iterator_class=MyIter):
66964f3f 122 def __init__(self, params, obj):
188edac1 123 self._add_output_port('out', params)
811644b8 124
2e90378a 125 with_cc = bool(params['with_cc'])
9ec609ec
SM
126 tc = self._create_trace_class()
127 if with_cc:
128 cc = self._create_clock_class()
811644b8 129 else:
9ec609ec 130 cc = None
9ec609ec 131
cfbd7cf3
FD
132 sc = tc.create_stream_class(
133 default_clock_class=cc,
134 supports_packets=True,
135 packets_have_beginning_default_clock_snapshot=with_cc,
136 packets_have_end_default_clock_snapshot=with_cc,
137 supports_discarded_events=True,
138 discarded_events_have_default_clock_snapshots=with_cc,
139 supports_discarded_packets=True,
140 discarded_packets_have_default_clock_snapshots=with_cc,
141 )
9ec609ec
SM
142
143 # Create payload field class
144 my_int_fc = tc.create_signed_integer_field_class(32)
145 payload_fc = tc.create_structure_field_class()
cfbd7cf3 146 payload_fc += [('my_int', my_int_fc)]
9ec609ec 147
f0a42b33
FD
148 # Create specific context field class
149 my_int_fc = tc.create_signed_integer_field_class(32)
150 specific_fc = tc.create_structure_field_class()
151 specific_fc += [('my_int', my_int_fc)]
152
153 ec = sc.create_event_class(
154 name='salut',
155 payload_field_class=payload_fc,
156 specific_context_field_class=specific_fc,
157 )
9ec609ec
SM
158
159 trace = tc()
160 stream = trace.create_stream(sc)
161 packet = stream.create_packet()
162
163 test_obj._trace = trace
164 test_obj._stream = stream
165 test_obj._packet = packet
166 test_obj._event_class = ec
167 test_obj._clock_class = cc
168
169 test_obj = self
170 self._graph = bt2.Graph()
171 self._src = MySrc
172 self._iter = MyIter
173
174 def test_all_msg_with_cc(self):
175 params = {'with_cc': True}
176 self._src_comp = self._graph.add_component(self._src, 'my_source', params)
6c373cc9
PP
177 self._msg_iter = TestOutputPortMessageIterator(
178 self._graph, self._src_comp.output_ports['out']
cfbd7cf3 179 )
9ec609ec
SM
180
181 for i, msg in enumerate(self._msg_iter):
182 if i == 0:
f0a42b33
FD
183 self.assertIs(type(msg), bt2._StreamBeginningMessageConst)
184 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 185 self.assertEqual(msg.stream.addr, self._stream.addr)
cfbd7cf3 186 self.assertIsInstance(
3fb99a22 187 msg.default_clock_snapshot, bt2._UnknownClockSnapshot
cfbd7cf3 188 )
9ec609ec 189 elif i == 1:
f0a42b33
FD
190 self.assertIs(type(msg), bt2._PacketBeginningMessageConst)
191 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
192 self.assertIs(
193 type(msg.default_clock_snapshot),
194 bt2_clock_snapshot._ClockSnapshotConst,
195 )
9ec609ec
SM
196 self.assertEqual(msg.packet.addr, self._packet.addr)
197 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 198 elif i == 2:
f0a42b33
FD
199 self.assertIs(type(msg), bt2._EventMessageConst)
200 self.assertIs(type(msg.event), bt2_event._EventConst)
201 self.assertIs(
202 type(msg.default_clock_snapshot),
203 bt2_clock_snapshot._ClockSnapshotConst,
204 )
205 self.assertIs(
206 type(msg.event.payload_field), bt2_field._StructureFieldConst
207 )
208 self.assertIs(
209 type(msg.event.payload_field['my_int']),
210 bt2_field._SignedIntegerFieldConst,
211 )
212
e8ac1aae 213 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
9ec609ec 214 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 215 elif i == 3:
f0a42b33
FD
216 self.assertIs(type(msg), bt2._MessageIteratorInactivityMessageConst)
217 self.assertIs(
218 type(msg.default_clock_snapshot),
219 bt2_clock_snapshot._ClockSnapshotConst,
220 )
9ec609ec 221 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 222 elif i == 4:
f0a42b33
FD
223 self.assertIs(type(msg), bt2._DiscardedEventsMessageConst)
224 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
225 self.assertIs(type(msg.stream.cls), bt2_stream_class._StreamClassConst)
226 self.assertIs(
227 type(msg.beginning_default_clock_snapshot),
228 bt2_clock_snapshot._ClockSnapshotConst,
229 )
230 self.assertIs(
231 type(msg.end_default_clock_snapshot),
232 bt2_clock_snapshot._ClockSnapshotConst,
233 )
234
9ec609ec
SM
235 self.assertEqual(msg.stream.addr, self._stream.addr)
236 self.assertEqual(msg.count, 890)
cfbd7cf3
FD
237 self.assertEqual(
238 msg.stream.cls.default_clock_class.addr, self._clock_class.addr
239 )
9ec609ec
SM
240 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
241 self.assertEqual(msg.end_default_clock_snapshot.value, i)
188edac1 242 elif i == 5:
f0a42b33
FD
243 self.assertIs(type(msg), bt2._PacketEndMessageConst)
244 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
245 self.assertIs(
246 type(msg.default_clock_snapshot),
247 bt2_clock_snapshot._ClockSnapshotConst,
248 )
9ec609ec
SM
249 self.assertEqual(msg.packet.addr, self._packet.addr)
250 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 251 elif i == 6:
f0a42b33
FD
252 self.assertIs(type(msg), bt2._DiscardedPacketsMessageConst)
253 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
254 self.assertIs(type(msg.stream.trace), bt2_trace._TraceConst)
255 self.assertIs(
256 type(msg.stream.trace.cls), bt2_trace_class._TraceClassConst
257 )
258 self.assertIs(
259 type(msg.beginning_default_clock_snapshot),
260 bt2_clock_snapshot._ClockSnapshotConst,
261 )
262 self.assertIs(
263 type(msg.end_default_clock_snapshot),
264 bt2_clock_snapshot._ClockSnapshotConst,
265 )
9ec609ec
SM
266 self.assertEqual(msg.stream.addr, self._stream.addr)
267 self.assertEqual(msg.count, 678)
cfbd7cf3
FD
268 self.assertEqual(
269 msg.stream.cls.default_clock_class.addr, self._clock_class.addr
270 )
9ec609ec
SM
271 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
272 self.assertEqual(msg.end_default_clock_snapshot.value, i)
188edac1 273 elif i == 7:
f0a42b33
FD
274 self.assertIs(type(msg), bt2._StreamEndMessageConst)
275 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 276 self.assertEqual(msg.stream.addr, self._stream.addr)
f0a42b33
FD
277 self.assertIs(
278 type(msg.default_clock_snapshot), bt2._UnknownClockSnapshot
cfbd7cf3 279 )
9ec609ec
SM
280 else:
281 raise Exception
282
283 def test_all_msg_without_cc(self):
284 params = {'with_cc': False}
285 self._src_comp = self._graph.add_component(self._src, 'my_source', params)
6c373cc9
PP
286 self._msg_iter = TestOutputPortMessageIterator(
287 self._graph, self._src_comp.output_ports['out']
cfbd7cf3 288 )
9ec609ec
SM
289
290 for i, msg in enumerate(self._msg_iter):
291 if i == 0:
f0a42b33
FD
292 self.assertIsInstance(msg, bt2._StreamBeginningMessageConst)
293 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 294 self.assertEqual(msg.stream.addr, self._stream.addr)
1153eccb
SM
295 with self.assertRaisesRegex(
296 ValueError, 'stream class has no default clock class'
297 ):
188edac1 298 msg.default_clock_snapshot
9ec609ec 299 elif i == 1:
f0a42b33
FD
300 self.assertIsInstance(msg, bt2._PacketBeginningMessageConst)
301 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
9ec609ec 302 self.assertEqual(msg.packet.addr, self._packet.addr)
188edac1 303 elif i == 2:
f0a42b33
FD
304 self.assertIsInstance(msg, bt2._EventMessageConst)
305 self.assertIs(type(msg.event), bt2_event._EventConst)
306 self.assertIs(type(msg.event.cls), bt2_event_class._EventClassConst)
e8ac1aae 307 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
1153eccb
SM
308 with self.assertRaisesRegex(
309 ValueError, 'stream class has no default clock class'
310 ):
9ec609ec 311 msg.default_clock_snapshot
188edac1 312 elif i == 3:
f0a42b33
FD
313 self.assertIsInstance(msg, bt2._DiscardedEventsMessageConst)
314 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
315 self.assertIs(type(msg.stream.cls), bt2_stream_class._StreamClassConst)
9ec609ec
SM
316 self.assertEqual(msg.stream.addr, self._stream.addr)
317 self.assertEqual(msg.count, 890)
e8ac1aae 318 self.assertIsNone(msg.stream.cls.default_clock_class)
1153eccb
SM
319 with self.assertRaisesRegex(
320 ValueError,
321 'such a message has no clock snapshots for this stream class',
322 ):
9ec609ec 323 msg.beginning_default_clock_snapshot
1153eccb
SM
324 with self.assertRaisesRegex(
325 ValueError,
326 'such a message has no clock snapshots for this stream class',
327 ):
9ec609ec 328 msg.end_default_clock_snapshot
188edac1 329 elif i == 4:
f0a42b33 330 self.assertIsInstance(msg, bt2._PacketEndMessageConst)
9ec609ec 331 self.assertEqual(msg.packet.addr, self._packet.addr)
f0a42b33 332 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
188edac1 333 elif i == 5:
f0a42b33
FD
334 self.assertIsInstance(msg, bt2._DiscardedPacketsMessageConst)
335 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
336 self.assertIs(type(msg.stream.cls), bt2_stream_class._StreamClassConst)
337 self.assertIs(
338 type(msg.stream.cls.trace_class), bt2_trace_class._TraceClassConst
339 )
9ec609ec
SM
340 self.assertEqual(msg.stream.addr, self._stream.addr)
341 self.assertEqual(msg.count, 678)
e8ac1aae 342 self.assertIsNone(msg.stream.cls.default_clock_class)
1153eccb
SM
343 with self.assertRaisesRegex(
344 ValueError,
345 'such a message has no clock snapshots for this stream class',
346 ):
9ec609ec 347 msg.beginning_default_clock_snapshot
1153eccb
SM
348 with self.assertRaisesRegex(
349 ValueError,
350 'such a message has no clock snapshots for this stream class',
351 ):
9ec609ec 352 msg.end_default_clock_snapshot
188edac1 353 elif i == 6:
f0a42b33
FD
354 self.assertIsInstance(msg, bt2._StreamEndMessageConst)
355 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 356 self.assertEqual(msg.stream.addr, self._stream.addr)
1153eccb
SM
357 with self.assertRaisesRegex(
358 ValueError, 'stream class has no default clock class'
359 ):
188edac1 360 msg.default_clock_snapshot
9ec609ec
SM
361 else:
362 raise Exception
811644b8 363
188edac1 364 def test_msg_stream_with_clock_snapshots(self):
cfbd7cf3 365 params = {'with_cc': True, 'with_stream_msgs_clock_snapshots': True}
c6af194f 366
188edac1 367 self._src_comp = self._graph.add_component(self._src, 'my_source', params)
6c373cc9
PP
368 self._msg_iter = TestOutputPortMessageIterator(
369 self._graph, self._src_comp.output_ports['out']
cfbd7cf3 370 )
188edac1 371 msgs = list(self._msg_iter)
c6af194f 372
188edac1 373 msg_stream_beg = msgs[0]
f0a42b33
FD
374 self.assertIsInstance(msg_stream_beg, bt2._StreamBeginningMessageConst)
375 self.assertIs(
376 type(msg_stream_beg.default_clock_snapshot),
377 bt2_clock_snapshot._ClockSnapshotConst,
378 )
188edac1 379 self.assertEqual(msg_stream_beg.default_clock_snapshot.value, 0)
c6af194f 380
188edac1 381 msg_stream_end = msgs[7]
f0a42b33
FD
382 self.assertIsInstance(msg_stream_end, bt2._StreamEndMessageConst)
383 self.assertIs(
384 type(msg_stream_end.default_clock_snapshot),
385 bt2_clock_snapshot._ClockSnapshotConst,
386 )
188edac1 387 self.assertEqual(msg_stream_end.default_clock_snapshot.value, 7)
f0a42b33
FD
388
389 def test_stream_beg_msg(self):
390 msg = utils.get_stream_beginning_message()
391 self.assertIs(type(msg.stream), bt2_stream._Stream)
392
393 def test_stream_end_msg(self):
394 msg = utils.get_stream_end_message()
395 self.assertIs(type(msg.stream), bt2_stream._Stream)
396
397 def test_packet_beg_msg(self):
398 msg = utils.get_packet_beginning_message()
399 self.assertIs(type(msg.packet), bt2_packet._Packet)
400
401 def test_packet_end_msg(self):
402 msg = utils.get_packet_end_message()
403 self.assertIs(type(msg.packet), bt2_packet._Packet)
404
405 def test_event_msg(self):
406 msg = utils.get_event_message()
407 self.assertIs(type(msg.event), bt2_event._Event)
This page took 0.059527 seconds and 4 git commands to generate.