bt2: check for _graph_is_configured method in user sink classes
[babeltrace.git] / tests / bindings / python / bt2 / test_graph.py
index 8ed585a626aa0ff4d0753949d6ca99c03a78cc61..cb447a5a7f7593d592af8ad58c8d3b104a5bd040 100644 (file)
@@ -1,3 +1,21 @@
+#
+# Copyright (C) 2019 EfficiOS Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; only version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+
 from bt2 import value
 import collections
 import unittest
@@ -6,14 +24,14 @@ import bt2
 
 
 class _MyIter(bt2._UserMessageIterator):
-    def __init__(self):
+    def __init__(self, self_output_port):
         self._build_meta()
         self._at = 0
 
     def _build_meta(self):
         self._tc = self._component._create_trace_class()
         self._t = self._tc()
-        self._sc = self._tc.create_stream_class()
+        self._sc = self._tc.create_stream_class(supports_packets=True)
         self._ec = self._sc.create_event_class(name='salut')
         self._my_int_ft = self._tc.create_signed_integer_field_class(32)
         payload_ft = self._tc.create_structure_field_class()
@@ -45,6 +63,8 @@ class GraphTestCase(unittest.TestCase):
         class MySink(bt2._UserSinkComponent):
             def _consume(self):
                 pass
+            def _graph_is_configured(self):
+                pass
 
         comp = self._graph.add_component(MySink, 'salut')
         self.assertEqual(comp.name, 'salut')
@@ -53,10 +73,12 @@ class GraphTestCase(unittest.TestCase):
         class MySink(bt2._UserSinkComponent):
             def _consume(self):
                 pass
+            def _graph_is_configured(self):
+                pass
 
         comp = self._graph.add_component(MySink, 'salut')
         assert comp
-        comp2 = self._graph.add_component(comp.component_class, 'salut2')
+        comp2 = self._graph.add_component(comp.cls, 'salut2')
         self.assertEqual(comp2.name, 'salut2')
 
     def test_add_component_params(self):
@@ -69,6 +91,8 @@ class GraphTestCase(unittest.TestCase):
 
             def _consume(self):
                 pass
+            def _graph_is_configured(self):
+                pass
 
         params = {'hello': 23, 'path': '/path/to/stuff'}
         comp = self._graph.add_component(MySink, 'salut', params)
@@ -79,6 +103,37 @@ class GraphTestCase(unittest.TestCase):
         with self.assertRaises(TypeError):
             self._graph.add_component(int, 'salut')
 
+    def test_add_component_invalid_logging_level_type(self):
+        class MySink(bt2._UserSinkComponent):
+            def _consume(self):
+                pass
+            def _graph_is_configured(self):
+                pass
+
+        with self.assertRaises(TypeError):
+            self._graph.add_component(MySink, 'salut', logging_level='yo')
+
+    def test_add_component_invalid_logging_level_value(self):
+        class MySink(bt2._UserSinkComponent):
+            def _consume(self):
+                pass
+            def _graph_is_configured(self):
+                pass
+
+        with self.assertRaises(ValueError):
+            self._graph.add_component(MySink, 'salut', logging_level=12345)
+
+    def test_add_component_logging_level(self):
+        class MySink(bt2._UserSinkComponent):
+            def _consume(self):
+                pass
+            def _graph_is_configured(self):
+                pass
+
+        comp = self._graph.add_component(MySink, 'salut',
+                                         logging_level=bt2.LoggingLevel.DEBUG)
+        self.assertEqual(comp.logging_level, bt2.LoggingLevel.DEBUG)
+
     def test_connect_ports(self):
         class MyIter(bt2._UserMessageIterator):
             def __next__(self):
@@ -96,6 +151,9 @@ class GraphTestCase(unittest.TestCase):
             def _consume(self):
                 raise bt2.Stop
 
+            def _graph_is_configured(self):
+                pass
+
         src = self._graph.add_component(MySource, 'src')
         sink = self._graph.add_component(MySink, 'sink')
 
@@ -103,8 +161,8 @@ class GraphTestCase(unittest.TestCase):
                                          sink.input_ports['in'])
         self.assertTrue(src.output_ports['out'].is_connected)
         self.assertTrue(sink.input_ports['in'].is_connected)
-        self.assertEqual(src.output_ports['out'].connection._ptr, conn._ptr)
-        self.assertEqual(sink.input_ports['in'].connection._ptr, conn._ptr)
+        self.assertEqual(src.output_ports['out'].connection.addr, conn.addr)
+        self.assertEqual(sink.input_ports['in'].connection.addr, conn.addr)
 
     def test_connect_ports_invalid_direction(self):
         class MyIter(bt2._UserMessageIterator):
