OPT_INPUT_FORMAT,
OPT_LIST,
OPT_LOG_LEVEL,
- OPT_NAME,
OPT_NAMES,
OPT_NO_DELTA,
OPT_OMIT_HOME_PLUGIN_PATH,
fprintf(fp, " for all the following components until\n");
fprintf(fp, " --reset-base-params is encountered\n");
fprintf(fp, " (see the expected format of PARAMS below)\n");
- fprintf(fp, " -c, --component=[NAME:]TYPE.PLUGIN.CLS\n");
+ fprintf(fp, " -c, --component=NAME:TYPE.PLUGIN.CLS\n");
fprintf(fp, " Instantiate the component class CLS of type\n");
fprintf(fp, " TYPE (`source`, `filter`, or `sink`) found\n");
fprintf(fp, " in the plugin PLUGIN, add it to the graph,\n");
- fprintf(fp, " and optionally name it NAME (you can also\n");
- fprintf(fp, " specify the name with --name)\n");
+ fprintf(fp, " and name it NAME");
fprintf(fp, " -x, --connect=CONNECTION Connect two created components (see the\n");
fprintf(fp, " expected format of CONNECTION below)\n");
fprintf(fp, " -l, --log-level=LVL Set the log level of the current component to LVL\n");
fprintf(fp, " (`N`, `V`, `D`, `I`, `W`, `E`, or `F`)\n");
- fprintf(fp, " -n, --name=NAME Set the name of the current component\n");
- fprintf(fp, " to NAME (must be unique amongst all the\n");
- fprintf(fp, " names of the created components)\n");
fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n");
fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n");
fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n");
fprintf(fp, "\n");
fprintf(fp, "UPSTREAM and DOWNSTREAM are names of the upstream and downstream\n");
fprintf(fp, "components to connect together. You must escape the following characters\n\n");
- fprintf(fp, "with `\\`: `\\`, `.`, and `:`. You can set the name of the current\n");
- fprintf(fp, "component with the --name option.\n");
+ fprintf(fp, "with `\\`: `\\`, `.`, and `:`. You must set the name of the current\n");
+ fprintf(fp, "component using the NAME prefix of the --component option.\n");
fprintf(fp, "\n");
fprintf(fp, "UPSTREAM-PORT and DOWNSTREAM-PORT are optional globbing patterns to\n");
fprintf(fp, "identify the upstream and downstream ports to use for the connection.\n");
const bt_value *initial_plugin_paths, int default_log_level)
{
struct bt_config_component *cur_cfg_comp = NULL;
- enum bt_config_component_dest cur_cfg_comp_dest =
- BT_CONFIG_COMPONENT_DEST_UNKNOWN;
bt_value *cur_base_params = NULL;
int ret = 0;
struct bt_config *cfg = NULL;
{ OPT_CONNECT, 'x', "connect", true },
{ OPT_HELP, 'h', "help", false },
{ OPT_LOG_LEVEL, 'l', "log-level", true },
- { OPT_NAME, 'n', "name", true },
{ OPT_OMIT_HOME_PLUGIN_PATH, '\0', "omit-home-plugin-path", false },
{ OPT_OMIT_SYSTEM_PLUGIN_PATH, '\0', "omit-system-plugin-path", false },
{ OPT_PARAMS, 'p', "params", true },
break;
case OPT_COMPONENT:
{
- enum bt_config_component_dest new_dest;
-
- if (cur_cfg_comp) {
- ret = add_run_cfg_comp_check_name(cfg,
- cur_cfg_comp, cur_cfg_comp_dest,
- instance_names);
- BT_OBJECT_PUT_REF_AND_RESET(cur_cfg_comp);
- if (ret) {
- goto error;
- }
- }
+ enum bt_config_component_dest dest;
+ BT_OBJECT_PUT_REF_AND_RESET(cur_cfg_comp);
cur_cfg_comp = bt_config_component_from_arg(arg,
default_log_level);
if (!cur_cfg_comp) {
switch (cur_cfg_comp->type) {
case BT_COMPONENT_CLASS_TYPE_SOURCE:
- new_dest = BT_CONFIG_COMPONENT_DEST_SOURCE;
+ dest = BT_CONFIG_COMPONENT_DEST_SOURCE;
break;
case BT_COMPONENT_CLASS_TYPE_FILTER:
- new_dest = BT_CONFIG_COMPONENT_DEST_FILTER;
+ dest = BT_CONFIG_COMPONENT_DEST_FILTER;
break;
case BT_COMPONENT_CLASS_TYPE_SINK:
- new_dest = BT_CONFIG_COMPONENT_DEST_SINK;
+ dest = BT_CONFIG_COMPONENT_DEST_SINK;
break;
default:
abort();
goto error;
}
- cur_cfg_comp_dest = new_dest;
+ ret = add_run_cfg_comp_check_name(cfg,
+ cur_cfg_comp, dest,
+ instance_names);
+ if (ret) {
+ goto error;
+ }
+
break;
}
case OPT_PARAMS:
BT_OBJECT_MOVE_REF(cur_cfg_comp->params, params_to_set);
break;
}
- case OPT_NAME:
- if (!cur_cfg_comp) {
- BT_CLI_LOGE_APPEND_CAUSE("Cannot set the name of unavailable component:\n %s",
- arg);
- goto error;
- }
-
- g_string_assign(cur_cfg_comp->instance_name, arg);
- break;
case OPT_LOG_LEVEL:
if (!cur_cfg_comp) {
BT_CLI_LOGE_APPEND_CAUSE("Cannot set the log level of unavailable component:\n %s",
}
}
- /* Add current component */
- if (cur_cfg_comp) {
- ret = add_run_cfg_comp_check_name(cfg, cur_cfg_comp,
- cur_cfg_comp_dest, instance_names);
- BT_OBJECT_PUT_REF_AND_RESET(cur_cfg_comp);
- if (ret) {
- goto error;
- }
- }
+ BT_OBJECT_PUT_REF_AND_RESET(cur_cfg_comp);
if (cfg->cmd_data.run.sources->len == 0) {
BT_CLI_LOGE_APPEND_CAUSE("Incomplete graph: no source component.");
fprintf(fp, " TYPE (`source`, `filter`, or `sink`) found\n");
fprintf(fp, " in the plugin PLUGIN, add it to the\n");
fprintf(fp, " conversion graph, and optionally name it\n");
- fprintf(fp, " NAME (you can also specify the name with\n");
- fprintf(fp, " --name)\n");
+ fprintf(fp, " NAME\n");
fprintf(fp, " -l, --log-level=LVL Set the log level of the current component to LVL\n");
fprintf(fp, " (`N`, `V`, `D`, `I`, `W`, `E`, or `F`)\n");
- fprintf(fp, " --name=NAME Set the name of the current component\n");
- fprintf(fp, " to NAME (must be unique amongst all the\n");
- fprintf(fp, " names of the created components)\n");
fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n");
fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n");
fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n");
{ OPT_HELP, 'h', "help", false },
{ OPT_INPUT_FORMAT, 'i', "input-format", true },
{ OPT_LOG_LEVEL, 'l', "log-level", true },
- { OPT_NAME, '\0', "name", true },
{ OPT_NAMES, 'n', "names", true },
{ OPT_DEBUG_INFO, '\0', "debug-info", false },
{ OPT_NO_DELTA, '\0', "no-delta", false },
{
int ret = 0;
size_t i;
+ GString *component_arg_for_run = NULL;
if (!impl_args->exists) {
goto end;
}
- if (bt_value_array_append_string_element(run_args, "--component")) {
+ component_arg_for_run = g_string_new(NULL);
+ if (!component_arg_for_run) {
BT_CLI_LOGE_APPEND_CAUSE_OOM();
goto error;
}
- if (bt_value_array_append_string_element(run_args, impl_args->comp_arg->str)) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
+ /* Build the full `name:type.plugin.cls`. */
+ BT_ASSERT(!strchr(impl_args->name_arg->str, '\\'));
+ BT_ASSERT(!strchr(impl_args->name_arg->str, ':'));
+ g_string_printf(component_arg_for_run, "%s:%s",
+ impl_args->name_arg->str, impl_args->comp_arg->str);
- if (bt_value_array_append_string_element(run_args, "--name")) {
+ if (bt_value_array_append_string_element(run_args, "--component")) {
BT_CLI_LOGE_APPEND_CAUSE_OOM();
goto error;
}
- if (bt_value_array_append_string_element(run_args, impl_args->name_arg->str)) {
+ if (bt_value_array_append_string_element(run_args,
+ component_arg_for_run->str)) {
BT_CLI_LOGE_APPEND_CAUSE_OOM();
goto error;
}
ret = -1;
end:
+ if (component_arg_for_run) {
+ g_string_free(component_arg_for_run, TRUE);
+ }
+
return ret;
}
return append_string_parameter_to_args(args->extra_params, key, value);
}
-static
-int convert_append_name_param(enum bt_config_component_dest dest,
- GString *cur_name, GString *cur_name_prefix,
- bt_value *run_args,
- bt_value *all_names,
- GList **source_names, GList **filter_names,
- GList **sink_names)
-{
- int ret = 0;
-
- if (cur_name_prefix->len > 0) {
- /* We're after a --component option */
- GString *name = NULL;
- bool append_name_opt = false;
-
- if (cur_name->len == 0) {
- /*
- * No explicit name was provided for the user
- * component.
- */
- name = get_component_auto_name(cur_name_prefix->str,
- all_names);
- append_name_opt = true;
- } else {
- /*
- * An explicit name was provided for the user
- * component.
- */
- if (bt_value_map_has_entry(all_names,
- cur_name->str)) {
- BT_CLI_LOGE_APPEND_CAUSE("Duplicate component instance name:\n %s",
- cur_name->str);
- goto error;
- }
-
- name = g_string_new(cur_name->str);
- }
-
- if (!name) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
-
- /*
- * Remember this name globally, for the uniqueness of
- * all component names.
- */
- if (bt_value_map_insert_entry(all_names, name->str, bt_value_null)) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
-
- /*
- * Append the --name option if necessary.
- */
- if (append_name_opt) {
- if (bt_value_array_append_string_element(run_args, "--name")) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
-
- if (bt_value_array_append_string_element(run_args, name->str)) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
- }
-
- /*
- * Remember this name specifically for the type of the
- * component. This is to create connection arguments.
- */
- switch (dest) {
- case BT_CONFIG_COMPONENT_DEST_SOURCE:
- *source_names = g_list_append(*source_names, name);
- break;
- case BT_CONFIG_COMPONENT_DEST_FILTER:
- *filter_names = g_list_append(*filter_names, name);
- break;
- case BT_CONFIG_COMPONENT_DEST_SINK:
- *sink_names = g_list_append(*sink_names, name);
- break;
- default:
- abort();
- }
-
- g_string_assign(cur_name_prefix, "");
- }
-
- goto end;
-
-error:
- ret = -1;
-
-end:
- return ret;
-}
-
/*
* Escapes `.`, `:`, and `\` of `input` with `\`.
*/
}
}
+/*
+ * As we iterate the arguments to the convert command, this tracks what is the
+ * type of the current item, to which some contextual options (e.g. --params)
+ * apply to.
+ */
+enum convert_current_item_type {
+ /* There is no current item. */
+ CONVERT_CURRENT_ITEM_TYPE_NONE,
+
+ /* Current item is a component. */
+ CONVERT_CURRENT_ITEM_TYPE_COMPONENT,
+};
+
/*
* Creates a Babeltrace config object from the arguments of a convert
* command.
bool force_omit_home_plugin_path,
const bt_value *initial_plugin_paths, int *default_log_level)
{
- enum bt_config_component_dest cur_comp_dest =
- BT_CONFIG_COMPONENT_DEST_UNKNOWN;
+ enum convert_current_item_type current_item_type =
+ CONVERT_CURRENT_ITEM_TYPE_NONE;
int ret = 0;
struct bt_config *cfg = NULL;
bool got_input_format_opt = false;
bool trimmer_has_begin = false;
bool trimmer_has_end = false;
bool stream_intersection_mode = false;
- GString *cur_name = NULL;
- GString *cur_name_prefix = NULL;
bool print_run_args = false;
bool print_run_args_0 = false;
bool print_ctf_metadata = false;
struct auto_source_discovery auto_disc = { NULL };
GString *auto_disc_comp_name = NULL;
struct bt_argpar_parse_ret argpar_parse_ret = { 0 };
+ GString *name_gstr = NULL;
+ GString *component_arg_for_run = NULL;
/*
* Array of `struct implicit_component_args *` created for the sources
goto error;
}
- cur_name = g_string_new(NULL);
- if (!cur_name) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
-
- cur_name_prefix = g_string_new(NULL);
- if (!cur_name_prefix) {
+ component_arg_for_run = g_string_new(NULL);
+ if (!component_arg_for_run) {
BT_CLI_LOGE_APPEND_CAUSE_OOM();
goto error;
}
case OPT_COMPONENT:
{
bt_component_class_type type;
- const char *type_prefix;
- /* Append current component's name if needed */
- ret = convert_append_name_param(cur_comp_dest, cur_name,
- cur_name_prefix, run_args, all_names,
- &source_names, &filter_names, &sink_names);
- if (ret) {
- goto error;
- }
+ current_item_type = CONVERT_CURRENT_ITEM_TYPE_COMPONENT;
/* Parse the argument */
plugin_comp_cls_names(arg, &name, &plugin_name,
}
if (name) {
- g_string_assign(cur_name, name);
+ /*
+ * Name was given by the user, verify it isn't
+ * taken.
+ */
+ if (bt_value_map_has_entry(all_names, name)) {
+ BT_CLI_LOGE_APPEND_CAUSE(
+ "Duplicate component instance name:\n %s",
+ name);
+ goto error;
+ }
+
+ name_gstr = g_string_new(name);
+ if (!name_gstr) {
+ BT_CLI_LOGE_APPEND_CAUSE_OOM();
+ goto error;
+ }
+
+ g_string_assign(component_arg_for_run, arg);
} else {
- g_string_assign(cur_name, "");
- }
+ /* Name not given by user, generate one. */
+ name_gstr = get_component_auto_name(arg, all_names);
+ if (!name_gstr) {
+ goto error;
+ }
- switch (type) {
- case BT_COMPONENT_CLASS_TYPE_SOURCE:
- cur_comp_dest = BT_CONFIG_COMPONENT_DEST_SOURCE;
- type_prefix = "source";
- break;
- case BT_COMPONENT_CLASS_TYPE_FILTER:
- cur_comp_dest = BT_CONFIG_COMPONENT_DEST_FILTER;
- type_prefix = "filter";
- break;
- case BT_COMPONENT_CLASS_TYPE_SINK:
- cur_comp_dest = BT_CONFIG_COMPONENT_DEST_SINK;
- type_prefix = "sink";
- break;
- default:
- abort();
+ g_string_printf(component_arg_for_run, "%s:%s",
+ name_gstr->str, arg);
}
if (bt_value_array_append_string_element(run_args,
goto error;
}
- if (bt_value_array_append_string_element(run_args, arg)) {
+ if (bt_value_array_append_string_element(run_args,
+ component_arg_for_run->str)) {
+ BT_CLI_LOGE_APPEND_CAUSE_OOM();
+ goto error;
+ }
+
+ /*
+ * Remember this name globally, for the uniqueness of
+ * all component names.
+ */
+ if (bt_value_map_insert_entry(all_names,
+ name_gstr->str, bt_value_null)) {
BT_CLI_LOGE_APPEND_CAUSE_OOM();
goto error;
}
- g_string_assign(cur_name_prefix, "");
- g_string_append_printf(cur_name_prefix, "%s.%s.%s",
- type_prefix, plugin_name, comp_cls_name);
+ /*
+ * Remember this name specifically for the type of the
+ * component. This is to create connection arguments.
+ *
+ * The list takes ownership of `name_gstr`.
+ */
+ switch (type) {
+ case BT_COMPONENT_CLASS_TYPE_SOURCE:
+ source_names = g_list_append(source_names, name_gstr);
+ break;
+ case BT_COMPONENT_CLASS_TYPE_FILTER:
+ filter_names = g_list_append(filter_names, name_gstr);
+ break;
+ case BT_COMPONENT_CLASS_TYPE_SINK:
+ sink_names = g_list_append(sink_names, name_gstr);
+ break;
+ default:
+ abort();
+ }
+ name_gstr = NULL;
+
free(name);
free(plugin_name);
free(comp_cls_name);
break;
}
case OPT_PARAMS:
- if (cur_name_prefix->len == 0) {
+ if (current_item_type != CONVERT_CURRENT_ITEM_TYPE_COMPONENT) {
BT_CLI_LOGE_APPEND_CAUSE("No current component of which to set parameters:\n %s",
arg);
goto error;
goto error;
}
break;
- case OPT_NAME:
- if (cur_name_prefix->len == 0) {
- BT_CLI_LOGE_APPEND_CAUSE("No current component to name:\n %s",
- arg);
- goto error;
- }
-
- if (bt_value_array_append_string_element(run_args, "--name")) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
-
- if (bt_value_array_append_string_element(run_args, arg)) {
- BT_CLI_LOGE_APPEND_CAUSE_OOM();
- goto error;
- }
-
- g_string_assign(cur_name, arg);
- break;
case OPT_LOG_LEVEL:
- if (cur_name_prefix->len == 0) {
+ if (current_item_type != CONVERT_CURRENT_ITEM_TYPE_COMPONENT) {
BT_CLI_LOGE_APPEND_CAUSE("No current component to assign a log level to:\n %s",
arg);
goto error;
}
}
- /* Append current component's name if needed */
- ret = convert_append_name_param(cur_comp_dest, cur_name,
- cur_name_prefix, run_args, all_names, &source_names,
- &filter_names, &sink_names);
- if (ret) {
- goto error;
- }
-
/*
* Second pass: transform the convert-specific options and
* arguments into implicit component instances for the run
free(output);
- if (cur_name) {
- g_string_free(cur_name, TRUE);
+ if (component_arg_for_run) {
+ g_string_free(component_arg_for_run, TRUE);
}
- if (cur_name_prefix) {
- g_string_free(cur_name_prefix, TRUE);
+ if (name_gstr) {
+ g_string_free(name_gstr, TRUE);
}
bt_value_put_ref(run_args);
output_path=$(cygpath -m "$output_path")
fi
-plan_tests 73
-
-test_bt_convert_run_args 'path leftover' "$path_to_trace" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftovers' "$path_to_trace $path_to_trace2" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\", \"${path_to_trace2}\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect ZZ:muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect HELLO:muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 --connect 'source\.salut\.com:muxer' --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + user source named `auto-disc-source-ctf-fs`' "--component auto-disc-source-ctf-fs:source.salut.com $path_to_trace" "--component auto-disc-source-ctf-fs:source.salut.com --component source.ctf.fs --name auto-disc-source-ctf-fs-0 --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect auto-disc-source-ctf-fs-0:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty-0 --params clock-seconds=yes --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer-0 --connect auto-disc-source-ctf-fs:muxer-0 --connect muxer-0: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer-0 --params 'begin=\"abc\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --begin' "$path_to_trace --begin=123" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --params 'begin=\"123\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty"
-test_bt_convert_run_args 'path leftover + --begin --end' "$path_to_trace --end=456 --begin 123" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --params 'end=\"456\"' --params 'begin=\"123\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty"
-test_bt_convert_run_args 'path leftover + --timerange' "$path_to_trace --timerange=[abc,xyz]" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --params 'begin=\"abc\"' --params 'end=\"xyz\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty"
-test_bt_convert_run_args 'path leftover + --clock-cycles' "$path_to_trace --clock-cycles" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params clock-cycles=yes --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --clock-date' "$path_to_trace --clock-date" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params clock-date=yes --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --clock-force-correlate' "$path_to_trace --clock-force-correlate" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --params assume-absolute-clock-classes=yes --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --clock-gmt' "$path_to_trace --clock-gmt" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params clock-gmt=yes --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --clock-offset' "$path_to_trace --clock-offset=15487" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params clock-class-offset-s=15487 --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --clock-offset-ns' "$path_to_trace --clock-offset-ns=326159487" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params clock-class-offset-ns=326159487 --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --clock-seconds' "$path_to_trace --clock-seconds" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params clock-seconds=yes --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --color' "$path_to_trace --color=never" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params 'color=\"never\"' --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --debug-info' "$path_to_trace --debug-info" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$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 auto-disc-source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty"
-test_bt_convert_run_args 'path leftover + --debug-info-dir' "$path_to_trace --debug-info-dir=${output_path}" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$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 'debug-info-dir=\"${output_path}\"' --connect auto-disc-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=${output_path}" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$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 'target-prefix=\"${output_path}\"' --connect auto-disc-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 auto-disc-source-ctf-fs --params 'inputs=[\"$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 auto-disc-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 auto-disc-source-ctf-fs --params 'inputs=[\"$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 --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --fields=all' "--fields=all $path_to_trace" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params field-default=show --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --names=context,header' "--names=context,header $path_to_trace" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$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 --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --names=all' "--names=all $path_to_trace" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params name-default=show --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --no-delta' "$path_to_trace --no-delta" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params no-delta=yes --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + --output' "$path_to_trace --output $output_path" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --params 'path=\"$output_path\"' --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + -i ctf' "$path_to_trace -i ctf" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 --params 'url=\"net://some-host/host/target/session\"' --params 'session-not-found-action=\"end\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect lttng-live:muxer --connect muxer: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 auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect 'muxer:sink\.abc\.def' --connect muxer:pretty"
-test_bt_convert_run_args 'path leftover + -o dummy' "$path_to_trace -o dummy" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:dummy"
-test_bt_convert_run_args 'path leftover + -o dummy + --clock-seconds' "$path_to_trace -o dummy --clock-seconds" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$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 --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty --connect muxer:dummy"
-test_bt_convert_run_args 'path leftover + -o ctf + --output' "$path_to_trace -o ctf --output $output_path" "--component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component sink.ctf.fs --name sink-ctf-fs --params 'path=\"$output_path\"' --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:sink-ctf-fs"
-test_bt_convert_run_args 'path leftover + user sink with log level' "$path_to_trace -c sink.mein.sink -lW" "--component sink.mein.sink --log-level W --name sink.mein.sink --component source.ctf.fs --name auto-disc-source-ctf-fs --params 'inputs=[\"$path_to_trace\"]' --component filter.utils.muxer --name muxer --connect auto-disc-source-ctf-fs:muxer --connect 'muxer:sink\.mein\.sink'"
+plan_tests 71
+
+test_bt_convert_run_args 'path leftover' "$path_to_trace" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftovers' "$path_to_trace $path_to_trace2" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\", \"${path_to_trace2}\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect ZZ:muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --omit-home-plugin-path' "$path_to_trace --omit-home-plugin-path" "--omit-home-plugin-path --component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --omit-system-plugin-path' "$path_to_trace --omit-system-plugin-path" "--omit-system-plugin-path --component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --plugin-path' "--plugin-path=PATH1:PATH2 $path_to_trace" "--plugin-path PATH1:PATH2 --component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'unnamed user source' '--component source.salut.com' "--component source.salut.com:source.salut.com --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect 'source\.salut\.com:muxer' --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + user source named `auto-disc-source-ctf-fs`' "--component auto-disc-source-ctf-fs:source.salut.com $path_to_trace" "--component auto-disc-source-ctf-fs:source.salut.com --component auto-disc-source-ctf-fs-0:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect auto-disc-source-ctf-fs-0:muxer --connect muxer: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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty-0:sink.text.pretty --params clock-seconds=yes --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty --connect muxer: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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer-0:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer-0 --connect muxer-0: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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component trimmer-0:filter.utils.trimmer --params 'begin=\"abc\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0: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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer: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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --begin' "$path_to_trace --begin=123" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component trimmer:filter.utils.trimmer --params 'begin=\"123\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty"
+test_bt_convert_run_args 'path leftover + --begin --end' "$path_to_trace --end=456 --begin 123" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component trimmer:filter.utils.trimmer --params 'end=\"456\"' --params 'begin=\"123\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty"
+test_bt_convert_run_args 'path leftover + --timerange' "$path_to_trace --timerange=[abc,xyz]" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component trimmer:filter.utils.trimmer --params 'begin=\"abc\"' --params 'end=\"xyz\"' --connect auto-disc-source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty"
+test_bt_convert_run_args 'path leftover + --clock-cycles' "$path_to_trace --clock-cycles" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params clock-cycles=yes --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --clock-date' "$path_to_trace --clock-date" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params clock-date=yes --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --clock-force-correlate' "$path_to_trace --clock-force-correlate" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --params assume-absolute-clock-classes=yes --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --clock-gmt' "$path_to_trace --clock-gmt" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params clock-gmt=yes --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --clock-offset' "$path_to_trace --clock-offset=15487" "--component auto-disc-source-ctf-fs:source.ctf.fs --params clock-class-offset-s=15487 --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --clock-offset-ns' "$path_to_trace --clock-offset-ns=326159487" "--component auto-disc-source-ctf-fs:source.ctf.fs --params clock-class-offset-ns=326159487 --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --clock-seconds' "$path_to_trace --clock-seconds" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params clock-seconds=yes --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --color' "$path_to_trace --color=never" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params 'color=\"never\"' --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --debug-info' "$path_to_trace --debug-info" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component debug-info:filter.lttng-utils.debug-info --connect auto-disc-source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty"
+test_bt_convert_run_args 'path leftover + --debug-info-dir' "$path_to_trace --debug-info-dir=${output_path}" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component debug-info:filter.lttng-utils.debug-info --params 'debug-info-dir=\"${output_path}\"' --connect auto-disc-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=${output_path}" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component debug-info:filter.lttng-utils.debug-info --params 'target-prefix=\"${output_path}\"' --connect auto-disc-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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --component debug-info:filter.lttng-utils.debug-info --params full-path=yes --connect auto-disc-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 auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params field-trace:domain=yes,field-loglevel=yes,field-default=hide --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --fields=all' "--fields=all $path_to_trace" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params field-default=show --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --names=context,header' "--names=context,header $path_to_trace" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params name-context=yes,name-header=yes,name-default=hide --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --names=all' "--names=all $path_to_trace" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params name-default=show --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --no-delta' "$path_to_trace --no-delta" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params no-delta=yes --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + --output' "$path_to_trace --output $output_path" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params 'path=\"$output_path\"' --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + -i ctf' "$path_to_trace -i ctf" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty"
+test_bt_convert_run_args 'URL leftover + -i lttng-live' 'net://some-host/host/target/session -i lttng-live' "--component lttng-live:source.ctf.lttng-live --params 'url=\"net://some-host/host/target/session\"' --params 'session-not-found-action=\"end\"' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect lttng-live:muxer --connect muxer: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:sink.abc.def --component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect 'muxer:sink\.abc\.def' --connect muxer:pretty"
+test_bt_convert_run_args 'path leftover + -o dummy' "$path_to_trace -o dummy" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component dummy:sink.utils.dummy --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:dummy"
+test_bt_convert_run_args 'path leftover + -o dummy + --clock-seconds' "$path_to_trace -o dummy --clock-seconds" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component pretty:sink.text.pretty --params clock-seconds=yes --component dummy:sink.utils.dummy --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:pretty --connect muxer:dummy"
+test_bt_convert_run_args 'path leftover + -o ctf + --output' "$path_to_trace -o ctf --output $output_path" "--component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component sink-ctf-fs:sink.ctf.fs --params 'path=\"$output_path\"' --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect muxer:sink-ctf-fs"
+test_bt_convert_run_args 'path leftover + user sink with log level' "$path_to_trace -c sink.mein.sink -lW" "--component sink.mein.sink:sink.mein.sink --log-level W --component auto-disc-source-ctf-fs:source.ctf.fs --params 'inputs=[\"$path_to_trace\"]' --component muxer:filter.utils.muxer --connect auto-disc-source-ctf-fs:muxer --connect 'muxer:sink\.mein\.sink'"
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 component name' '--component hello:sink.a.b --component hello:source.c.d'
test_bt_convert_fails 'unknown option' '--component hello:sink.a.b --salut'
test_bt_convert_fails '--params without current component' '--params lol=23'
-test_bt_convert_fails '--nane without current component' '--name chapeau'
test_bt_convert_fails 'duplicate --begin' '--begin abc --clock-seconds --begin cde'
test_bt_convert_fails 'duplicate --end' '--begin abc --end xyz --clock-seconds --end cde'
test_bt_convert_fails '--begin and --timerange' '--begin abc --clock-seconds --timerange abc,def'