tests: remove unnecessary message iterator classes
[babeltrace.git] / tests / bindings / python / bt2 / test_component_class.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 19import unittest
811644b8
PP
20import bt2
21
22
23class UserComponentClassTestCase(unittest.TestCase):
24 def _test_no_init(self, cls):
ce4923b0 25 with self.assertRaises(RuntimeError):
811644b8
PP
26 cls()
27
28 def test_no_init_source(self):
5c61fb9d
SM
29 class MySource(
30 bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
31 ):
811644b8
PP
32 pass
33
34 self._test_no_init(MySource)
35
36 def test_no_init_filter(self):
5c61fb9d
SM
37 class MyFilter(
38 bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
39 ):
811644b8
PP
40 pass
41
42 self._test_no_init(MyFilter)
43
44 def test_no_init_sink(self):
45 class MySink(bt2._UserSinkComponent):
6a91742b 46 def _user_consume(self):
a01b452b
SM
47 pass
48
811644b8
PP
49 self._test_no_init(MySink)
50
5602ef81 51 def test_incomplete_source_no_msg_iter_cls(self):
cb06aa27 52 with self.assertRaises(bt2._IncompleteUserClass):
cfbd7cf3 53
811644b8
PP
54 class MySource(bt2._UserSourceComponent):
55 pass
56
5602ef81 57 def test_incomplete_source_wrong_msg_iter_cls_type(self):
cb06aa27 58 with self.assertRaises(bt2._IncompleteUserClass):
cfbd7cf3
FD
59
60 class MySource(bt2._UserSourceComponent, message_iterator_class=int):
811644b8
PP
61 pass
62
5602ef81 63 def test_incomplete_filter_no_msg_iter_cls(self):
cb06aa27 64 with self.assertRaises(bt2._IncompleteUserClass):
cfbd7cf3 65
811644b8
PP
66 class MyFilter(bt2._UserFilterComponent):
67 pass
68
69 def test_incomplete_sink_no_consume_method(self):
cb06aa27 70 with self.assertRaises(bt2._IncompleteUserClass):
cfbd7cf3 71
811644b8
PP
72 class MySink(bt2._UserSinkComponent):
73 pass
74
75 def test_minimal_source(self):
5c61fb9d
SM
76 class MySource(
77 bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
78 ):
811644b8
PP
79 pass
80
81 def test_minimal_filter(self):
5c61fb9d
SM
82 class MyFilter(
83 bt2._UserFilterComponent, message_iterator_class=bt2._UserMessageIterator
84 ):
811644b8
PP
85 pass
86
87 def test_minimal_sink(self):
88 class MySink(bt2._UserSinkComponent):
6a91742b 89 def _user_consume(self):
a01b452b
SM
90 pass
91
811644b8
PP
92 def test_default_name(self):
93 class MySink(bt2._UserSinkComponent):
6a91742b 94 def _user_consume(self):
a01b452b
SM
95 pass
96
811644b8
PP
97 self.assertEqual(MySink.name, 'MySink')
98
99 def test_custom_name(self):
100 class MySink(bt2._UserSinkComponent, name='salut'):
6a91742b 101 def _user_consume(self):
a01b452b
SM
102 pass
103
811644b8
PP
104 self.assertEqual(MySink.name, 'salut')
105
106 def test_invalid_custom_name(self):
107 with self.assertRaises(TypeError):
cfbd7cf3 108
811644b8 109 class MySink(bt2._UserSinkComponent, name=23):
6a91742b 110 def _user_consume(self):
a01b452b
SM
111 pass
112
811644b8
PP
113 def test_description(self):
114 class MySink(bt2._UserSinkComponent):
115 """
116 The description.
117
118 Bacon ipsum dolor amet ribeye t-bone corned beef, beef jerky
119 porchetta burgdoggen prosciutto chicken frankfurter boudin
120 hamburger doner bacon turducken. Sirloin shank sausage,
121 boudin meatloaf alcatra meatball t-bone tongue pastrami
122 cupim flank tenderloin.
123 """
124
6a91742b 125 def _user_consume(self):
a01b452b
SM
126 pass
127
811644b8
PP
128 self.assertEqual(MySink.description, 'The description.')
129
130 def test_empty_description(self):
131 class MySink(bt2._UserSinkComponent):
132 """
133 """
134
6a91742b 135 def _user_consume(self):
a01b452b
SM
136 pass
137
811644b8
PP
138 self.assertIsNone(MySink.description)
139
140 def test_help(self):
141 class MySink(bt2._UserSinkComponent):
142 """
143 The description.
144
145 The help
146 text is
147 here.
148 """
149
6a91742b 150 def _user_consume(self):
a01b452b
SM
151 pass
152
811644b8
PP
153 self.assertEqual(MySink.help, 'The help\ntext is\nhere.')
154
155 def test_addr(self):
156 class MySink(bt2._UserSinkComponent):
6a91742b 157 def _user_consume(self):
a01b452b
SM
158 pass
159
811644b8
PP
160 self.assertIsInstance(MySink.addr, int)
161 self.assertNotEqual(MySink.addr, 0)
162
163 def test_query_not_implemented(self):
164 class MySink(bt2._UserSinkComponent):
6a91742b 165 def _user_consume(self):
a01b452b
SM
166 pass
167
76b6c2f7 168 with self.assertRaises(bt2.UnknownObject):
3c729b9a 169 bt2.QueryExecutor(MySink, 'obj', 23).query()
811644b8
PP
170
171 def test_query_raises(self):
172 class MySink(bt2._UserSinkComponent):
6a91742b 173 def _user_consume(self):
a01b452b
SM
174 pass
175
811644b8 176 @classmethod
3c729b9a 177 def _user_query(cls, priv_query_exec, obj, params):
811644b8
PP
178 raise ValueError
179
694c792b 180 with self.assertRaises(bt2._Error):
3c729b9a 181 bt2.QueryExecutor(MySink, 'obj', 23).query()
811644b8
PP
182
183 def test_query_wrong_return_type(self):
184 class MySink(bt2._UserSinkComponent):
6a91742b 185 def _user_consume(self):
a01b452b
SM
186 pass
187
811644b8 188 @classmethod
7c14d641 189 def _user_query(cls, priv_query_exec, obj, params, method_obj):
811644b8
PP
190 return ...
191
694c792b 192 with self.assertRaises(bt2._Error):
3c729b9a 193 bt2.QueryExecutor(MySink, 'obj', 23).query()
811644b8
PP
194
195 def test_query_params_none(self):
196 class MySink(bt2._UserSinkComponent):
6a91742b 197 def _user_consume(self):
a01b452b
SM
198 pass
199
811644b8 200 @classmethod
7c14d641 201 def _user_query(cls, priv_query_exec, obj, params, method_obj):
811644b8
PP
202 nonlocal query_params
203 query_params = params
204 return None
205
206 query_params = None
207 params = None
3c729b9a 208 res = bt2.QueryExecutor(MySink, 'obj', params).query()
811644b8
PP
209 self.assertEqual(query_params, params)
210 self.assertIsNone(res)
211 del query_params
212
761e1890
PP
213 def test_query_logging_level(self):
214 class MySink(bt2._UserSinkComponent):
6a91742b 215 def _user_consume(self):
a01b452b
SM
216 pass
217
761e1890 218 @classmethod
7c14d641 219 def _user_query(cls, priv_query_exec, obj, params, method_obj):
761e1890 220 nonlocal query_log_level
3c729b9a 221 query_log_level = priv_query_exec.logging_level
761e1890
PP
222
223 query_log_level = None
3c729b9a
PP
224 query_exec = bt2.QueryExecutor(MySink, 'obj', None)
225 query_exec.logging_level = bt2.LoggingLevel.WARNING
226 query_exec.query()
770538dd 227 self.assertEqual(query_log_level, bt2.LoggingLevel.WARNING)
761e1890
PP
228 del query_log_level
229
b5947615
SM
230 def test_query_returns_none(self):
231 class MySink(bt2._UserSinkComponent):
6a91742b 232 def _user_consume(self):
a01b452b
SM
233 pass
234
b5947615 235 @staticmethod
7c14d641 236 def _user_query(priv_query_exec, obj, params, method_obj):
b5947615
SM
237 return
238
3c729b9a 239 res = bt2.QueryExecutor(MySink, 'obj', None).query()
b5947615
SM
240 self.assertIsNone(res)
241
811644b8
PP
242 def test_query_simple(self):
243 class MySink(bt2._UserSinkComponent):
6a91742b 244 def _user_consume(self):
a01b452b
SM
245 pass
246
811644b8 247 @classmethod
7c14d641 248 def _user_query(cls, priv_query_exec, obj, params, method_obj):
811644b8
PP
249 nonlocal query_params
250 query_params = params
251 return 17.5
252
253 query_params = None
254 params = ['coucou', 23, None]
3c729b9a 255 res = bt2.QueryExecutor(MySink, 'obj', params).query()
811644b8
PP
256 self.assertEqual(query_params, params)
257 self.assertEqual(res, 17.5)
258 del query_params
259
260 def test_query_complex(self):
261 class MySink(bt2._UserSinkComponent):
6a91742b 262 def _user_consume(self):
a01b452b
SM
263 pass
264
811644b8 265 @classmethod
7c14d641 266 def _user_query(cls, priv_query_exec, obj, params, method_obj):
811644b8
PP
267 nonlocal query_params
268 query_params = params
cfbd7cf3 269 return {'null': None, 'bt2': 'BT2'}
811644b8
PP
270
271 query_params = None
272 params = {
273 'array': ['coucou', 23, None],
cfbd7cf3 274 'other_map': {'yes': 'yeah', '19': 19, 'minus 1.5': -1.5},
811644b8
PP
275 'null': None,
276 }
277
3c729b9a 278 res = bt2.QueryExecutor(MySink, 'obj', params).query()
811644b8 279 self.assertEqual(query_params, params)
cfbd7cf3 280 self.assertEqual(res, {'null': None, 'bt2': 'BT2'})
811644b8
PP
281 del query_params
282
283 def test_eq(self):
284 class MySink(bt2._UserSinkComponent):
6a91742b 285 def _user_consume(self):
a01b452b
SM
286 pass
287
811644b8
PP
288 self.assertEqual(MySink, MySink)
289
290
68e606ef 291class ComponentClassTestCase(unittest.TestCase):
811644b8
PP
292 def setUp(self):
293 class MySink(bt2._UserSinkComponent):
294 '''
295 The description.
296
297 The help.
298 '''
cfbd7cf3 299
6a91742b 300 def _user_consume(self):
a01b452b
SM
301 pass
302
811644b8 303 @classmethod
7c14d641 304 def _user_query(cls, priv_query_exec, obj, params, method_obj):
811644b8
PP
305 return [obj, params, 23]
306
307 self._py_comp_cls = MySink
308 graph = bt2.Graph()
894a8df5 309 comp = graph.add_component(MySink, 'salut')
e8ac1aae 310 self._comp_cls = comp.cls
242b863f 311 self.assertIs(type(self._comp_cls), bt2._SinkComponentClassConst)
811644b8
PP
312
313 def tearDown(self):
314 del self._py_comp_cls
315 del self._comp_cls
316
317 def test_description(self):
318 self.assertEqual(self._comp_cls.description, 'The description.')
319
320 def test_help(self):
321 self.assertEqual(self._comp_cls.help, 'The help.')
322
323 def test_name(self):
324 self.assertEqual(self._comp_cls.name, 'MySink')
325
326 def test_addr(self):
327 self.assertIsInstance(self._comp_cls.addr, int)
328 self.assertNotEqual(self._comp_cls.addr, 0)
329
330 def test_eq_invalid(self):
331 self.assertFalse(self._comp_cls == 23)
332
333 def test_eq(self):
334 self.assertEqual(self._comp_cls, self._comp_cls)
335 self.assertEqual(self._py_comp_cls, self._comp_cls)
336
337 def test_query(self):
3c729b9a 338 res = bt2.QueryExecutor(
cfbd7cf3 339 self._comp_cls, 'an object', {'yes': 'no', 'book': -17}
3c729b9a 340 ).query()
811644b8
PP
341 expected = ['an object', {'yes': 'no', 'book': -17}, 23]
342 self.assertEqual(res, expected)
d14ddbba
SM
343
344
345if __name__ == '__main__':
346 unittest.main()
This page took 0.064547 seconds and 4 git commands to generate.