We hit the following precondition failure from the Python bindings when
creating a stream class that supports discarded event messages with
clock snapshots, but does not have a default clock class. Same with
discarded packet messages.
04-10 16:40:32.280 59345 59345 F LIB/STREAM-CLASS bt_stream_class_set_supports_discarded_events@stream-class.c:480 Babeltrace 2 library precondition not satisfied; error is:
04-10 16:40:32.280 59345 59345 F LIB/STREAM-CLASS bt_stream_class_set_supports_discarded_events@stream-class.c:480 Stream class has no default clock class: addr=0x60f0000023e0, id=0, is-frozen=0, event-class-count=0, packet-context-fc-addr=(nil), event-common-context-fc-addr=(nil), assigns-auto-ec-id=1, assigns-auto-stream-id=1, supports-packets=0, packets-have-begin-default-cs=0, packets-have-end-default-cs=0, supports-discarded-events=0, discarded-events-have-default-cs=0, supports-discarded-packets=0, discarded-packets-have-default-cs=0, trace-class-addr=0x608000002b20, pcf-pool-size=0, pcf-pool-cap=0
04-10 16:40:32.280 59345 59345 F LIB/STREAM-CLASS bt_stream_class_set_supports_discarded_events@stream-class.c:480 Aborting...
Add some checks for that in _StreamClass._validate_create_params, and
some corresponding tests.
Change-Id: I5d79b8ecfc05acbb79b7b15d28ba2c5c34f00729
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3390
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
utils._check_bool(supports_discarded_events)
utils._check_bool(discarded_events_have_default_clock_snapshots)
utils._check_bool(supports_discarded_events)
utils._check_bool(discarded_events_have_default_clock_snapshots)
- if (
- not supports_discarded_events
- and discarded_events_have_default_clock_snapshots
- ):
- raise ValueError(
- 'cannot not support discarded events, but have default clock snapshots for discarded event messages'
- )
+ if discarded_events_have_default_clock_snapshots:
+ if not supports_discarded_events:
+ raise ValueError(
+ 'cannot not support discarded events, but have default clock snapshots for discarded event messages'
+ )
+
+ if default_clock_class is None:
+ raise ValueError(
+ 'cannot have no default clock class, but have default clock snapshots for discarded event messages'
+ )
# Discarded packets
utils._check_bool(supports_discarded_packets)
# Discarded packets
utils._check_bool(supports_discarded_packets)
'cannot support discarded packets, but not support packets'
)
'cannot support discarded packets, but not support packets'
)
- if (
- not supports_discarded_packets
- and discarded_packets_have_default_clock_snapshots
- ):
- raise ValueError(
- 'cannot not support discarded packets, but have default clock snapshots for discarded packet messages'
- )
+ if discarded_packets_have_default_clock_snapshots:
+ if not supports_discarded_packets:
+ raise ValueError(
+ 'cannot not support discarded packets, but have default clock snapshots for discarded packet messages'
+ )
+
+ if default_clock_class is None:
+ raise ValueError(
+ 'cannot have no default clock class, but have default clock snapshots for discarded packet messages'
+ )
self.assertEqual(len(self._tc), 0)
self.assertEqual(len(self._tc), 0)
+ def test_supports_discarded_events_with_clock_snapshots_without_default_clock_class_raises(
+ self,
+ ):
+ with self.assertRaisesRegex(
+ ValueError,
+ 'cannot have no default clock class, but have default clock snapshots for discarded event messages',
+ ):
+ self._tc.create_stream_class(
+ supports_discarded_events=True,
+ discarded_events_have_default_clock_snapshots=True,
+ )
+
+ self.assertEqual(len(self._tc), 0)
+
def test_supports_discarded_packets_without_cs(self):
sc = self._tc.create_stream_class(
default_clock_class=self._cc,
def test_supports_discarded_packets_without_cs(self):
sc = self._tc.create_stream_class(
default_clock_class=self._cc,
self.assertEqual(len(self._tc), 0)
self.assertEqual(len(self._tc), 0)
+ def test_supports_discarded_packets_with_clock_snapshots_without_default_clock_class_raises(
+ self,
+ ):
+ with self.assertRaisesRegex(
+ ValueError,
+ 'cannot have no default clock class, but have default clock snapshots for discarded packet messages',
+ ):
+ self._tc.create_stream_class(
+ supports_packets=True,
+ supports_discarded_packets=True,
+ discarded_packets_have_default_clock_snapshots=True,
+ )
+
+ self.assertEqual(len(self._tc), 0)
+
def test_trace_class(self):
sc = self._tc.create_stream_class()
self.assertEqual(sc.trace_class.addr, self._tc.addr)
def test_trace_class(self):
sc = self._tc.create_stream_class()
self.assertEqual(sc.trace_class.addr, self._tc.addr)