cpp-common/bt2c/fmt.hpp: use `wise_enum::string_type` in `EnableIfIsWiseEnum` definition
[babeltrace.git] / tests / bindings / python / bt2 / test_message.py
CommitLineData
0235b0db 1# SPDX-License-Identifier: GPL-2.0-only
d2d857a8
MJ
2#
3# Copyright (C) 2019 EfficiOS Inc.
4#
d2d857a8 5
811644b8 6import unittest
5995b304 7
811644b8 8import bt2
f0a42b33 9import utils
f0a42b33 10from bt2 import event as bt2_event
f0a42b33 11from bt2 import field as bt2_field
5995b304 12from bt2 import trace as bt2_trace
f0a42b33
FD
13from bt2 import packet as bt2_packet
14from bt2 import stream as bt2_stream
5995b304 15from bt2 import event_class as bt2_event_class
f0a42b33 16from bt2 import trace_class as bt2_trace_class
5995b304
SM
17from bt2 import stream_class as bt2_stream_class
18from bt2 import clock_snapshot as bt2_clock_snapshot
19from utils import TestOutputPortMessageIterator
811644b8
PP
20
21
9ec609ec 22class AllMessagesTestCase(unittest.TestCase):
811644b8 23 def setUp(self):
5602ef81 24 class MyIter(bt2._UserMessageIterator):
8d8b141d 25 def __init__(self, config, self_port_output):
9ec609ec 26 self._at = 0
cfbd7cf3 27 self._with_stream_msgs_clock_snapshots = self_port_output.user_data.get(
f5567ea8 28 "with_stream_msgs_clock_snapshots", False
cfbd7cf3 29 )
811644b8
PP
30
31 def __next__(self):
9ec609ec
SM
32 if test_obj._clock_class:
33 if self._at == 0:
188edac1 34 if self._with_stream_msgs_clock_snapshots:
cfbd7cf3
FD
35 msg = self._create_stream_beginning_message(
36 test_obj._stream, default_clock_snapshot=self._at
37 )
188edac1 38 else:
cfbd7cf3
FD
39 msg = self._create_stream_beginning_message(
40 test_obj._stream
41 )
f0a42b33 42 test_obj.assertIs(type(msg), bt2._StreamBeginningMessage)
9ec609ec 43 elif self._at == 1:
cfbd7cf3
FD
44 msg = self._create_packet_beginning_message(
45 test_obj._packet, self._at
46 )
f0a42b33 47 test_obj.assertIs(type(msg), bt2._PacketBeginningMessage)
188edac1 48 elif self._at == 2:
cfbd7cf3
FD
49 msg = self._create_event_message(
50 test_obj._event_class, test_obj._packet, self._at
51 )
f0a42b33 52 test_obj.assertIs(type(msg), bt2._EventMessage)
188edac1 53 elif self._at == 3:
cfbd7cf3
FD
54 msg = self._create_message_iterator_inactivity_message(
55 test_obj._clock_class, self._at
56 )
188edac1 57 elif self._at == 4:
cfbd7cf3
FD
58 msg = self._create_discarded_events_message(
59 test_obj._stream, 890, self._at, self._at
60 )
f0a42b33 61 test_obj.assertIs(type(msg), bt2._DiscardedEventsMessage)
188edac1 62 elif self._at == 5:
cfbd7cf3
FD
63 msg = self._create_packet_end_message(
64 test_obj._packet, self._at
65 )
f0a42b33 66 test_obj.assertIs(type(msg), bt2._PacketEndMessage)
188edac1 67 elif self._at == 6:
cfbd7cf3
FD
68 msg = self._create_discarded_packets_message(
69 test_obj._stream, 678, self._at, self._at
70 )
f0a42b33 71 test_obj.assertIs(type(msg), bt2._DiscardedPacketsMessage)
188edac1
SM
72 elif self._at == 7:
73 if self._with_stream_msgs_clock_snapshots:
cfbd7cf3
FD
74 msg = self._create_stream_end_message(
75 test_obj._stream, default_clock_snapshot=self._at
76 )
188edac1
SM
77 else:
78 msg = self._create_stream_end_message(test_obj._stream)
f0a42b33 79 test_obj.assertIs(type(msg), bt2._StreamEndMessage)
188edac1 80 elif self._at >= 8:
9ec609ec 81 raise bt2.Stop
811644b8 82 else:
9ec609ec
SM
83 if self._at == 0:
84 msg = self._create_stream_beginning_message(test_obj._stream)
85 elif self._at == 1:
9ec609ec 86 msg = self._create_packet_beginning_message(test_obj._packet)
188edac1 87 elif self._at == 2:
cfbd7cf3
FD
88 msg = self._create_event_message(
89 test_obj._event_class, test_obj._packet
90 )
188edac1 91 elif self._at == 3:
cfbd7cf3
FD
92 msg = self._create_discarded_events_message(
93 test_obj._stream, 890
94 )
188edac1 95 elif self._at == 4:
9ec609ec 96 msg = self._create_packet_end_message(test_obj._packet)
188edac1 97 elif self._at == 5:
cfbd7cf3
FD
98 msg = self._create_discarded_packets_message(
99 test_obj._stream, 678
100 )
188edac1 101 elif self._at == 6:
9ec609ec 102 msg = self._create_stream_end_message(test_obj._stream)
188edac1 103 elif self._at >= 7:
9ec609ec 104 raise bt2.Stop
811644b8
PP
105
106 self._at += 1
5602ef81 107 return msg
811644b8 108
9ec609ec 109 class MySrc(bt2._UserSourceComponent, message_iterator_class=MyIter):
59225a3e 110 def __init__(self, config, params, obj):
f5567ea8 111 self._add_output_port("out", params)
811644b8 112
f5567ea8 113 with_cc = bool(params["with_cc"])
9ec609ec
SM
114 tc = self._create_trace_class()
115 if with_cc:
116 cc = self._create_clock_class()
811644b8 117 else:
9ec609ec 118 cc = None
9ec609ec 119
cfbd7cf3
FD
120 sc = tc.create_stream_class(
121 default_clock_class=cc,
122 supports_packets=True,
123 packets_have_beginning_default_clock_snapshot=with_cc,
124 packets_have_end_default_clock_snapshot=with_cc,
125 supports_discarded_events=True,
126 discarded_events_have_default_clock_snapshots=with_cc,
127 supports_discarded_packets=True,
128 discarded_packets_have_default_clock_snapshots=with_cc,
129 )
9ec609ec
SM
130
131 # Create payload field class
132 my_int_fc = tc.create_signed_integer_field_class(32)
133 payload_fc = tc.create_structure_field_class()
f5567ea8 134 payload_fc += [("my_int", my_int_fc)]
9ec609ec 135
f0a42b33
FD
136 # Create specific context field class
137 my_int_fc = tc.create_signed_integer_field_class(32)
138 specific_fc = tc.create_structure_field_class()
f5567ea8 139 specific_fc += [("my_int", my_int_fc)]
f0a42b33
FD
140
141 ec = sc.create_event_class(
f5567ea8 142 name="salut",
f0a42b33
FD
143 payload_field_class=payload_fc,
144 specific_context_field_class=specific_fc,
145 )
9ec609ec
SM
146
147 trace = tc()
148 stream = trace.create_stream(sc)
149 packet = stream.create_packet()
150
151 test_obj._trace = trace
152 test_obj._stream = stream
153 test_obj._packet = packet
154 test_obj._event_class = ec
155 test_obj._clock_class = cc
156
157 test_obj = self
158 self._graph = bt2.Graph()
159 self._src = MySrc
160 self._iter = MyIter
161
162 def test_all_msg_with_cc(self):
f5567ea8
FD
163 params = {"with_cc": True}
164 self._src_comp = self._graph.add_component(self._src, "my_source", params)
6c373cc9 165 self._msg_iter = TestOutputPortMessageIterator(
f5567ea8 166 self._graph, self._src_comp.output_ports["out"]
cfbd7cf3 167 )
9ec609ec
SM
168
169 for i, msg in enumerate(self._msg_iter):
170 if i == 0:
f0a42b33
FD
171 self.assertIs(type(msg), bt2._StreamBeginningMessageConst)
172 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 173 self.assertEqual(msg.stream.addr, self._stream.addr)
cfbd7cf3 174 self.assertIsInstance(
3fb99a22 175 msg.default_clock_snapshot, bt2._UnknownClockSnapshot
cfbd7cf3 176 )
9ec609ec 177 elif i == 1:
f0a42b33
FD
178 self.assertIs(type(msg), bt2._PacketBeginningMessageConst)
179 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
180 self.assertIs(
181 type(msg.default_clock_snapshot),
182 bt2_clock_snapshot._ClockSnapshotConst,
183 )
9ec609ec
SM
184 self.assertEqual(msg.packet.addr, self._packet.addr)
185 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 186 elif i == 2:
f0a42b33
FD
187 self.assertIs(type(msg), bt2._EventMessageConst)
188 self.assertIs(type(msg.event), bt2_event._EventConst)
189 self.assertIs(
190 type(msg.default_clock_snapshot),
191 bt2_clock_snapshot._ClockSnapshotConst,
192 )
193 self.assertIs(
194 type(msg.event.payload_field), bt2_field._StructureFieldConst
195 )
196 self.assertIs(
f5567ea8 197 type(msg.event.payload_field["my_int"]),
f0a42b33
FD
198 bt2_field._SignedIntegerFieldConst,
199 )
200
e8ac1aae 201 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
9ec609ec 202 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 203 elif i == 3:
f0a42b33
FD
204 self.assertIs(type(msg), bt2._MessageIteratorInactivityMessageConst)
205 self.assertIs(
60d02328 206 type(msg.clock_snapshot), bt2_clock_snapshot._ClockSnapshotConst
f0a42b33 207 )
60d02328 208 self.assertEqual(msg.clock_snapshot.value, i)
188edac1 209 elif i == 4:
f0a42b33
FD
210 self.assertIs(type(msg), bt2._DiscardedEventsMessageConst)
211 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
212 self.assertIs(type(msg.stream.cls), bt2_stream_class._StreamClassConst)
213 self.assertIs(
214 type(msg.beginning_default_clock_snapshot),
215 bt2_clock_snapshot._ClockSnapshotConst,
216 )
217 self.assertIs(
218 type(msg.end_default_clock_snapshot),
219 bt2_clock_snapshot._ClockSnapshotConst,
220 )
221
9ec609ec
SM
222 self.assertEqual(msg.stream.addr, self._stream.addr)
223 self.assertEqual(msg.count, 890)
cfbd7cf3
FD
224 self.assertEqual(
225 msg.stream.cls.default_clock_class.addr, self._clock_class.addr
226 )
9ec609ec
SM
227 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
228 self.assertEqual(msg.end_default_clock_snapshot.value, i)
188edac1 229 elif i == 5:
f0a42b33
FD
230 self.assertIs(type(msg), bt2._PacketEndMessageConst)
231 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
232 self.assertIs(
233 type(msg.default_clock_snapshot),
234 bt2_clock_snapshot._ClockSnapshotConst,
235 )
9ec609ec
SM
236 self.assertEqual(msg.packet.addr, self._packet.addr)
237 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 238 elif i == 6:
f0a42b33
FD
239 self.assertIs(type(msg), bt2._DiscardedPacketsMessageConst)
240 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
241 self.assertIs(type(msg.stream.trace), bt2_trace._TraceConst)
242 self.assertIs(
243 type(msg.stream.trace.cls), bt2_trace_class._TraceClassConst
244 )
245 self.assertIs(
246 type(msg.beginning_default_clock_snapshot),
247 bt2_clock_snapshot._ClockSnapshotConst,
248 )
249 self.assertIs(
250 type(msg.end_default_clock_snapshot),
251 bt2_clock_snapshot._ClockSnapshotConst,
252 )
9ec609ec
SM
253 self.assertEqual(msg.stream.addr, self._stream.addr)
254 self.assertEqual(msg.count, 678)
cfbd7cf3
FD
255 self.assertEqual(
256 msg.stream.cls.default_clock_class.addr, self._clock_class.addr
257 )
9ec609ec
SM
258 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
259 self.assertEqual(msg.end_default_clock_snapshot.value, i)
188edac1 260 elif i == 7:
f0a42b33
FD
261 self.assertIs(type(msg), bt2._StreamEndMessageConst)
262 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 263 self.assertEqual(msg.stream.addr, self._stream.addr)
f0a42b33
FD
264 self.assertIs(
265 type(msg.default_clock_snapshot), bt2._UnknownClockSnapshot
cfbd7cf3 266 )
9ec609ec
SM
267 else:
268 raise Exception
269
270 def test_all_msg_without_cc(self):
f5567ea8
FD
271 params = {"with_cc": False}
272 self._src_comp = self._graph.add_component(self._src, "my_source", params)
6c373cc9 273 self._msg_iter = TestOutputPortMessageIterator(
f5567ea8 274 self._graph, self._src_comp.output_ports["out"]
cfbd7cf3 275 )
9ec609ec
SM
276
277 for i, msg in enumerate(self._msg_iter):
278 if i == 0:
f0a42b33
FD
279 self.assertIsInstance(msg, bt2._StreamBeginningMessageConst)
280 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 281 self.assertEqual(msg.stream.addr, self._stream.addr)
1153eccb 282 with self.assertRaisesRegex(
f5567ea8 283 ValueError, "stream class has no default clock class"
1153eccb 284 ):
188edac1 285 msg.default_clock_snapshot
9ec609ec 286 elif i == 1:
f0a42b33
FD
287 self.assertIsInstance(msg, bt2._PacketBeginningMessageConst)
288 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
9ec609ec 289 self.assertEqual(msg.packet.addr, self._packet.addr)
188edac1 290 elif i == 2:
f0a42b33
FD
291 self.assertIsInstance(msg, bt2._EventMessageConst)
292 self.assertIs(type(msg.event), bt2_event._EventConst)
293 self.assertIs(type(msg.event.cls), bt2_event_class._EventClassConst)
e8ac1aae 294 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
1153eccb 295 with self.assertRaisesRegex(
f5567ea8 296 ValueError, "stream class has no default clock class"
1153eccb 297 ):
9ec609ec 298 msg.default_clock_snapshot
188edac1 299 elif i == 3:
f0a42b33
FD
300 self.assertIsInstance(msg, bt2._DiscardedEventsMessageConst)
301 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
302 self.assertIs(type(msg.stream.cls), bt2_stream_class._StreamClassConst)
9ec609ec
SM
303 self.assertEqual(msg.stream.addr, self._stream.addr)
304 self.assertEqual(msg.count, 890)
e8ac1aae 305 self.assertIsNone(msg.stream.cls.default_clock_class)
1153eccb
SM
306 with self.assertRaisesRegex(
307 ValueError,
f5567ea8 308 "such a message has no clock snapshots for this stream class",
1153eccb 309 ):
9ec609ec 310 msg.beginning_default_clock_snapshot
1153eccb
SM
311 with self.assertRaisesRegex(
312 ValueError,
f5567ea8 313 "such a message has no clock snapshots for this stream class",
1153eccb 314 ):
9ec609ec 315 msg.end_default_clock_snapshot
188edac1 316 elif i == 4:
f0a42b33 317 self.assertIsInstance(msg, bt2._PacketEndMessageConst)
9ec609ec 318 self.assertEqual(msg.packet.addr, self._packet.addr)
f0a42b33 319 self.assertIs(type(msg.packet), bt2_packet._PacketConst)
188edac1 320 elif i == 5:
f0a42b33
FD
321 self.assertIsInstance(msg, bt2._DiscardedPacketsMessageConst)
322 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
323 self.assertIs(type(msg.stream.cls), bt2_stream_class._StreamClassConst)
324 self.assertIs(
325 type(msg.stream.cls.trace_class), bt2_trace_class._TraceClassConst
326 )
9ec609ec
SM
327 self.assertEqual(msg.stream.addr, self._stream.addr)
328 self.assertEqual(msg.count, 678)
e8ac1aae 329 self.assertIsNone(msg.stream.cls.default_clock_class)
1153eccb
SM
330 with self.assertRaisesRegex(
331 ValueError,
f5567ea8 332 "such a message has no clock snapshots for this stream class",
1153eccb 333 ):
9ec609ec 334 msg.beginning_default_clock_snapshot
1153eccb
SM
335 with self.assertRaisesRegex(
336 ValueError,
f5567ea8 337 "such a message has no clock snapshots for this stream class",
1153eccb 338 ):
9ec609ec 339 msg.end_default_clock_snapshot
188edac1 340 elif i == 6:
f0a42b33
FD
341 self.assertIsInstance(msg, bt2._StreamEndMessageConst)
342 self.assertIs(type(msg.stream), bt2_stream._StreamConst)
9ec609ec 343 self.assertEqual(msg.stream.addr, self._stream.addr)
1153eccb 344 with self.assertRaisesRegex(
f5567ea8 345 ValueError, "stream class has no default clock class"
1153eccb 346 ):
188edac1 347 msg.default_clock_snapshot
9ec609ec
SM
348 else:
349 raise Exception
811644b8 350
188edac1 351 def test_msg_stream_with_clock_snapshots(self):
f5567ea8 352 params = {"with_cc": True, "with_stream_msgs_clock_snapshots": True}
c6af194f 353
f5567ea8 354 self._src_comp = self._graph.add_component(self._src, "my_source", params)
6c373cc9 355 self._msg_iter = TestOutputPortMessageIterator(
f5567ea8 356 self._graph, self._src_comp.output_ports["out"]
cfbd7cf3 357 )
188edac1 358 msgs = list(self._msg_iter)
c6af194f 359
188edac1 360 msg_stream_beg = msgs[0]
f0a42b33
FD
361 self.assertIsInstance(msg_stream_beg, bt2._StreamBeginningMessageConst)
362 self.assertIs(
363 type(msg_stream_beg.default_clock_snapshot),
364 bt2_clock_snapshot._ClockSnapshotConst,
365 )
188edac1 366 self.assertEqual(msg_stream_beg.default_clock_snapshot.value, 0)
c6af194f 367
188edac1 368 msg_stream_end = msgs[7]
f0a42b33
FD
369 self.assertIsInstance(msg_stream_end, bt2._StreamEndMessageConst)
370 self.assertIs(
371 type(msg_stream_end.default_clock_snapshot),
372 bt2_clock_snapshot._ClockSnapshotConst,
373 )
188edac1 374 self.assertEqual(msg_stream_end.default_clock_snapshot.value, 7)
f0a42b33
FD
375
376 def test_stream_beg_msg(self):
377 msg = utils.get_stream_beginning_message()
378 self.assertIs(type(msg.stream), bt2_stream._Stream)
379
380 def test_stream_end_msg(self):
381 msg = utils.get_stream_end_message()
382 self.assertIs(type(msg.stream), bt2_stream._Stream)
383
384 def test_packet_beg_msg(self):
385 msg = utils.get_packet_beginning_message()
386 self.assertIs(type(msg.packet), bt2_packet._Packet)
387
388 def test_packet_end_msg(self):
389 msg = utils.get_packet_end_message()
390 self.assertIs(type(msg.packet), bt2_packet._Packet)
391
392 def test_event_msg(self):
393 msg = utils.get_event_message()
394 self.assertIs(type(msg.event), bt2_event._Event)
d14ddbba
SM
395
396
f18c6482
SM
397class CreateDiscardedEventMessageTestCase(unittest.TestCase):
398 # Most basic case.
399 def test_create(self):
400 def create_stream_class(tc, cc):
401 return tc.create_stream_class(supports_discarded_events=True)
402
403 def msg_iter_next(msg_iter, stream):
404 return msg_iter._create_discarded_events_message(stream)
405
406 msg = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
407 self.assertIs(type(msg), bt2._DiscardedEventsMessage)
dd26af5b 408 self.assertIs(msg.count, None)
f18c6482
SM
409
410 # With event count.
411 def test_create_with_count(self):
412 def create_stream_class(tc, cc):
413 return tc.create_stream_class(supports_discarded_events=True)
414
415 def msg_iter_next(msg_iter, stream):
416 return msg_iter._create_discarded_events_message(stream, count=242)
417
418 msg = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
419 self.assertIs(type(msg), bt2._DiscardedEventsMessage)
dd26af5b 420 self.assertEqual(msg.count, 242)
f18c6482 421
e5a41ca3
SM
422 # With event count == 0.
423 def test_create_with_count_zero_raises(self):
424 def create_stream_class(tc, cc):
425 return tc.create_stream_class(supports_discarded_events=True)
426
427 def msg_iter_next(msg_iter, stream):
428 with self.assertRaisesRegex(
776a2a25 429 ValueError,
f5567ea8 430 "discarded event count is 0",
e5a41ca3
SM
431 ):
432 msg_iter._create_discarded_events_message(stream, count=0)
433
434 return 123
435
436 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
437 self.assertEqual(res, 123)
438
f18c6482
SM
439 # With clock snapshots.
440 def test_create_with_clock_snapshots(self):
441 def create_stream_class(tc, cc):
442 return tc.create_stream_class(
443 default_clock_class=cc,
444 supports_discarded_events=True,
445 discarded_events_have_default_clock_snapshots=True,
446 )
447
448 def msg_iter_next(msg_iter, stream):
449 return msg_iter._create_discarded_events_message(
450 stream, beg_clock_snapshot=10, end_clock_snapshot=20
451 )
452
453 msg = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
454 self.assertIs(type(msg), bt2._DiscardedEventsMessage)
dd26af5b
SM
455 self.assertEqual(msg.beginning_default_clock_snapshot, 10)
456 self.assertEqual(msg.end_default_clock_snapshot, 20)
f18c6482
SM
457
458 # Trying to create when the stream does not support discarded events.
459 def test_create_unsupported_raises(self):
460 def create_stream_class(tc, cc):
461 return tc.create_stream_class()
462
463 def msg_iter_next(msg_iter, stream):
464 with self.assertRaisesRegex(
f5567ea8 465 ValueError, "stream class does not support discarded events"
f18c6482
SM
466 ):
467 msg_iter._create_discarded_events_message(stream)
468
469 return 123
470
471 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
472 self.assertEqual(res, 123)
473
474 # Trying to create with clock snapshots when the stream does not support
475 # them.
476 def test_create_unsupported_clock_snapshots_raises(self):
477 def create_stream_class(tc, cc):
478 return tc.create_stream_class(supports_discarded_events=True)
479
480 def msg_iter_next(msg_iter, stream):
481 with self.assertRaisesRegex(
482 ValueError,
f5567ea8 483 "discarded events have no default clock snapshots for this stream class",
f18c6482
SM
484 ):
485 msg_iter._create_discarded_events_message(
486 stream, beg_clock_snapshot=10, end_clock_snapshot=20
487 )
488
489 return 123
490
491 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
492 self.assertEqual(res, 123)
493
494 # Trying to create without clock snapshots when the stream requires them.
495 def test_create_missing_clock_snapshots_raises(self):
496 def create_stream_class(tc, cc):
497 return tc.create_stream_class(
498 default_clock_class=cc,
499 supports_discarded_events=True,
500 discarded_events_have_default_clock_snapshots=True,
501 )
502
503 def msg_iter_next(msg_iter, stream):
504 with self.assertRaisesRegex(
505 ValueError,
f5567ea8 506 "discarded events have default clock snapshots for this stream class",
f18c6482
SM
507 ):
508 msg_iter._create_discarded_events_message(stream)
509
510 return 123
511
512 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
513 self.assertEqual(res, 123)
514
5d9ef4cb
SM
515 # End clock snapshot greater than beginning clock snapshot.
516 def test_create_clock_snapshots_end_gt_begin_raises(self):
517 def create_stream_class(tc, cc):
518 return tc.create_stream_class(
519 default_clock_class=cc,
520 supports_discarded_events=True,
521 discarded_events_have_default_clock_snapshots=True,
522 )
523
524 def msg_iter_next(msg_iter, stream):
525 with self.assertRaisesRegex(
526 ValueError,
f5567ea8 527 r"beginning default clock snapshot value \(20\) is greater than end default clock snapshot value \(10\)",
5d9ef4cb
SM
528 ):
529 msg_iter._create_discarded_events_message(
530 stream, beg_clock_snapshot=20, end_clock_snapshot=10
531 )
532
533 return 123
534
535 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
536 self.assertEqual(res, 123)
537
f18c6482
SM
538
539class CreateDiscardedPacketMessageTestCase(unittest.TestCase):
540 # Most basic case.
541 def test_create(self):
542 def create_stream_class(tc, cc):
543 return tc.create_stream_class(
544 supports_packets=True, supports_discarded_packets=True
545 )
546
547 def msg_iter_next(msg_iter, stream):
548 return msg_iter._create_discarded_packets_message(stream)
549
550 msg = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
551 self.assertIs(type(msg), bt2._DiscardedPacketsMessage)
552 self.assertIs(msg.count, None)
553
554 # With packet count.
555 def test_create_with_count(self):
556 def create_stream_class(tc, cc):
557 return tc.create_stream_class(
558 supports_packets=True, supports_discarded_packets=True
559 )
560
561 def msg_iter_next(msg_iter, stream):
562 return msg_iter._create_discarded_packets_message(stream, count=242)
563
564 msg = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
565 self.assertIs(type(msg), bt2._DiscardedPacketsMessage)
566 self.assertEqual(msg.count, 242)
567
e5a41ca3
SM
568 # With packet count == 0.
569 def test_create_with_count_zero_raises(self):
570 def create_stream_class(tc, cc):
571 return tc.create_stream_class(
572 supports_packets=True, supports_discarded_packets=True
573 )
574
575 def msg_iter_next(msg_iter, stream):
576 with self.assertRaisesRegex(
776a2a25 577 ValueError,
f5567ea8 578 "discarded packet count is 0",
e5a41ca3
SM
579 ):
580 msg_iter._create_discarded_packets_message(stream, count=0)
581
582 return 123
583
584 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
585 self.assertEqual(res, 123)
586
f18c6482
SM
587 # With clock snapshots.
588 def test_create_with_clock_snapshots(self):
589 def create_stream_class(tc, cc):
590 return tc.create_stream_class(
591 default_clock_class=cc,
592 supports_packets=True,
593 supports_discarded_packets=True,
594 discarded_packets_have_default_clock_snapshots=True,
595 )
596
597 def msg_iter_next(msg_iter, stream):
598 return msg_iter._create_discarded_packets_message(
599 stream, beg_clock_snapshot=10, end_clock_snapshot=20
600 )
601
602 msg = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
603 self.assertIs(type(msg), bt2._DiscardedPacketsMessage)
604 self.assertEqual(msg.beginning_default_clock_snapshot, 10)
605 self.assertEqual(msg.end_default_clock_snapshot, 20)
606
607 # Trying to create when the stream does not support discarded packets.
608 def test_create_unsupported_raises(self):
609 def create_stream_class(tc, cc):
776a2a25
PP
610 return tc.create_stream_class(
611 supports_packets=True,
612 )
f18c6482
SM
613
614 def msg_iter_next(msg_iter, stream):
615 with self.assertRaisesRegex(
f5567ea8 616 ValueError, "stream class does not support discarded packets"
f18c6482
SM
617 ):
618 msg_iter._create_discarded_packets_message(stream)
619
620 return 123
621
622 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
623 self.assertEqual(res, 123)
624
625 # Trying to create with clock snapshots when the stream does not support
626 # them.
627 def test_create_unsupported_clock_snapshots_raises(self):
628 def create_stream_class(tc, cc):
629 return tc.create_stream_class(
630 supports_packets=True, supports_discarded_packets=True
631 )
632
633 def msg_iter_next(msg_iter, stream):
634 with self.assertRaisesRegex(
635 ValueError,
f5567ea8 636 "discarded packets have no default clock snapshots for this stream class",
f18c6482
SM
637 ):
638 msg_iter._create_discarded_packets_message(
639 stream, beg_clock_snapshot=10, end_clock_snapshot=20
640 )
641
642 return 123
643
644 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
645 self.assertEqual(res, 123)
646
647 # Trying to create without clock snapshots when the stream requires them.
648 def test_create_missing_clock_snapshots_raises(self):
649 def create_stream_class(tc, cc):
650 return tc.create_stream_class(
651 default_clock_class=cc,
652 supports_packets=True,
653 supports_discarded_packets=True,
654 discarded_packets_have_default_clock_snapshots=True,
655 )
656
657 def msg_iter_next(msg_iter, stream):
658 with self.assertRaisesRegex(
659 ValueError,
f5567ea8 660 "discarded packets have default clock snapshots for this stream class",
f18c6482
SM
661 ):
662 msg_iter._create_discarded_packets_message(stream)
663
664 return 123
665
666 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
667 self.assertEqual(res, 123)
668
5d9ef4cb
SM
669 # End clock snapshot greater than beginning clock snapshot.
670 def test_create_clock_snapshots_end_gt_begin_raises(self):
671 def create_stream_class(tc, cc):
672 return tc.create_stream_class(
673 default_clock_class=cc,
674 supports_packets=True,
675 supports_discarded_packets=True,
676 discarded_packets_have_default_clock_snapshots=True,
677 )
678
679 def msg_iter_next(msg_iter, stream):
680 with self.assertRaisesRegex(
681 ValueError,
f5567ea8 682 r"beginning default clock snapshot value \(20\) is greater than end default clock snapshot value \(10\)",
5d9ef4cb
SM
683 ):
684 msg_iter._create_discarded_packets_message(
685 stream, beg_clock_snapshot=20, end_clock_snapshot=10
686 )
687
688 return 123
689
690 res = utils.run_in_message_iterator_next(create_stream_class, msg_iter_next)
691 self.assertEqual(res, 123)
692
f18c6482 693
f5567ea8 694if __name__ == "__main__":
d14ddbba 695 unittest.main()
This page took 0.118772 seconds and 4 git commands to generate.