| 1 | #!/bin/bash |
| 2 | # |
| 3 | # Copyright (C) 2019 Philippe Proulx <pproulx@efficios.com> |
| 4 | # Copyright (C) 2019 Francis Deslauriers <francis.deslauriers@efficios.com> |
| 5 | # |
| 6 | # This program is free software; you can redistribute it and/or |
| 7 | # modify it under the terms of the GNU General Public License |
| 8 | # as published by the Free Software Foundation; only version 2 |
| 9 | # of the License. |
| 10 | # |
| 11 | # This program is distributed in the hope that it will be useful, |
| 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 14 | # GNU General Public License for more details. |
| 15 | # |
| 16 | # You should have received a copy of the GNU General Public License |
| 17 | # along with this program; if not, write to the Free Software |
| 18 | # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 19 | |
| 20 | # This test validates that a `src.ctf.fs` component successfully reads |
| 21 | # specific CTF traces and creates the expected messages. |
| 22 | # |
| 23 | # Such CTF traces to open either exist (in `tests/ctf-traces/succeed`) |
| 24 | # or are generated by this test using local trace generators. |
| 25 | |
| 26 | SH_TAP=1 |
| 27 | |
| 28 | if [ "x${BT_TESTS_SRCDIR:-}" != "x" ]; then |
| 29 | UTILSSH="$BT_TESTS_SRCDIR/utils/utils.sh" |
| 30 | else |
| 31 | UTILSSH="$(dirname "$0")/../../utils/utils.sh" |
| 32 | fi |
| 33 | |
| 34 | # shellcheck source=../../../utils/utils.sh |
| 35 | source "$UTILSSH" |
| 36 | |
| 37 | this_dir_relative="plugins/flt.lttng-utils.debug-info" |
| 38 | this_dir_build="$BT_TESTS_BUILDDIR/$this_dir_relative" |
| 39 | succeed_trace_dir="$BT_CTF_TRACES_PATH/succeed" |
| 40 | expect_dir="$BT_TESTS_DATADIR/$this_dir_relative" |
| 41 | binary_artefact_dir="$BT_TESTS_DATADIR/$this_dir_relative" |
| 42 | data_dir="$BT_TESTS_DATADIR/$this_dir_relative" |
| 43 | |
| 44 | test_debug_info() { |
| 45 | local name="$1" |
| 46 | local local_args=( |
| 47 | "-c" "flt.lttng-utils.debug-info" |
| 48 | "-p" "target-prefix=\"$binary_artefact_dir/x86_64-linux-gnu/dwarf_full\"" |
| 49 | "-c" "sink.text.details" |
| 50 | "-p" "with-trace-name=no,with-stream-name=no" |
| 51 | ) |
| 52 | |
| 53 | bt_diff_cli "$expect_dir/trace-$name.expect" "/dev/null" \ |
| 54 | "$succeed_trace_dir/$name" "${local_args[@]}" |
| 55 | ok $? "Trace '$name' gives the expected output" |
| 56 | } |
| 57 | |
| 58 | test_compare_to_ctf_fs() { |
| 59 | # Compare the `sink.text.details` output of a graph with and without a |
| 60 | # `flt.lttng-utils.debug-info` component. Both should be identical for |
| 61 | # traces without LTTng debugging fields. |
| 62 | local test_name=$1 |
| 63 | shift 1 |
| 64 | local cli_args=("$@") |
| 65 | local debug_info_cli_args=("-c" "flt.lttng-utils.debug-info") |
| 66 | local details_cli_args=( |
| 67 | "-c" "sink.text.details" |
| 68 | "--params" "with-trace-name=false,with-stream-name=false,with-uuid=false" |
| 69 | ) |
| 70 | local actual_stdout=$(mktemp -t test_debug_info_stdout_actual.XXXXXX) |
| 71 | local actual_stderr=$(mktemp -t test_debug_info_stderr_actual.XXXXXX) |
| 72 | local expected_stdout=$(mktemp -t test_debug_info_stdout_expected.XXXXXX) |
| 73 | local expected_stderr=$(mktemp -t test_debug_info_stderr_expected.XXXXXX) |
| 74 | local ret=0 |
| 75 | |
| 76 | # Create expected files using a graph without a `debug-info` component. |
| 77 | bt_cli "$expected_stdout" "$expected_stderr" "${cli_args[@]}" \ |
| 78 | "${details_cli_args[@]}" |
| 79 | |
| 80 | # Read the same trace with a `debug-info` component in the graph. |
| 81 | bt_cli "$actual_stdout" "$actual_stderr" "${cli_args[@]}" \ |
| 82 | "${details_cli_args[@]}" "${debug_info_cli_args[@]}" |
| 83 | |
| 84 | bt_diff "$expected_stdout" "$actual_stdout" |
| 85 | ok $? "Input '$test_name' gives the expected stdout" |
| 86 | |
| 87 | bt_diff "$expected_stderr" "$actual_stderr" |
| 88 | ok $? "Input '$test_name' gives the expected stderr" |
| 89 | |
| 90 | rm -f "$actual_stdout" |
| 91 | rm -f "$actual_stderr" |
| 92 | rm -f "$expected_stdout" |
| 93 | rm -f "$expected_stderr" |
| 94 | } |
| 95 | |
| 96 | test_compare_ctf_src_trace() { |
| 97 | local trace_name=$1 |
| 98 | local trace_path="$succeed_trace_dir/$trace_name" |
| 99 | local cli_args=("$trace_path") |
| 100 | |
| 101 | diag "Comparing output with and without 'flt.lttng-utils.debug-info' on '$trace_name'" |
| 102 | test_compare_to_ctf_fs "src.ctf.fs with $trace_name trace" "${cli_args[@]}" |
| 103 | } |
| 104 | |
| 105 | test_compare_complete_src_trace() { |
| 106 | |
| 107 | local source_name="src.test_debug_info.CompleteSrc" |
| 108 | local cli_args=("--plugin-path=$data_dir" "-c" "$source_name") |
| 109 | test_compare_to_ctf_fs "$source_name" "${cli_args[@]}" |
| 110 | } |
| 111 | |
| 112 | plan_tests 9 |
| 113 | |
| 114 | test_debug_info debug-info |
| 115 | |
| 116 | test_compare_ctf_src_trace smalltrace |
| 117 | test_compare_ctf_src_trace 2packets |
| 118 | test_compare_ctf_src_trace session-rotation |
| 119 | |
| 120 | test_compare_complete_src_trace |