@@ -123,6 +181,9 @@ class GraphTestCase(unittest.TestCase):
             def _consume(self):
                 raise bt2.Stop
 
+            def _graph_is_configured(self):
+                pass
+
         src = self._graph.add_component(MySource, 'src')
         sink = self._graph.add_component(MySink, 'sink')
 
@@ -130,39 +191,12 @@ class GraphTestCase(unittest.TestCase):
             conn = self._graph.connect_ports(sink.input_ports['in'],
                                              src.output_ports['out'])
 
-    def test_connect_ports_refused(self):
-        class MyIter(bt2._UserMessageIterator):
-            def __next__(self):
-                raise bt2.Stop
-
-        class MySource(bt2._UserSourceComponent,
-                       message_iterator_class=MyIter):
-            def __init__(self, params):
-                self._add_output_port('out')
-
-        class MySink(bt2._UserSinkComponent):
-            def __init__(self, params):
-                self._add_input_port('in')
-
-            def _consume(self):
-                raise bt2.Stop
-
-            def _accept_port_connection(self, port, other_port):
-                return False
-
-        src = self._graph.add_component(MySource, 'src')
-        sink = self._graph.add_component(MySink, 'sink')
-
-        with self.assertRaises(bt2.PortConnectionRefused):
-            conn = self._graph.connect_ports(src.output_ports['out'],
-                                             sink.input_ports['in'])
-
     def test_cancel(self):
         self.assertFalse(self._graph.is_canceled)
         self._graph.cancel()
         self.assertTrue(self._graph.is_canceled)
 
-    # Test that Graph.run() raises bt2.GraphCanceled if the graph gets canceled
+    # Test that Graph.run() raises bt2.Canceled if the graph gets canceled
     # during execution.
     def test_cancel_while_running(self):
         class MyIter(_MyIter):
@@ -192,7 +226,7 @@ class GraphTestCase(unittest.TestCase):
         up = graph.add_component(MySource, 'down')
         down = graph.add_component(MySink, 'up')
         graph.connect_ports(up.output_ports['out'], down.input_ports['in'])
-        with self.assertRaises(bt2.GraphCanceled):
+        with self.assertRaises(bt2.Canceled):
             graph.run()
 
     def test_run(self):
@@ -234,7 +268,7 @@ class GraphTestCase(unittest.TestCase):
                     self.assertIsInstance(msg, bt2.message._PacketBeginningMessage)
                 elif comp_self._at >= 2 and comp_self._at <= 6:
                     self.assertIsInstance(msg, bt2.message._EventMessage)
-                    self.assertEqual(msg.event.event_class.name, 'salut')
+                    self.assertEqual(msg.event.cls.name, 'salut')
                 elif comp_self._at == 7:
                     self.assertIsInstance(msg, bt2.message._PacketEndMessage)
                 elif comp_self._at == 8:
@@ -377,6 +411,9 @@ class GraphTestCase(unittest.TestCase):
             def _consume(self):
                 raise bt2.Stop
 
+            def _graph_is_configured(self):
+                pass
+
             def _port_connected(self, port, other_port):
                 self._add_input_port('taste')
 
@@ -441,6 +478,9 @@ class GraphTestCase(unittest.TestCase):
             def _consume(self):
                 raise bt2.Stop
 
+            def _graph_is_configured(self):
+                pass
+
             def _port_connected(self, port, other_port):
                 self._add_input_port('taste')
 
@@ -457,6 +497,9 @@ class GraphTestCase(unittest.TestCase):
             def _consume(self):
                 raise bt2.Stop
 
+            def _graph_is_configured(self):
+                pass
+
         graph = bt2.Graph()
 
         with self.assertRaises(bt2.Error):
@@ -470,6 +513,9 @@ class GraphTestCase(unittest.TestCase):
             def _consume(self):
                 raise bt2.Stop
 
+            def _graph_is_configured(self):
+                pass
+
         def port_added_listener(component, port):
             raise ValueError('oh noes!')
 
@@ -496,7 +542,11 @@ class GraphTestCase(unittest.TestCase):
             def _consume(self):
                 raise bt2.Stop
 
-        def ports_connected_listener(upstream_port, downstream_port):
+            def _graph_is_configured(self):
+                pass
+
+        def ports_connected_listener(upstream_component, upstream_port,
+                                     downstream_component, downstream_port):
             raise ValueError('oh noes!')
 
         graph = bt2.Graph()
This page took 0.026747 seconds and 4 git commands to generate.