2 # Copyright (C) 2019 EfficiOS Inc.
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
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.
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.
24 class AllMessagesTestCase(unittest
.TestCase
):
27 class MyIter(bt2
._UserMessageIterator
):
28 def __init__(self
, self_port_output
):
32 if test_obj
._clock
_class
:
34 msg
= self
._create
_stream
_beginning
_message
(test_obj
._stream
)
36 msg
= self
._create
_stream
_activity
_beginning
_message
(test_obj
._stream
, default_clock_snapshot
=self
._at
)
38 msg
= self
._create
_packet
_beginning
_message
(test_obj
._packet
, self
._at
)
40 msg
= self
._create
_event
_message
(test_obj
._event
_class
, test_obj
._packet
, self
._at
)
42 msg
= self
._create
_message
_iterator
_inactivity
_message
(test_obj
._clock
_class
, self
._at
)
44 msg
= self
._create
_discarded
_events
_message
(test_obj
._stream
, 890, self
._at
, self
._at
)
46 msg
= self
._create
_packet
_end
_message
(test_obj
._packet
, self
._at
)
48 msg
= self
._create
_discarded
_packets
_message
(test_obj
._stream
, 678, self
._at
, self
._at
)
50 msg
= self
._create
_stream
_activity
_end
_message
(test_obj
._stream
, default_clock_snapshot
=self
._at
)
52 msg
= self
._create
_stream
_end
_message
(test_obj
._stream
)
57 msg
= self
._create
_stream
_beginning
_message
(test_obj
._stream
)
59 msg
= self
._create
_stream
_activity
_beginning
_message
(test_obj
._stream
)
61 msg
= self
._create
_packet
_beginning
_message
(test_obj
._packet
)
63 msg
= self
._create
_event
_message
(test_obj
._event
_class
, test_obj
._packet
)
65 msg
= self
._create
_discarded
_events
_message
(test_obj
._stream
, 890)
67 msg
= self
._create
_packet
_end
_message
(test_obj
._packet
)
69 msg
= self
._create
_discarded
_packets
_message
(test_obj
._stream
, 678)
71 msg
= self
._create
_stream
_activity
_end
_message
(test_obj
._stream
)
73 msg
= self
._create
_stream
_end
_message
(test_obj
._stream
)
80 class MySrc(bt2
._UserSourceComponent
, message_iterator_class
=MyIter
):
81 def __init__(self
, params
):
82 self
._add
_output
_port
('out')
84 with_cc
= bool(params
['with_cc'])
85 tc
= self
._create
_trace
_class
()
87 cc
= self
._create
_clock
_class
()
91 sc
= tc
.create_stream_class(default_clock_class
=cc
,
92 packets_have_beginning_default_clock_snapshot
=with_cc
,
93 packets_have_end_default_clock_snapshot
=with_cc
,
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
)
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
),
106 ec
= sc
.create_event_class(name
='salut', payload_field_class
=payload_fc
)
109 stream
= trace
.create_stream(sc
)
110 packet
= stream
.create_packet()
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
119 self
._graph
= bt2
.Graph()
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'])
128 for i
, msg
in enumerate(self
._msg
_iter
):
130 self
.assertIsInstance(msg
, bt2
.message
._StreamBeginningMessage
)
131 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
133 self
.assertIsInstance(msg
, bt2
.message
._StreamActivityBeginningMessage
)
134 self
.assertEqual(msg
.default_clock_snapshot
.value
, i
)
136 self
.assertIsInstance(msg
, bt2
.message
._PacketBeginningMessage
)
137 self
.assertEqual(msg
.packet
.addr
, self
._packet
.addr
)
138 self
.assertEqual(msg
.default_clock_snapshot
.value
, i
)
140 self
.assertIsInstance(msg
, bt2
.message
._EventMessage
)
141 self
.assertEqual(msg
.event
.cls
.addr
, self
._event
_class
.addr
)
142 self
.assertEqual(msg
.default_clock_snapshot
.value
, i
)
144 self
.assertIsInstance(msg
, bt2
.message
._MessageIteratorInactivityMessage
)
145 self
.assertEqual(msg
.default_clock_snapshot
.value
, i
)
147 self
.assertIsInstance(msg
, bt2
.message
._DiscardedEventsMessage
)
148 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
149 self
.assertEqual(msg
.count
, 890)
150 self
.assertEqual(msg
.stream
.cls
.default_clock_class
.addr
, self
._clock
_class
.addr
)
151 self
.assertEqual(msg
.beginning_default_clock_snapshot
.value
, i
)
152 self
.assertEqual(msg
.end_default_clock_snapshot
.value
, i
)
154 self
.assertIsInstance(msg
, bt2
.message
._PacketEndMessage
)
155 self
.assertEqual(msg
.packet
.addr
, self
._packet
.addr
)
156 self
.assertEqual(msg
.default_clock_snapshot
.value
, i
)
158 self
.assertIsInstance(msg
, bt2
.message
._DiscardedPacketsMessage
)
159 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
160 self
.assertEqual(msg
.count
, 678)
161 self
.assertEqual(msg
.stream
.cls
.default_clock_class
.addr
, self
._clock
_class
.addr
)
162 self
.assertEqual(msg
.beginning_default_clock_snapshot
.value
, i
)
163 self
.assertEqual(msg
.end_default_clock_snapshot
.value
, i
)
165 self
.assertIsInstance(msg
, bt2
.message
._StreamActivityEndMessage
)
166 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
167 self
.assertEqual(msg
.default_clock_snapshot
.value
, i
)
169 self
.assertIsInstance(msg
, bt2
.message
._StreamEndMessage
)
170 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
174 def test_all_msg_without_cc(self
):
175 params
= {'with_cc': False}
176 self
._src
_comp
= self
._graph
.add_component(self
._src
, 'my_source', params
)
177 self
._msg
_iter
= self
._graph
.create_output_port_message_iterator(self
._src
_comp
.output_ports
['out'])
179 for i
, msg
in enumerate(self
._msg
_iter
):
181 self
.assertIsInstance(msg
, bt2
.message
._StreamBeginningMessage
)
182 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
184 self
.assertIsInstance(msg
, bt2
.message
._StreamActivityBeginningMessage
)
185 self
.assertIsInstance(msg
.default_clock_snapshot
,
186 bt2
._UnknownClockSnapshot
)
188 self
.assertIsInstance(msg
, bt2
.message
._PacketBeginningMessage
)
189 self
.assertEqual(msg
.packet
.addr
, self
._packet
.addr
)
191 self
.assertIsInstance(msg
, bt2
.message
._EventMessage
)
192 self
.assertEqual(msg
.event
.cls
.addr
, self
._event
_class
.addr
)
193 with self
.assertRaises(bt2
.NonexistentClockSnapshot
):
194 msg
.default_clock_snapshot
196 self
.assertIsInstance(msg
, bt2
.message
._DiscardedEventsMessage
)
197 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
198 self
.assertEqual(msg
.count
, 890)
199 self
.assertIsNone(msg
.stream
.cls
.default_clock_class
)
200 with self
.assertRaises(bt2
.NonexistentClockSnapshot
):
201 msg
.beginning_default_clock_snapshot
202 with self
.assertRaises(bt2
.NonexistentClockSnapshot
):
203 msg
.end_default_clock_snapshot
205 self
.assertIsInstance(msg
, bt2
.message
._PacketEndMessage
)
206 self
.assertEqual(msg
.packet
.addr
, self
._packet
.addr
)
208 self
.assertIsInstance(msg
, bt2
.message
._DiscardedPacketsMessage
)
209 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
210 self
.assertEqual(msg
.count
, 678)
211 self
.assertIsNone(msg
.stream
.cls
.default_clock_class
)
212 with self
.assertRaises(bt2
.NonexistentClockSnapshot
):
213 msg
.beginning_default_clock_snapshot
214 with self
.assertRaises(bt2
.NonexistentClockSnapshot
):
215 msg
.end_default_clock_snapshot
217 self
.assertIsInstance(msg
, bt2
.message
._StreamActivityEndMessage
)
218 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
219 self
.assertIsInstance(msg
.default_clock_snapshot
,
220 bt2
._UnknownClockSnapshot
)
222 self
.assertIsInstance(msg
, bt2
.message
._StreamEndMessage
)
223 self
.assertEqual(msg
.stream
.addr
, self
._stream
.addr
)
228 class StreamActivityMessagesTestCase(unittest
.TestCase
):
229 def _test_create_msg(self
, with_cc
, test_create_beginning_func
, test_create_end_func
):
230 class MyIter(bt2
._UserMessageIterator
):
231 def __init__(self
, self_port_output
):
236 msg
= self
._create
_stream
_beginning
_message
(self
._component
._stream
)
238 msg
= test_create_beginning_func(self
, self
._component
._stream
)
240 msg
= test_create_end_func(self
, self
._component
._stream
)
242 msg
= self
._create
_stream
_end
_message
(self
._component
._stream
)
249 class MySrc(bt2
._UserSourceComponent
, message_iterator_class
=MyIter
):
250 def __init__(self
, params
):
251 self
._add
_output
_port
('out')
252 tc
= self
._create
_trace
_class
()
255 cc
= self
._create
_clock
_class
()
256 sc
= tc
.create_stream_class(default_clock_class
=cc
)
258 sc
= tc
.create_stream_class()
260 # Create payload field class
262 self
._stream
= trace
.create_stream(sc
)
265 src_comp
= graph
.add_component(MySrc
, 'src')
266 msg_iter
= graph
.create_output_port_message_iterator(src_comp
.output_ports
['out'])
271 def test_create_beginning_with_cc_with_known_default_cs(self
):
272 def create_beginning(msg_iter
, stream
):
273 msg
= msg_iter
._create
_stream
_activity
_beginning
_message
(stream
, 172)
274 self
.assertEqual(msg
.default_clock_snapshot
.value
, 172)
277 def create_end(msg_iter
, stream
):
278 return msg_iter
._create
_stream
_activity
_end
_message
(stream
, 199)
280 self
._test
_create
_msg
(True, create_beginning
, create_end
)
282 def test_create_end_with_cc_with_known_default_cs(self
):
283 def create_beginning(msg_iter
, stream
):
284 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
, 172)
286 def create_end(msg_iter
, stream
):
287 msg
= msg_iter
._create
_stream
_activity
_end
_message
(stream
, 199)
288 self
.assertEqual(msg
.default_clock_snapshot
.value
, 199)
291 self
._test
_create
_msg
(True, create_beginning
, create_end
)
293 def test_create_beginning_with_cc_with_unknown_default_cs(self
):
294 def create_beginning(msg_iter
, stream
):
295 msg
= msg_iter
._create
_stream
_activity
_beginning
_message
(stream
,
296 msg_iter
._unknown
_clock
_snapshot
)
297 self
.assertIsInstance(msg
.default_clock_snapshot
,
298 bt2
._UnknownClockSnapshot
)
301 def create_end(msg_iter
, stream
):
302 return msg_iter
._create
_stream
_activity
_end
_message
(stream
, 199)
304 self
._test
_create
_msg
(True, create_beginning
, create_end
)
306 def test_create_end_with_cc_with_unknown_default_cs(self
):
307 def create_beginning(msg_iter
, stream
):
308 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
, 172)
310 def create_end(msg_iter
, stream
):
311 msg
= msg_iter
._create
_stream
_activity
_end
_message
(stream
,
312 msg_iter
._unknown
_clock
_snapshot
)
313 self
.assertIsInstance(msg
.default_clock_snapshot
,
314 bt2
._UnknownClockSnapshot
)
317 self
._test
_create
_msg
(True, create_beginning
, create_end
)
319 def test_create_beginning_with_cc_with_infinite_default_cs(self
):
320 def create_beginning(msg_iter
, stream
):
321 msg
= msg_iter
._create
_stream
_activity
_beginning
_message
(stream
,
322 msg_iter
._infinite
_clock
_snapshot
)
323 self
.assertIsInstance(msg
.default_clock_snapshot
,
324 bt2
._InfiniteClockSnapshot
)
327 def create_end(msg_iter
, stream
):
328 return msg_iter
._create
_stream
_activity
_end
_message
(stream
, 199)
330 self
._test
_create
_msg
(True, create_beginning
, create_end
)
332 def test_create_end_with_cc_with_infinite_default_cs(self
):
333 def create_beginning(msg_iter
, stream
):
334 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
, 172)
336 def create_end(msg_iter
, stream
):
337 msg
= msg_iter
._create
_stream
_activity
_end
_message
(stream
,
338 msg_iter
._infinite
_clock
_snapshot
)
339 self
.assertIsInstance(msg
.default_clock_snapshot
,
340 bt2
._InfiniteClockSnapshot
)
343 self
._test
_create
_msg
(True, create_beginning
, create_end
)
345 def test_create_beginning_without_cc_with_known_default_cs(self
):
346 def create_beginning(msg_iter
, stream
):
347 with self
.assertRaises(ValueError):
348 msg_iter
._create
_stream
_activity
_beginning
_message
(stream
, 172)
350 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
)
352 def create_end(msg_iter
, stream
):
353 return msg_iter
._create
_stream
_activity
_end
_message
(stream
)
355 self
._test
_create
_msg
(False, create_beginning
, create_end
)
357 def test_create_end_without_cc_with_known_default_cs(self
):
358 def create_beginning(msg_iter
, stream
):
359 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
)
361 def create_end(msg_iter
, stream
):
362 with self
.assertRaises(ValueError):
363 msg_iter
._create
_stream
_activity
_end
_message
(stream
, 199)
365 return msg_iter
._create
_stream
_activity
_end
_message
(stream
)
367 self
._test
_create
_msg
(False, create_beginning
, create_end
)
369 def test_create_beginning_without_cc_with_unknown_default_cs(self
):
370 def create_beginning(msg_iter
, stream
):
371 msg
= msg_iter
._create
_stream
_activity
_beginning
_message
(stream
,
372 msg_iter
._unknown
_clock
_snapshot
)
373 self
.assertIsInstance(msg
.default_clock_snapshot
,
374 bt2
._UnknownClockSnapshot
)
377 def create_end(msg_iter
, stream
):
378 return msg_iter
._create
_stream
_activity
_end
_message
(stream
)
380 self
._test
_create
_msg
(False, create_beginning
, create_end
)
382 def test_create_end_without_cc_with_unknown_default_cs(self
):
383 def create_beginning(msg_iter
, stream
):
384 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
)
386 def create_end(msg_iter
, stream
):
387 msg
= msg_iter
._create
_stream
_activity
_end
_message
(stream
,
388 msg_iter
._unknown
_clock
_snapshot
)
389 self
.assertIsInstance(msg
.default_clock_snapshot
,
390 bt2
._UnknownClockSnapshot
)
393 self
._test
_create
_msg
(False, create_beginning
, create_end
)
395 def test_create_beginning_without_cc_with_infinite_default_cs(self
):
396 def create_beginning(msg_iter
, stream
):
397 msg
= msg_iter
._create
_stream
_activity
_beginning
_message
(stream
,
398 msg_iter
._infinite
_clock
_snapshot
)
399 self
.assertIsInstance(msg
.default_clock_snapshot
,
400 bt2
._InfiniteClockSnapshot
)
403 def create_end(msg_iter
, stream
):
404 return msg_iter
._create
_stream
_activity
_end
_message
(stream
)
406 self
._test
_create
_msg
(False, create_beginning
, create_end
)
408 def test_create_end_without_cc_with_infinite_default_cs(self
):
409 def create_beginning(msg_iter
, stream
):
410 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
)
412 def create_end(msg_iter
, stream
):
413 msg
= msg_iter
._create
_stream
_activity
_end
_message
(stream
,
414 msg_iter
._infinite
_clock
_snapshot
)
415 self
.assertIsInstance(msg
.default_clock_snapshot
,
416 bt2
._InfiniteClockSnapshot
)
419 self
._test
_create
_msg
(False, create_beginning
, create_end
)
421 def test_create_beginning_default_cs_wrong_type(self
):
422 def create_beginning(msg_iter
, stream
):
423 with self
.assertRaises(TypeError):
424 msg_iter
._create
_stream
_activity
_beginning
_message
(stream
, 'infinite')
426 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
)
428 def create_end(msg_iter
, stream
):
429 return msg_iter
._create
_stream
_activity
_end
_message
(stream
)
431 self
._test
_create
_msg
(False, create_beginning
, create_end
)
433 def test_create_end_without_default_cs_wrong_type(self
):
434 def create_beginning(msg_iter
, stream
):
435 return msg_iter
._create
_stream
_activity
_beginning
_message
(stream
)
437 def create_end(msg_iter
, stream
):
438 with self
.assertRaises(TypeError):
439 msg_iter
._create
_stream
_activity
_end
_message
(stream
, 'unknown')
441 return msg_iter
._create
_stream
_activity
_end
_message
(stream
)
443 self
._test
_create
_msg
(False, create_beginning
, create_end
)