From 14503fb185df8483538bb2274bccc9c3a19f0d6f Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Wed, 11 Sep 2019 16:07:53 -0400 Subject: [PATCH] bt2: allow getting self output port from user message iterator Change-Id: Ibd5e9206bd4980f1e3e19b54fc41268232a27b81 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/2031 CI-Build: Francis Deslauriers Tested-by: jenkins Reviewed-by: Francis Deslauriers --- .../python/bt2/bt2/message_iterator.py | 8 ++++++++ .../python/bt2/test_message_iterator.py | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/bindings/python/bt2/bt2/message_iterator.py b/src/bindings/python/bt2/bt2/message_iterator.py index d28beb25..da9ca747 100644 --- a/src/bindings/python/bt2/bt2/message_iterator.py +++ b/src/bindings/python/bt2/bt2/message_iterator.py @@ -123,6 +123,14 @@ class _UserMessageIterator(_MessageIterator): def _component(self): return native_bt.bt2_get_user_component_from_user_msg_iter(self._bt_ptr) + @property + def _port(self): + port_ptr = native_bt.self_message_iterator_borrow_port(self._bt_ptr) + assert port_ptr is not None + return bt2_port._create_self_from_ptr_and_get_ref( + port_ptr, native_bt.PORT_TYPE_OUTPUT + ) + @property def addr(self): return int(self._bt_ptr) diff --git a/tests/bindings/python/bt2/test_message_iterator.py b/tests/bindings/python/bt2/test_message_iterator.py index 40adfa60..acd091f8 100644 --- a/tests/bindings/python/bt2/test_message_iterator.py +++ b/tests/bindings/python/bt2/test_message_iterator.py @@ -20,6 +20,7 @@ import unittest import bt2 import sys from utils import TestOutputPortMessageIterator +from bt2 import port as bt2_port class UserMessageIteratorTestCase(unittest.TestCase): @@ -186,6 +187,25 @@ class UserMessageIteratorTestCase(unittest.TestCase): graph.run() self.assertEqual(salut, 23) + def test_port(self): + class MyIter(bt2._UserMessageIterator): + def __init__(self_iter, self_port_output): + nonlocal called + called = True + port = self_iter._port + self.assertIs(type(self_port_output), bt2_port._UserComponentOutputPort) + self.assertIs(type(port), bt2_port._UserComponentOutputPort) + self.assertEqual(self_port_output.addr, port.addr) + + class MySource(bt2._UserSourceComponent, message_iterator_class=MyIter): + def __init__(self, params, obj): + self._add_output_port('out') + + called = False + graph = self._create_graph(MySource) + graph.run() + self.assertTrue(called) + def test_addr(self): class MyIter(bt2._UserMessageIterator): def __init__(self, self_port_output): -- 2.34.1