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