lib: make packets and packet messages optional, disabled by default
[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
PP
19import collections
20import unittest
811644b8
PP
21import bt2
22
23
9ec609ec 24class AllMessagesTestCase(unittest.TestCase):
811644b8 25 def setUp(self):
811644b8 26
5602ef81 27 class MyIter(bt2._UserMessageIterator):
c5f330cd 28 def __init__(self, self_port_output):
9ec609ec 29 self._at = 0
188edac1 30 self._with_stream_msgs_clock_snapshots = self_port_output.user_data.get('with_stream_msgs_clock_snapshots', False)
811644b8
PP
31
32 def __next__(self):
9ec609ec
SM
33 if test_obj._clock_class:
34 if self._at == 0:
188edac1
SM
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)
9ec609ec 39 elif self._at == 1:
9ec609ec 40 msg = self._create_packet_beginning_message(test_obj._packet, self._at)
188edac1 41 elif self._at == 2:
9ec609ec 42 msg = self._create_event_message(test_obj._event_class, test_obj._packet, self._at)
188edac1 43 elif self._at == 3:
9ec609ec 44 msg = self._create_message_iterator_inactivity_message(test_obj._clock_class, self._at)
188edac1 45 elif self._at == 4:
9ec609ec 46 msg = self._create_discarded_events_message(test_obj._stream, 890, self._at, self._at)
188edac1 47 elif self._at == 5:
9ec609ec 48 msg = self._create_packet_end_message(test_obj._packet, self._at)
188edac1 49 elif self._at == 6:
9ec609ec 50 msg = self._create_discarded_packets_message(test_obj._stream, 678, self._at, self._at)
188edac1
SM
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:
9ec609ec 57 raise bt2.Stop
811644b8 58 else:
9ec609ec
SM
59 if self._at == 0:
60 msg = self._create_stream_beginning_message(test_obj._stream)
61 elif self._at == 1:
9ec609ec 62 msg = self._create_packet_beginning_message(test_obj._packet)
188edac1 63 elif self._at == 2:
9ec609ec 64 msg = self._create_event_message(test_obj._event_class, test_obj._packet)
188edac1 65 elif self._at == 3:
9ec609ec 66 msg = self._create_discarded_events_message(test_obj._stream, 890)
188edac1 67 elif self._at == 4:
9ec609ec 68 msg = self._create_packet_end_message(test_obj._packet)
188edac1 69 elif self._at == 5:
9ec609ec 70 msg = self._create_discarded_packets_message(test_obj._stream, 678)
188edac1 71 elif self._at == 6:
9ec609ec 72 msg = self._create_stream_end_message(test_obj._stream)
188edac1 73 elif self._at >= 7:
9ec609ec 74 raise bt2.Stop
811644b8
PP
75
76 self._at += 1
5602ef81 77 return msg
811644b8 78
9ec609ec 79 class MySrc(bt2._UserSourceComponent, message_iterator_class=MyIter):
811644b8 80 def __init__(self, params):
188edac1 81 self._add_output_port('out', params)
811644b8 82
2e90378a 83 with_cc = bool(params['with_cc'])
9ec609ec
SM
84 tc = self._create_trace_class()
85 if with_cc:
86 cc = self._create_clock_class()
811644b8 87 else:
9ec609ec 88 cc = None
9ec609ec
SM
89
90 sc = tc.create_stream_class(default_clock_class=cc,
26fc5aed 91 supports_packets=True,
9b24b6aa
PP
92 packets_have_beginning_default_clock_snapshot=with_cc,
93 packets_have_end_default_clock_snapshot=with_cc,
2e90378a
PP
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)
9ec609ec
SM
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)
188edac1 132 self.assertIsInstance(msg.default_clock_snapshot, bt2.clock_snapshot._UnknownClockSnapshot)
9ec609ec 133 elif i == 1:
9ec609ec
SM
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)
188edac1 137 elif i == 2:
9ec609ec 138 self.assertIsInstance(msg, bt2.message._EventMessage)
e8ac1aae 139 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
9ec609ec 140 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 141 elif i == 3:
9ec609ec
SM
142 self.assertIsInstance(msg, bt2.message._MessageIteratorInactivityMessage)
143 self.assertEqual(msg.default_clock_snapshot.value, i)
188edac1 144 elif i == 4:
9ec609ec
SM
145 self.assertIsInstance(msg, bt2.message._DiscardedEventsMessage)
146 self.assertEqual(msg.stream.addr, self._stream.addr)
147 self.assertEqual(msg.count, 890)
e8ac1aae 148 self.assertEqual(msg.stream.cls.default_clock_class.addr, self._clock_class.addr)
9ec609ec
SM
149 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
150 self.assertEqual(msg.end_default_clock_snapshot.value, i)
188edac1 151 elif i == 5:
9ec609ec
SM
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)
188edac1 155 elif i == 6:
9ec609ec
SM
156 self.assertIsInstance(msg, bt2.message._DiscardedPacketsMessage)
157 self.assertEqual(msg.stream.addr, self._stream.addr)
158 self.assertEqual(msg.count, 678)
e8ac1aae 159 self.assertEqual(msg.stream.cls.default_clock_class.addr, self._clock_class.addr)
9ec609ec
SM
160 self.assertEqual(msg.beginning_default_clock_snapshot.value, i)
161 self.assertEqual(msg.end_default_clock_snapshot.value, i)
188edac1 162 elif i == 7:
9ec609ec
SM
163 self.assertIsInstance(msg, bt2.message._StreamEndMessage)
164 self.assertEqual(msg.stream.addr, self._stream.addr)
188edac1 165 self.assertIsInstance(msg.default_clock_snapshot, bt2.clock_snapshot._UnknownClockSnapshot)
9ec609ec
SM
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)
188edac1
SM
178 with self.assertRaises(bt2.NonexistentClockSnapshot):
179 msg.default_clock_snapshot
9ec609ec 180 elif i == 1:
9ec609ec
SM
181 self.assertIsInstance(msg, bt2.message._PacketBeginningMessage)
182 self.assertEqual(msg.packet.addr, self._packet.addr)
188edac1 183 elif i == 2:
9ec609ec 184 self.assertIsInstance(msg, bt2.message._EventMessage)
e8ac1aae 185 self.assertEqual(msg.event.cls.addr, self._event_class.addr)
2e90378a 186 with self.assertRaises(bt2.NonexistentClockSnapshot):
9ec609ec 187 msg.default_clock_snapshot
188edac1 188 elif i == 3:
9ec609ec
SM
189 self.assertIsInstance(msg, bt2.message._DiscardedEventsMessage)
190 self.assertEqual(msg.stream.addr, self._stream.addr)
191 self.assertEqual(msg.count, 890)
e8ac1aae 192 self.assertIsNone(msg.stream.cls.default_clock_class)
2e90378a 193 with self.assertRaises(bt2.NonexistentClockSnapshot):
9ec609ec 194 msg.beginning_default_clock_snapshot
2e90378a 195 with self.assertRaises(bt2.NonexistentClockSnapshot):
9ec609ec 196 msg.end_default_clock_snapshot
188edac1 197 elif i == 4:
9ec609ec
SM
198 self.assertIsInstance(msg, bt2.message._PacketEndMessage)
199 self.assertEqual(msg.packet.addr, self._packet.addr)
188edac1 200 elif i == 5:
9ec609ec
SM
201 self.assertIsInstance(msg, bt2.message._DiscardedPacketsMessage)
202 self.assertEqual(msg.stream.addr, self._stream.addr)
203 self.assertEqual(msg.count, 678)
e8ac1aae 204 self.assertIsNone(msg.stream.cls.default_clock_class)
2e90378a 205 with self.assertRaises(bt2.NonexistentClockSnapshot):
9ec609ec 206 msg.beginning_default_clock_snapshot
2e90378a 207 with self.assertRaises(bt2.NonexistentClockSnapshot):
9ec609ec 208 msg.end_default_clock_snapshot
188edac1 209 elif i == 6:
9ec609ec
SM
210 self.assertIsInstance(msg, bt2.message._StreamEndMessage)
211 self.assertEqual(msg.stream.addr, self._stream.addr)
188edac1
SM
212 with self.assertRaises(bt2.NonexistentClockSnapshot):
213 msg.default_clock_snapshot
9ec609ec
SM
214 else:
215 raise Exception
811644b8 216
188edac1
SM
217 def test_msg_stream_with_clock_snapshots(self):
218 params = {
219 'with_cc': True,
220 'with_stream_msgs_clock_snapshots': True,
221 }
c6af194f 222
188edac1
SM
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)
c6af194f 226
188edac1
SM
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)
c6af194f 230
188edac1
SM
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.046648 seconds and 4 git commands to generate.