GString *path = NULL;
const char *trace_name;
- if (trace->fs_sink->assume_single_trace) {
- /* Use output directory directly */
- path = g_string_new("");
- goto end;
- }
+ BT_ASSERT(!trace->fs_sink->assume_single_trace);
/* First, try to build a path using environment fields written by LTTng. */
path = make_lttng_trace_path_rel(trace);
GString *full_path = NULL;
GString *unique_full_path = NULL;
- rel_path = make_trace_path_rel(trace);
- if (!rel_path) {
- goto end;
- }
+ if (trace->fs_sink->assume_single_trace) {
+ /* Use output directory directly */
+ unique_full_path = g_string_new(output_base_directory);
+ if (!unique_full_path) {
+ goto end;
+ }
+ } else {
+ rel_path = make_trace_path_rel(trace);
+ if (!rel_path) {
+ goto end;
+ }
- rel_path_san = sanitize_trace_path(rel_path->str);
- if (!rel_path_san) {
- goto end;
- }
+ rel_path_san = sanitize_trace_path(rel_path->str);
+ if (!rel_path_san) {
+ goto end;
+ }
- full_path = g_string_new(NULL);
- if (!full_path) {
- goto end;
- }
+ full_path = g_string_new(NULL);
+ if (!full_path) {
+ goto end;
+ }
- g_string_printf(full_path, "%s" G_DIR_SEPARATOR_S "%s",
- output_base_directory, rel_path_san->str);
+ g_string_printf(full_path, "%s" G_DIR_SEPARATOR_S "%s",
+ output_base_directory, rel_path_san->str);
- unique_full_path = make_unique_trace_path(full_path->str);
+ unique_full_path = make_unique_trace_path(full_path->str);
+ }
end:
if (rel_path) {
TESTS_PLUGINS += plugins/src.ctf.fs/query/test_query_support_info
TESTS_PLUGINS += plugins/src.ctf.fs/query/test_query_trace_info
TESTS_PLUGINS += plugins/src.ctf.fs/query/test_query_metadata_info
+TESTS_PLUGINS += plugins/sink.ctf.fs/test_assume_single_trace
endif
endif
--- /dev/null
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2020 EfficiOS Inc.
+#
+
+import bt2
+
+
+class TheSourceIterator(bt2._UserMessageIterator):
+ def __init__(self, config, port):
+ tc, sc, ec = port.user_data
+
+ trace = tc()
+ stream = trace.create_stream(sc, name='the-stream')
+
+ self._msgs = [
+ self._create_stream_beginning_message(stream),
+ self._create_event_message(ec, stream),
+ self._create_stream_end_message(stream),
+ ]
+
+ def __next__(self):
+ if len(self._msgs) == 0:
+ raise StopIteration
+
+ return self._msgs.pop(0)
+
+
+@bt2.plugin_component_class
+class TheSource(bt2._UserSourceComponent, message_iterator_class=TheSourceIterator):
+ def __init__(self, config, params, obj):
+ tc = self._create_trace_class()
+ sc = tc.create_stream_class()
+ ec = sc.create_event_class(name='the-event')
+ self._add_output_port('out', user_data=(tc, sc, ec))
+
+
+bt2.register_plugin(__name__, "foo")
# SPDX-License-Identifier: MIT
SUBDIRS = succeed
+
+dist_check_SCRIPTS = \
+ test_assume_single_trace
--- /dev/null
+#!/bin/bash
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (C) 2020 EfficiOS Inc.
+#
+
+# This file tests the assume-single-trace parameter of sink.ctf.fs.
+
+SH_TAP=1
+
+if [ "x${BT_TESTS_SRCDIR:-}" != "x" ]; then
+ UTILSSH="$BT_TESTS_SRCDIR/utils/utils.sh"
+else
+ UTILSSH="$(dirname "$0")/../../utils/utils.sh"
+fi
+
+# shellcheck source=../../utils/utils.sh
+source "$UTILSSH"
+
+# Directory containing the Python test source.
+data_dir="$BT_TESTS_DATADIR/plugins/sink.ctf.fs/assume-single-trace"
+
+temp_stdout=$(mktemp)
+temp_expected_stdout=$(mktemp)
+temp_stderr=$(mktemp)
+temp_output_dir=$(mktemp -d)
+
+trace_dir="$temp_output_dir/the-trace"
+
+plan_tests 7
+
+bt_cli "$temp_stdout" "$temp_stderr" \
+ "--plugin-path=${data_dir}" \
+ -c src.foo.TheSource \
+ -c sink.ctf.fs -p "path=\"${trace_dir}\"" -p 'assume-single-trace=true'
+ok "$?" "run sink.ctf.fs with assume-single-trace=true"
+
+# Check stdout.
+if [ "$BT_OS_TYPE" = "mingw" ]; then
+ echo "Created CTF trace \`$(cygpath -m ${trace_dir})\`." > "$temp_expected_stdout"
+else
+ echo "Created CTF trace \`${trace_dir}\`." > "$temp_expected_stdout"
+fi
+bt_diff "$temp_expected_stdout" "$temp_stdout"
+ok "$?" "expected message on stdout"
+
+# Check stderr.
+bt_diff "/dev/null" "$temp_stderr"
+ok "$?" "stderr is empty"
+
+# Verify only the expected files exist.
+files=("$trace_dir"/*)
+num_files=${#files[@]}
+is "$num_files" "2" "expected number of files in output directory"
+
+test -f "$trace_dir/metadata"
+ok "$?" "metadata file exists"
+
+test -f "$trace_dir/the-stream"
+ok "$?" "the-stream file exists"
+
+# Read back the output trace to make sure it's properly formed.
+echo "the-event: " > "$temp_expected_stdout"
+bt_diff_cli "$temp_expected_stdout" /dev/null "$trace_dir"
+ok "$?" "read back output trace"
+
+rm -f "$temp_stdout"
+rm -f "$temp_stderr"
+rm -f "$temp_expected_stdout"
+rm -f "$trace_dir/metadata"
+rm -f "$trace_dir/the-stream"
+rmdir "$trace_dir"
+rmdir "$temp_output_dir"