--- /dev/null
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2020 EfficiOS Inc.
+#
+
+import bt2
+
+
+class TheSourceIterator(bt2._UserMessageIterator):
+ def __init__(self, config, port):
+ tc, sc, ec = port.user_data
+
+ trace = tc()
+
+ # Make two streams with the same name, to verify the stream filenames
+ # are de-duplicated properly. Make one with the name "metadata" to
+ # verify the resulting data file is not named "metadata".
+ stream1 = trace.create_stream(sc, name='the-stream')
+ stream2 = trace.create_stream(sc, name='the-stream')
+ stream3 = trace.create_stream(sc, name='metadata')
+
+ self._msgs = [
+ self._create_stream_beginning_message(stream1),
+ self._create_stream_beginning_message(stream2),
+ self._create_stream_beginning_message(stream3),
+ self._create_event_message(ec, stream1),
+ self._create_event_message(ec, stream2),
+ self._create_event_message(ec, stream3),
+ self._create_stream_end_message(stream1),
+ self._create_stream_end_message(stream2),
+ self._create_stream_end_message(stream3),
+ ]
+
+ def __next__(self):
+ if len(self._msgs) == 0:
+ raise StopIteration
+
+ return self._msgs.pop(0)
+
+
+@bt2.plugin_component_class
+class TheSource(bt2._UserSourceComponent, message_iterator_class=TheSourceIterator):
+ def __init__(self, config, params, obj):
+ tc = self._create_trace_class()
+ sc = tc.create_stream_class()
+ ec = sc.create_event_class(name='the-event')
+ self._add_output_port('out', user_data=(tc, sc, ec))
+
+
+bt2.register_plugin(__name__, "foo")