fprintf(fp, " current component to URL\n");
fprintf(fp, " -h --help Show this help and quit\n");
fprintf(fp, "\n");
- fprintf(fp, "Implicit `ctf.fs` source component options:\n");
+ fprintf(fp, "Implicit `source.ctf.fs` component options:\n");
fprintf(fp, "\n");
fprintf(fp, " --clock-offset=SEC Set clock offset to SEC seconds\n");
fprintf(fp, " --clock-offset-ns=NS Set clock offset to NS ns\n");
fprintf(fp, " --stream-intersection Only process events when all streams\n");
fprintf(fp, " are active\n");
fprintf(fp, "\n");
- fprintf(fp, "Implicit `text.text` sink component options:\n");
+ fprintf(fp, "Implicit `sink.text.pretty` component options:\n");
fprintf(fp, "\n");
fprintf(fp, " --clock-cycles Print timestamps in clock cycles\n");
fprintf(fp, " --clock-date Print timestamp dates\n");
fprintf(fp, " -w, --output=PATH Write output text to PATH instead of\n");
fprintf(fp, " the standard output\n");
fprintf(fp, "\n");
- fprintf(fp, "Implicit `utils.muxer` filter component options:\n");
+ fprintf(fp, "Implicit `filter.utils.muxer` component options:\n");
fprintf(fp, "\n");
fprintf(fp, " --clock-force-correlate Assume that clocks are inherently\n");
fprintf(fp, " correlated across traces\n");
fprintf(fp, "\n");
- fprintf(fp, "Implicit `utils.trimmer` filter component options:\n");
+ fprintf(fp, "Implicit `filter.utils.trimmer` component options:\n");
fprintf(fp, "\n");
fprintf(fp, " -b, --begin=BEGIN Set the beginning time of the conversion\n");
fprintf(fp, " time range to BEGIN (see the format of\n");
fprintf(fp, " BEGIN,END or [BEGIN,END] (literally `[` and\n");
fprintf(fp, " `]`) (see the format of BEGIN/END below)\n");
fprintf(fp, "\n");
- fprintf(fp, "Implicit `lttng-utils.debug-info` filter component options:\n");
+ fprintf(fp, "Implicit `filter.lttng-utils.debug-info` component options:\n");
fprintf(fp, "\n");
fprintf(fp, " --debug-info-dir=DIR Search for debug info in directory DIR\n");
fprintf(fp, " instead of `/usr/lib/debug`\n");
fprintf(fp, " `lttng-live`:\n");
fprintf(fp, " Create an implicit `source.ctf.lttng-live`\n");
fprintf(fp, " component\n");
- fprintf(fp, " -o, --output-format=(text | dummy | ctf-metadata)\n");
+ fprintf(fp, " -o, --output-format=(text | ctf | dummy | ctf-metadata)\n");
fprintf(fp, " `text`:\n");
fprintf(fp, " Create an implicit `sink.text.pretty`\n");
fprintf(fp, " component\n");
+ fprintf(fp, " `text`:\n");
+ fprintf(fp, " Create an implicit `sink.ctf.fs`\n");
+ fprintf(fp, " component\n");
fprintf(fp, " `dummy`:\n");
fprintf(fp, " Create an implicit `sink.utils.dummy`\n");
fprintf(fp, " component\n");
GString *comp_arg;
GString *name_arg;
GString *params_arg;
- struct bt_value *extra_args;
+ struct bt_value *extra_params;
};
static
}
}
- for (i = 0; i < bt_value_array_size(impl_args->extra_args); i++) {
+ for (i = 0; i < bt_value_array_size(impl_args->extra_params); i++) {
struct bt_value *elem;
const char *arg;
- elem = bt_value_array_get(impl_args->extra_args, i);
+ elem = bt_value_array_get(impl_args->extra_params, i);
if (!elem) {
goto error;
}
g_string_free(args->params_arg, TRUE);
}
- bt_put(args->extra_args);
+ bt_put(args->extra_params);
}
static
args->comp_arg = g_string_new(comp_arg);
args->name_arg = g_string_new(NULL);
args->params_arg = g_string_new(NULL);
- args->extra_args = bt_value_array_create();
+ args->extra_params = bt_value_array_create();
if (!args->comp_arg || !args->name_arg ||
- !args->params_arg || !args->extra_args) {
+ !args->params_arg || !args->extra_params) {
ret = -1;
destroy_implicit_component_args(args);
print_err_oom();
}
static
-int append_implicit_component_extra_arg(struct implicit_component_args *args,
+int append_implicit_component_extra_param(struct implicit_component_args *args,
const char *key, const char *value)
{
int ret = 0;
assert(key);
assert(value);
- if (bt_value_array_append_string(args->extra_args, "--key")) {
+ if (bt_value_array_append_string(args->extra_params, "--key")) {
print_err_oom();
ret = -1;
goto end;
}
- if (bt_value_array_append_string(args->extra_args, key)) {
+ if (bt_value_array_append_string(args->extra_params, key)) {
print_err_oom();
ret = -1;
goto end;
}
- if (bt_value_array_append_string(args->extra_args, "--value")) {
+ if (bt_value_array_append_string(args->extra_params, "--value")) {
print_err_oom();
ret = -1;
goto end;
}
- if (bt_value_array_append_string(args->extra_args, value)) {
+ if (bt_value_array_append_string(args->extra_params, value)) {
print_err_oom();
ret = -1;
goto end;
GList *source_names = NULL;
GList *filter_names = NULL;
GList *sink_names = NULL;
- struct implicit_component_args implicit_ctf_args = { 0 };
+ struct implicit_component_args implicit_ctf_input_args = { 0 };
+ struct implicit_component_args implicit_ctf_output_args = { 0 };
struct implicit_component_args implicit_lttng_live_args = { 0 };
struct implicit_component_args implicit_dummy_args = { 0 };
struct implicit_component_args implicit_text_args = { 0 };
char error_buf[256] = { 0 };
size_t i;
struct bt_common_lttng_live_url_parts lttng_live_url_parts = { 0 };
+ char *output = NULL;
*retcode = 0;
goto end;
}
- if (init_implicit_component_args(&implicit_ctf_args,
+ if (init_implicit_component_args(&implicit_ctf_input_args,
"source.ctf.fs", false)) {
goto error;
}
+ if (init_implicit_component_args(&implicit_ctf_output_args,
+ "sink.ctf.fs", false)) {
+ goto error;
+ }
+
if (init_implicit_component_args(&implicit_lttng_live_args,
"source.ctf.lttng-live", false)) {
goto error;
}
trimmer_has_begin = true;
- ret = append_implicit_component_extra_arg(
+ ret = append_implicit_component_extra_param(
&implicit_trimmer_args, "begin", arg);
implicit_trimmer_args.exists = true;
if (ret) {
}
trimmer_has_end = true;
- ret = append_implicit_component_extra_arg(
+ ret = append_implicit_component_extra_param(
&implicit_trimmer_args, "end", arg);
implicit_trimmer_args.exists = true;
if (ret) {
goto error;
}
- ret = append_implicit_component_extra_arg(
+ ret = append_implicit_component_extra_param(
&implicit_trimmer_args, "begin", begin);
- ret |= append_implicit_component_extra_arg(
+ ret |= append_implicit_component_extra_param(
&implicit_trimmer_args, "end", end);
implicit_trimmer_args.exists = true;
free(begin);
implicit_text_args.exists = true;
break;
case OPT_CLOCK_OFFSET:
- ret = append_implicit_component_extra_arg(
- &implicit_ctf_args, "clock-offset-cycles", arg);
- implicit_ctf_args.exists = true;
+ implicit_ctf_input_args.exists = true;
+ ret = append_implicit_component_extra_param(
+ &implicit_ctf_input_args, "clock-offset-cycles", arg);
if (ret) {
goto error;
}
break;
case OPT_CLOCK_OFFSET_NS:
- ret = append_implicit_component_extra_arg(
- &implicit_ctf_args, "clock-offset-ns", arg);
- implicit_ctf_args.exists = true;
+ implicit_ctf_input_args.exists = true;
+ ret = append_implicit_component_extra_param(
+ &implicit_ctf_input_args, "clock-offset-ns", arg);
if (ret) {
goto error;
}
implicit_text_args.exists = true;
break;
case OPT_COLOR:
- ret = append_implicit_component_extra_arg(
- &implicit_text_args, "color", arg);
implicit_text_args.exists = true;
+ ret = append_implicit_component_extra_param(
+ &implicit_text_args, "color", arg);
if (ret) {
goto error;
}
implicit_debug_info_args.exists = false;
break;
case OPT_DEBUG_INFO_DIR:
- ret = append_implicit_component_extra_arg(
+ implicit_debug_info_args.exists = true;
+ ret = append_implicit_component_extra_param(
&implicit_debug_info_args, "dir", arg);
if (ret) {
goto error;
}
break;
case OPT_DEBUG_INFO_FULL_PATH:
+ implicit_debug_info_args.exists = true;
append_implicit_component_param(
&implicit_debug_info_args, "full-path", "yes");
break;
case OPT_DEBUG_INFO_TARGET_PREFIX:
- ret = append_implicit_component_extra_arg(
+ implicit_debug_info_args.exists = true;
+ ret = append_implicit_component_extra_param(
&implicit_debug_info_args,
"target-prefix", arg);
if (ret) {
goto error;
}
+ implicit_text_args.exists = true;
ret = insert_flat_params_from_array(
implicit_text_args.params_arg,
fields, "field");
goto error;
}
+ implicit_text_args.exists = true;
ret = insert_flat_params_from_array(
implicit_text_args.params_arg,
names, "name");
got_input_format_opt = true;
if (strcmp(arg, "ctf") == 0) {
- implicit_ctf_args.exists = true;
+ implicit_ctf_input_args.exists = true;
} else if (strcmp(arg, "lttng-live") == 0) {
implicit_lttng_live_args.exists = true;
} else {
if (strcmp(arg, "text") == 0) {
implicit_text_args.exists = true;
+ } else if (strcmp(arg, "ctf") == 0) {
+ implicit_ctf_output_args.exists = true;
} else if (strcmp(arg, "dummy") == 0) {
implicit_dummy_args.exists = true;
} else if (strcmp(arg, "ctf-metadata") == 0) {
}
break;
case OPT_OUTPUT:
- ret = append_implicit_component_extra_arg(
- &implicit_text_args, "path", arg);
- implicit_text_args.exists = true;
- if (ret) {
+ if (output) {
+ printf_err("Duplicate --output option\n");
+ goto error;
+ }
+
+ output = strdup(arg);
+ if (!output) {
+ print_err_oom();
goto error;
}
break;
print_run_args_0 = true;
break;
case OPT_STREAM_INTERSECTION:
- append_implicit_component_param(&implicit_ctf_args,
+ append_implicit_component_param(&implicit_ctf_input_args,
"stream-intersection", "yes");
- implicit_ctf_args.exists = true;
+ implicit_ctf_input_args.exists = true;
break;
case OPT_VERBOSE:
if (got_verbose_opt) {
}
/*
- * If -o dummy was not specified, and if there are no explicit
- * sink components, then use an implicit `text.text` sink.
+ * If -o ctf was specified, make sure an output path (--output)
+ * was also specified. --output does not imply -o ctf because
+ * it's also used for the default, implicit -o text if -o ctf
+ * is not specified.
+ */
+ if (implicit_ctf_output_args.exists) {
+ if (!output) {
+ printf_err("--output-format=ctf specified without --output (trace output path)\n");
+ goto error;
+ }
+
+ /*
+ * At this point we know that -o ctf AND --output were
+ * specified. Make sure that no options were specified
+ * which would imply -o text because --output would be
+ * ambiguous in this case. For example, this is wrong:
+ *
+ * babeltrace --names=all -o ctf --output=/tmp/path my-trace
+ *
+ * because --names=all implies -o text, and --output
+ * could apply to both the sink.text.pretty and
+ * sink.ctf.fs implicit components.
+ */
+ if (implicit_text_args.exists) {
+ printf_err("Ambiguous --output option: --output-format=ctf specified but another option implies --output-format=text\n");
+ goto error;
+ }
+ }
+
+ /*
+ * If -o dummy and -o ctf were not specified, and if there are
+ * no explicit sink components, then use an implicit
+ * `sink.text.pretty` component.
*/
- if (!implicit_dummy_args.exists && !sink_names) {
+ if (!implicit_dummy_args.exists && !implicit_ctf_output_args.exists &&
+ !sink_names) {
implicit_text_args.exists = true;
}
+ /*
+ * Set implicit `sink.text.pretty` or `sink.ctf.fs` component's
+ * `path` parameter if --output was specified.
+ */
+ if (output) {
+ if (implicit_text_args.exists) {
+ append_implicit_component_extra_param(&implicit_text_args,
+ "path", output);
+ } else if (implicit_ctf_output_args.exists) {
+ append_implicit_component_extra_param(&implicit_ctf_output_args,
+ "path", output);
+ }
+ }
+
/* Decide where the leftover argument goes */
if (leftover) {
if (implicit_lttng_live_args.exists) {
goto end;
}
- ret = append_implicit_component_extra_arg(
+ ret = append_implicit_component_extra_param(
&implicit_lttng_live_args, "url", leftover);
if (ret) {
goto error;
}
} else {
- ret = append_implicit_component_extra_arg(
- &implicit_ctf_args, "path", leftover);
- implicit_ctf_args.exists = true;
+ ret = append_implicit_component_extra_param(
+ &implicit_ctf_input_args, "path", leftover);
+ implicit_ctf_input_args.exists = true;
if (ret) {
goto error;
}
* Ensure mutual exclusion between implicit `source.ctf.fs` and
* `source.ctf.lttng-live` components.
*/
- if (implicit_ctf_args.exists && implicit_lttng_live_args.exists) {
+ if (implicit_ctf_input_args.exists && implicit_lttng_live_args.exists) {
printf_err("Cannot create both implicit `%s` and `%s` components\n",
- implicit_ctf_args.comp_arg->str,
+ implicit_ctf_input_args.comp_arg->str,
implicit_lttng_live_args.comp_arg->str);
goto error;
}
* components exists, make sure there's a leftover (which is the
* path or URL).
*/
- if (implicit_ctf_args.exists && !leftover) {
+ if (implicit_ctf_input_args.exists && !leftover) {
printf_err("Missing path for implicit `%s` component\n",
- implicit_ctf_args.comp_arg->str);
+ implicit_ctf_input_args.comp_arg->str);
goto error;
}
}
/* Assign names to implicit components */
- ret = assign_name_to_implicit_component(&implicit_ctf_args,
- "ctf-fs", all_names, &source_names, true);
+ ret = assign_name_to_implicit_component(&implicit_ctf_input_args,
+ "source-ctf-fs", all_names, &source_names, true);
if (ret) {
goto error;
}
goto error;
}
+ ret = assign_name_to_implicit_component(&implicit_ctf_output_args,
+ "sink-ctf-fs", all_names, &sink_names, true);
+ if (ret) {
+ goto error;
+ }
+
ret = assign_name_to_implicit_component(&implicit_dummy_args,
"dummy", all_names, &sink_names, true);
if (ret) {
* Append the equivalent run arguments for the implicit
* components.
*/
- ret = append_run_args_for_implicit_component(&implicit_ctf_args,
+ ret = append_run_args_for_implicit_component(&implicit_ctf_input_args,
run_args);
if (ret) {
goto error;
goto error;
}
+ ret = append_run_args_for_implicit_component(&implicit_ctf_output_args,
+ run_args);
+ if (ret) {
+ goto error;
+ }
+
ret = append_run_args_for_implicit_component(&implicit_dummy_args,
run_args);
if (ret) {
}
free(arg);
+ free(output);
if (cur_name) {
g_string_free(cur_name, TRUE);
destroy_glist_of_gstring(source_names);
destroy_glist_of_gstring(filter_names);
destroy_glist_of_gstring(sink_names);
- destroy_implicit_component_args(&implicit_ctf_args);
+ destroy_implicit_component_args(&implicit_ctf_input_args);
+ destroy_implicit_component_args(&implicit_ctf_output_args);
destroy_implicit_component_args(&implicit_lttng_live_args);
destroy_implicit_component_args(&implicit_dummy_args);
destroy_implicit_component_args(&implicit_text_args);
pass "ARGS: $what"
else
fail "ARGS: $what"
+ diag "ARGS: $convert_args"
diag "EXPECTED: $expected_run_args"
diag "GOT: $run_args"
fi
echo "### $1 ###"
}
-plan_tests 74
+plan_tests 77
-test_bt_convert_run_args 'path leftover' '/path/to/trace' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + named user source with --params' '/path/to/trace --component ZZ:source.another.source --params salut=yes' '--component ZZ:source.another.source --params salut=yes --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ZZ:muxer --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + named user source with --name --params' '/path/to/trace --component source.another.source --name HELLO --params salut=yes' '--component source.another.source --name HELLO --params salut=yes --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect HELLO:muxer --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + user source with --path --params' '/path/to/trace --component source.another.source --path some-path --params salut=yes' "--component source.another.source --key path --value some-path --params salut=yes --name source.another.source --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect 'source\\.another\\.source:muxer' --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty"
+test_bt_convert_run_args 'path leftover' '/path/to/trace' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + named user source with --params' '/path/to/trace --component ZZ:source.another.source --params salut=yes' '--component ZZ:source.another.source --params salut=yes --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ZZ:muxer --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + named user source with --name --params' '/path/to/trace --component source.another.source --name HELLO --params salut=yes' '--component source.another.source --name HELLO --params salut=yes --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect HELLO:muxer --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + user source with --path --params' '/path/to/trace --component source.another.source --path some-path --params salut=yes' "--component source.another.source --key path --value some-path --params salut=yes --name source.another.source --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect 'source\\.another\\.source:muxer' --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty"
test_bt_convert_run_args 'user source with --url + -o dummy' '--component MY:source.my.source --url the-url -o dummy' '--component MY:source.my.source --key url --value the-url --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect MY:muxer --connect muxer:debug-info --connect debug-info:dummy'
-test_bt_convert_run_args 'path leftover + --omit-home-plugin-path' '/path/to/trace --omit-home-plugin-path' '--omit-home-plugin-path --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --omit-system-plugin-path' '/path/to/trace --omit-system-plugin-path' '--omit-system-plugin-path --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --plugin-path' '--plugin-path=PATH1:PATH2 /path/to/trace' '--plugin-path PATH1:PATH2 --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --omit-home-plugin-path' '/path/to/trace --omit-home-plugin-path' '--omit-home-plugin-path --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --omit-system-plugin-path' '/path/to/trace --omit-system-plugin-path' '--omit-system-plugin-path --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --plugin-path' '--plugin-path=PATH1:PATH2 /path/to/trace' '--plugin-path PATH1:PATH2 --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
test_bt_convert_run_args 'unnamed user source' '--component source.salut.com' "--component source.salut.com --name source.salut.com --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect 'source\.salut\.com:muxer' --connect muxer:debug-info --connect debug-info:pretty"
-test_bt_convert_run_args 'path leftover + user source named `ctf-fs`' '--component ctf-fs:source.salut.com /path/to/trace' "--component ctf-fs:source.salut.com --component source.ctf.fs --name ctf-fs-0 --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect ctf-fs-0:muxer --connect muxer:debug-info --connect debug-info:pretty"
-test_bt_convert_run_args 'path leftover + user sink named `pretty`' '--component pretty:sink.my.sink /path/to/trace' '--component pretty:sink.my.sink --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-seconds + user sink named `pretty`' '--clock-seconds --component pretty:sink.my.sink /path/to/trace' '--component pretty:sink.my.sink --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty-0 --params clock-seconds=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:pretty-0'
-test_bt_convert_run_args 'path leftover + user filter named `muxer`' '--component muxer:filter.salut.com /path/to/trace' '--component muxer:filter.salut.com --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer-0 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer-0 --connect muxer-0:debug-info --connect debug-info:muxer --connect muxer:pretty'
-test_bt_convert_run_args 'path leftover + --begin + user filter named `trimmer`' '/path/to/trace --component trimmer:filter.salut.com --begin=abc' '--component trimmer:filter.salut.com --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer-0 --key begin --value abc --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:debug-info --connect debug-info:trimmer --connect trimmer:pretty'
-test_bt_convert_run_args 'path leftover + --plugin-path' '/path/to/trace --plugin-path a:b:c' '--plugin-path a:b:c --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --omit-home-plugin-path --omit-system-plugin-path' '/path/to/trace --omit-home-plugin-path --omit-system-plugin-path' '--omit-home-plugin-path --omit-system-plugin-path --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --begin' '/path/to/trace --begin=123' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key begin --value 123 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --begin --end' '/path/to/trace --end=456 --begin 123' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key end --value 456 --key begin --value 123 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --timerange' '/path/to/trace --timerange=[abc,xyz]' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key begin --value abc --key end --value xyz --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-cycles' '/path/to/trace --clock-cycles' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-cycles=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-date' '/path/to/trace --clock-date' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-date=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-force-correlate' '/path/to/trace --clock-force-correlate' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --params assume-absolute-clock-classes=yes --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-gmt' '/path/to/trace --clock-gmt' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-gmt=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-offset' '/path/to/trace --clock-offset=15487' '--component source.ctf.fs --name ctf-fs --key clock-offset-cycles --value 15487 --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-offset-ns' '/path/to/trace --clock-offset-ns=326159487' '--component source.ctf.fs --name ctf-fs --key clock-offset-ns --value 326159487 --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-seconds' '/path/to/trace --clock-seconds' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-seconds=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --color' '/path/to/trace --color=never' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --key color --value never --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --no-debug-info' '/path/to/trace --no-debug-info' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect ctf-fs:muxer --connect muxer:pretty'
-test_bt_convert_run_args 'path leftover + --debug-info-dir' '/path/to/trace --debug-info-dir=/salut' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --key dir --value /salut --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --debug-info-target-prefix' '/path/to/trace --debug-info-target-prefix=/salut' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --key target-prefix --value /salut --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --debug-info-full-path' '/path/to/trace --debug-info-full-path' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --params full-path=yes --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --fields=trace:domain,loglevel' '--fields=trace:domain,loglevel /path/to/trace' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params field-trace:domain=yes,field-loglevel=yes,field-default=hide --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --fields=all' '--fields=all /path/to/trace' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params field-default=show --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --names=context,header' '--names=context,header /path/to/trace' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params name-context=yes,name-header=yes,name-default=hide --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --names=all' '--names=all /path/to/trace' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params name-default=show --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --no-delta' '/path/to/trace --no-delta' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params no-delta=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --output' '/path/to/trace --output /salut' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --key path --value /salut --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --stream-intersection' '/path/to/trace --stream-intersection' '--component source.ctf.fs --name ctf-fs --params stream-intersection=yes --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + -i ctf' '/path/to/trace -i ctf' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + user source named `source-ctf-fs`' '--component source-ctf-fs:source.salut.com /path/to/trace' "--component source-ctf-fs:source.salut.com --component source.ctf.fs --name source-ctf-fs-0 --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect source-ctf-fs-0:muxer --connect muxer:debug-info --connect debug-info:pretty"
+test_bt_convert_run_args 'path leftover + user sink named `pretty`' '--component pretty:sink.my.sink /path/to/trace' '--component pretty:sink.my.sink --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-seconds + user sink named `pretty`' '--clock-seconds --component pretty:sink.my.sink /path/to/trace' '--component pretty:sink.my.sink --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty-0 --params clock-seconds=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:pretty-0'
+test_bt_convert_run_args 'path leftover + user filter named `muxer`' '--component muxer:filter.salut.com /path/to/trace' '--component muxer:filter.salut.com --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer-0 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer-0 --connect muxer-0:debug-info --connect debug-info:muxer --connect muxer:pretty'
+test_bt_convert_run_args 'path leftover + --begin + user filter named `trimmer`' '/path/to/trace --component trimmer:filter.salut.com --begin=abc' '--component trimmer:filter.salut.com --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer-0 --key begin --value abc --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:debug-info --connect debug-info:trimmer --connect trimmer:pretty'
+test_bt_convert_run_args 'path leftover + --plugin-path' '/path/to/trace --plugin-path a:b:c' '--plugin-path a:b:c --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --omit-home-plugin-path --omit-system-plugin-path' '/path/to/trace --omit-home-plugin-path --omit-system-plugin-path' '--omit-home-plugin-path --omit-system-plugin-path --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --begin' '/path/to/trace --begin=123' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key begin --value 123 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --begin --end' '/path/to/trace --end=456 --begin 123' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key end --value 456 --key begin --value 123 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --timerange' '/path/to/trace --timerange=[abc,xyz]' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key begin --value abc --key end --value xyz --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-cycles' '/path/to/trace --clock-cycles' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-cycles=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-date' '/path/to/trace --clock-date' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-date=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-force-correlate' '/path/to/trace --clock-force-correlate' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --params assume-absolute-clock-classes=yes --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-gmt' '/path/to/trace --clock-gmt' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-gmt=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-offset' '/path/to/trace --clock-offset=15487' '--component source.ctf.fs --name source-ctf-fs --key clock-offset-cycles --value 15487 --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-offset-ns' '/path/to/trace --clock-offset-ns=326159487' '--component source.ctf.fs --name source-ctf-fs --key clock-offset-ns --value 326159487 --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --clock-seconds' '/path/to/trace --clock-seconds' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-seconds=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --color' '/path/to/trace --color=never' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --key color --value never --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --no-debug-info' '/path/to/trace --no-debug-info' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty'
+test_bt_convert_run_args 'path leftover + --debug-info-dir' '/path/to/trace --debug-info-dir=/salut' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --key dir --value /salut --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --debug-info-target-prefix' '/path/to/trace --debug-info-target-prefix=/salut' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --key target-prefix --value /salut --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --debug-info-full-path' '/path/to/trace --debug-info-full-path' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --params full-path=yes --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --fields=trace:domain,loglevel' '--fields=trace:domain,loglevel /path/to/trace' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params field-trace:domain=yes,field-loglevel=yes,field-default=hide --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --fields=all' '--fields=all /path/to/trace' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params field-default=show --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --names=context,header' '--names=context,header /path/to/trace' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params name-context=yes,name-header=yes,name-default=hide --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --names=all' '--names=all /path/to/trace' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params name-default=show --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --no-delta' '/path/to/trace --no-delta' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params no-delta=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --output' '/path/to/trace --output /salut' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --key path --value /salut --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + --stream-intersection' '/path/to/trace --stream-intersection' '--component source.ctf.fs --name source-ctf-fs --params stream-intersection=yes --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+test_bt_convert_run_args 'path leftover + -i ctf' '/path/to/trace -i ctf' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
test_bt_convert_run_args 'URL leftover + -i lttng-live' 'net://some-host/host/target/session -i lttng-live' '--component source.ctf.lttng-live --name lttng-live --key url --value net://some-host/host/target/session --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect lttng-live:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + user sink + -o text' '/path/to/trace --component=sink.abc.def -o text' "--component sink.abc.def --name sink.abc.def --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect 'debug-info:sink\.abc\.def' --connect debug-info:pretty"
-test_bt_convert_run_args 'path leftover + -o dummy' '/path/to/trace -o dummy' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:dummy'
-test_bt_convert_run_args 'path leftover + -o dummy + --clock-seconds' '/path/to/trace -o dummy --clock-seconds' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-seconds=yes --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:dummy'
+test_bt_convert_run_args 'path leftover + user sink + -o text' '/path/to/trace --component=sink.abc.def -o text' "--component sink.abc.def --name sink.abc.def --component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect 'debug-info:sink\.abc\.def' --connect debug-info:pretty"
+test_bt_convert_run_args 'path leftover + -o dummy' '/path/to/trace -o dummy' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:dummy'
+test_bt_convert_run_args 'path leftover + -o dummy + --clock-seconds' '/path/to/trace -o dummy --clock-seconds' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-seconds=yes --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:dummy'
+test_bt_convert_run_args 'path leftover + -o ctf + --output' '/path/to/trace -o ctf --output /output/trace' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.ctf.fs --name sink-ctf-fs --key path --value /output/trace --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:sink-ctf-fs'
test_bt_convert_fails 'bad --component format (plugin only)' '--component salut'
test_bt_convert_fails 'bad --component format (name and plugin only)' '--component name:salut'
test_bt_convert_fails 'duplicate -v' '/path/to/trace -vv'
test_bt_convert_fails 'two leftover arguments' '/path/to/trace /other/path'
test_bt_convert_fails '-o ctf-metadata without path' '-o ctf-metadata'
-test_bt_convert_fails '-i lttng-live and implicit ctf.fs source' '-i lttng-live net://some-host/host/target/session --clock-offset=23'
-test_bt_convert_fails 'implicit ctf.fs source without path' '--clock-offset=23'
-test_bt_convert_fails 'implicit ctf.lttng-live source without URL' '-i lttng-live'
+test_bt_convert_fails '-i lttng-live and implicit source.ctf.fs' '-i lttng-live net://some-host/host/target/session --clock-offset=23'
+test_bt_convert_fails 'implicit source.ctf.fs without path' '--clock-offset=23'
+test_bt_convert_fails 'implicit source.ctf.lttng-live without URL' '-i lttng-live'
test_bt_convert_fails 'no source' '-o text'
+test_bt_convert_fails '-o ctf without --output' 'my-trace -o ctf'
+test_bt_convert_fails '-o ctf + --output with implicit sink.text.pretty' 'my-trace -o ctf --output /output/path --no-delta'