X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tests%2Fcli%2Ftest_trace_copy;fp=tests%2Fcli%2Ftest_trace_copy;h=8b4a46d40e2c43a2353b3eb476413346fee808d4;hb=644e036445497ef69ccf946f0700da20a5bae84f;hp=0000000000000000000000000000000000000000;hpb=86f0fb5572a6a96b815793f7e39901047aac2ba9;p=babeltrace.git diff --git a/tests/cli/test_trace_copy b/tests/cli/test_trace_copy new file mode 100755 index 00000000..8b4a46d4 --- /dev/null +++ b/tests/cli/test_trace_copy @@ -0,0 +1,88 @@ +#!/bin/bash +# +# Copyright (C) - 2017 Julien Desfossez +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License, version 2 only, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +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" + +clean_tmp() { + rm -rf "${out_path}" "${text_output1}" "${text_output2}" +} + +SUCCESS_TRACES=(${BT_CTF_TRACES_PATH}/succeed/*) + +# -2 because there is an empty trace that we skip +NUM_TESTS=$((${#SUCCESS_TRACES[@]} * 3 - 2)) + +plan_tests $NUM_TESTS + +for path in "${SUCCESS_TRACES[@]}"; do + out_path="$(mktemp -d)" + text_output1="$(mktemp)" + text_output2="$(mktemp)" + trace="$(basename "${path}")" + sort_cmd="cat" # by default do not sort the trace + + "${BT_TESTS_BT2_BIN}" --no-delta "${path}" 2>/dev/null >"${text_output1}" + ret=$? + cnt="$(wc -l < "${text_output1}")" + if test "$ret" == 0 && test "${cnt// /}" == 0; then + pass "Empty trace ${trace}, nothing to copy" + clean_tmp + continue + fi + + # If the trace has a timestamp (starts with [), check if there are + # duplicate timestamps in the output. + # If there are, we have to sort the text output to make sure it is + # always the same. + head -1 "${text_output1}" | "${BT_TESTS_GREP_BIN}" "^\[" >/dev/null + if test $? = 0; then + uniq_ts_cnt="$("${BT_TESTS_AWK_BIN}" '{ print $1 }' < "${text_output1}" | sort | uniq | wc -l)" + # Extract only the timestamp columns and compare the number of + # unique lines with the total number of lines to see if there + # are duplicate timestamps. + if test "${cnt// /}" != "${uniq_ts_cnt// /}"; then + diag "Trace with non unique timestamps, sorting the output" + sort_cmd="sort" + tmp="$(mktemp)" + sort "${text_output1}" > "$tmp" + rm "${text_output1}" + text_output1="$tmp" + fi + fi + + "${BT_TESTS_BT2_BIN}" "${path}" --component sink.ctf.fs --path "${out_path}" >/dev/null 2>&1 + ok $? "Copy trace ${trace} with ctf-fs sink" + + "${BT_TESTS_BT2_BIN}" "${out_path}" >/dev/null 2>&1 + ok $? "Read the new trace in ${out_path}" + + "${BT_TESTS_BT2_BIN}" --no-delta "${out_path}" 2>/dev/null | $sort_cmd >"${text_output2}" + cnt=$(diff "${text_output1}" "${text_output2}" | wc -l) + test "${cnt// /}" == 0 + ok $? "Exact same content between the two traces" + + clean_tmp +done