dir_sep='/'
fi
-expected_file=$(mktemp -t expected.XXXXXX)
-stderr_expected=/dev/null
+stdout_expected_file="${data_dir}/stdout.expect"
-cat > "$expected_file" <<END
-TestSourceABCDE: ABCDE
-TestSourceExt: ${trace_dir}${dir_sep}aaa1, ${trace_dir}${dir_sep}aaa2, ${trace_dir}${dir_sep}aaa3
-TestSourceExt: ${trace_dir}${dir_sep}bbb1, ${trace_dir}${dir_sep}bbb2
-TestSourceExt: ${trace_dir}${dir_sep}ccc1
-TestSourceExt: ${trace_dir}${dir_sep}ccc2
-TestSourceExt: ${trace_dir}${dir_sep}ccc3
-TestSourceExt: ${trace_dir}${dir_sep}ccc4
-TestSourceSomeDir: ${trace_dir}${dir_sep}some-dir
-END
-
-bt_diff_cli_sorted "$expected_file" "$stderr_expected" convert --plugin-path "${plugin_dir}" "ABCDE" "${trace_dir}" some_other_non_opt
+bt_diff_cli "$stdout_expected_file" "/dev/null" \
+ convert --plugin-path "${plugin_dir}" "ABCDE" "${trace_dir}" some_other_non_opt \
+ -c sink.text.details --params='with-metadata=false'
ok "$?" "sources are auto-discovered"
-
-rm -f "$expected_file"
import bt2
import os
+# Source component classes in this file recognize and group inputs in
+# various ways. One stream is created by each component, with a name
+# derived from the component class and the inputs. This is then checked
+# using the `sink.text.details` sink.
+
class TestIter(bt2._UserMessageIterator):
- pass
+ def __init__(self, output_port):
+ inputs = output_port.user_data['inputs']
+ sc = output_port.user_data['sc']
+ tc = sc.trace_class
+ t = tc()
+ s = t.create_stream(sc, name=self._make_stream_name(inputs))
+
+ self._msgs = [
+ self._create_stream_beginning_message(s),
+ self._create_stream_end_message(s),
+ ]
+
+ def _make_stream_name(self, inputs):
+ comp_cls_name = self._component.__class__.__name__
+ return (
+ comp_cls_name
+ + ': '
+ + ', '.join(sorted([os.path.basename(str(x)) for x in inputs]))
+ )
+
+ def __next__(self):
+ if len(self._msgs) == 0:
+ raise StopIteration
+
+ return self._msgs.pop(0)
class Base:
- @classmethod
- def _print_params(cls, params):
- inputs = sorted([str(x) for x in params['inputs']])
- print('{}: {}'.format(cls.__name__, ', '.join(inputs)))
+ def __init__(self, params):
+ tc = self._create_trace_class()
+ sc = tc.create_stream_class()
+
+ self._add_output_port('out', {'inputs': params['inputs'], 'sc': sc})
@bt2.plugin_component_class
"""
def __init__(self, params, obj):
- self._print_params(params)
+ super().__init__(params)
@staticmethod
def _user_query(priv_query_exec, obj, params, method_obj):
recurse in "some-dir"."""
def __init__(self, params, obj):
- self._print_params(params)
+ super().__init__(params)
@staticmethod
def _user_query(priv_query_exec, obj, params, method_obj):
"""A source that recognizes the arbitrary string input "ABCDE"."""
def __init__(self, params, obj):
- self._print_params(params)
+ super().__init__(params)
@staticmethod
def _user_query(priv_query_exec, obj, params, method_obj):
--- /dev/null
+{Trace 0, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceABCDE: ABCDE
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 1, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceExt: aaa1, aaa2, aaa3
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 2, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceExt: bbb1, bbb2
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 3, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceExt: ccc1
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 4, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceExt: ccc2
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 5, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceExt: ccc3
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 6, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceExt: ccc4
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 7, Stream class ID 0, Stream ID 0}
+Stream beginning:
+ Name: TestSourceSomeDir: some-dir
+ Trace:
+ Stream (ID 0, Class ID 0)
+
+{Trace 0, Stream class ID 0, Stream ID 0}
+Stream end
+
+{Trace 1, Stream class ID 0, Stream ID 0}
+Stream end
+
+{Trace 2, Stream class ID 0, Stream ID 0}
+Stream end
+
+{Trace 3, Stream class ID 0, Stream ID 0}
+Stream end
+
+{Trace 4, Stream class ID 0, Stream ID 0}
+Stream end
+
+{Trace 5, Stream class ID 0, Stream ID 0}
+Stream end
+
+{Trace 6, Stream class ID 0, Stream ID 0}
+Stream end
+
+{Trace 7, Stream class ID 0, Stream ID 0}
+Stream end