bt2: allow getting self output port from user message iterator
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 11 Sep 2019 20:07:53 +0000 (16:07 -0400)
committerFrancis Deslauriers <francis.deslauriers@efficios.com>
Thu, 12 Sep 2019 19:40:22 +0000 (15:40 -0400)
Change-Id: Ibd5e9206bd4980f1e3e19b54fc41268232a27b81
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2031
CI-Build: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
src/bindings/python/bt2/bt2/message_iterator.py
tests/bindings/python/bt2/test_message_iterator.py

index d28beb25a30c6cb9d3f710c8d7d8b77d47e10ff2..da9ca7474a2735daaf58c1619dd5473be3ee7400 100644 (file)
@@ -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)
index 40adfa60d847fc16e652540b9811114d23d3f833..acd091f872bdca240753a8bd26f64d1e2df4b612 100644 (file)
@@ -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):
This page took 0.026246 seconds and 4 git commands to generate.