From ff89ed28f8f411258190b9c1972a58af3d5c850e Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Mon, 29 Jul 2019 12:30:17 -0400 Subject: [PATCH] tests: fix test_auto_source_discovery on mingw Add native path support and use the shared diff functions to properly handle end of line characters. Change-Id: Ie36e60b41e03a242161d1734f8cf9dadaef56a36 Signed-off-by: Michael Jeanson Reviewed-on: https://review.lttng.org/c/babeltrace/+/1802 CI-Build: Philippe Proulx Reviewed-by: Philippe Proulx Tested-by: jenkins --- .../test_auto_source_discovery | 35 +++--- tests/utils/utils.sh | 116 ++++++++++++++---- 2 files changed, 115 insertions(+), 36 deletions(-) diff --git a/tests/cli/auto-source-discovery/test_auto_source_discovery b/tests/cli/auto-source-discovery/test_auto_source_discovery index 07b0475e..470df17e 100755 --- a/tests/cli/auto-source-discovery/test_auto_source_discovery +++ b/tests/cli/auto-source-discovery/test_auto_source_discovery @@ -26,7 +26,7 @@ fi # shellcheck source=../../utils/utils.sh SH_TAP=1 source "$UTILSSH" -NUM_TESTS=2 +NUM_TESTS=1 plan_tests $NUM_TESTS @@ -34,24 +34,31 @@ data_dir="${BT_TESTS_DATADIR}/cli/auto-source-discovery" plugin_dir="${data_dir}" trace_dir="${data_dir}/traces" -expected_file=$(mktemp expected.XXXXXX) -actual_file=$(mktemp actual.XXXXXX) +if [ "$BT_OS_TYPE" = "mingw" ]; then + # Use Windows native paths for comparison because Unix + # paths are converted by the shell before they are passed + # to the native babeltrace2 binary. + trace_dir=$(cygpath -w "$trace_dir") + dir_sep='\' +else + dir_sep='/' +fi -run_python_bt2 "$BT_TESTS_BT2_BIN" convert --plugin-path "${plugin_dir}" "ABCDE" "${trace_dir}" some_other_leftover | sort > "$actual_file" -ok "${PIPESTATUS[0]}" "successful execution" +expected_file=$(mktemp -t expected.XXXXXX) +stderr_expected=/dev/null cat > "$expected_file" < \r\n). + # "diff --string-trailing-cr" is not used since it is not present on + # Solaris. + "$BT_TESTS_SED_BIN" -i 's/\r//g' "$actual_stdout_file" + "$BT_TESTS_SED_BIN" -i 's/\r//g' "$actual_stderr_file" + + # Compare stdout output with expected stdout output + if ! diff -u "$actual_stdout_file" "$expected_stdout_file" 2>/dev/null >"$temp_diff"; then + echo "ERROR: for '${args[*]}': actual standard output and expected output differ:" >&2 + cat "$temp_diff" >&2 + ret=1 + fi + + # Compare stderr output with expected stderr output + if ! diff -u "$actual_stderr_file" "$expected_stderr_file" 2>/dev/null >"$temp_diff"; then + echo "ERROR: for '${args[*]}': actual standard error and expected error differ:" >&2 + cat "$temp_diff" >&2 + ret=1 + fi + + rm -f "$temp_diff" + + return $ret +} + # Checks the difference between: # # 1. What the CLI outputs on its standard output when given the arguments @@ -167,37 +216,60 @@ bt_diff_cli() { local temp_stdout_output_file local temp_stderr_output_file - local temp_diff local ret=0 - temp_stdout_output_file="$(mktemp)" - temp_stderr_output_file="$(mktemp)" - temp_diff="$(mktemp)" + temp_stdout_output_file="$(mktemp -t actual_stdout.XXXXXX)" + temp_stderr_output_file="$(mktemp -t actual_stderr.XXXXXX)" # Run the CLI to get a detailed file. run_python_bt2 "$BT_TESTS_BT2_BIN" "${args[@]}" 1>"$temp_stdout_output_file" 2>"$temp_stderr_output_file" - # Strip any \r present due to Windows (\n -> \r\n). - # "diff --string-trailing-cr" is not used since it is not present on - # Solaris. - "$BT_TESTS_SED_BIN" -i 's/\r//g' "$temp_stdout_output_file" - "$BT_TESTS_SED_BIN" -i 's/\r//g' "$temp_stderr_output_file" + bt_diff "$expected_stdout_file" "$temp_stdout_output_file" "$expected_stderr_file" "$temp_stderr_output_file" "${args[@]}" + ret=$? - # Compare stdout output with expected stdout output - if ! diff -u "$temp_stdout_output_file" "$expected_stdout_file" 2>/dev/null >"$temp_diff"; then - echo "ERROR: for '${args[*]}': actual standard output and expected output differ:" >&2 - cat "$temp_diff" >&2 - ret=1 - fi + rm -f "$temp_stdout_output_file" "$temp_stderr_output_file" - # Compare stderr output with expected stderr output - if ! diff -u "$temp_stderr_output_file" "$expected_stderr_file" 2>/dev/null >"$temp_diff"; then - echo "ERROR: for '${args[*]}': actual standard error and expected error differ:" >&2 - cat "$temp_diff" >&2 - ret=1 - fi + return $ret +} + +# Checks the difference between: +# +# 1. What the CLI outputs on its standard output when given the arguments +# "$@" (excluding the first two arguments), sorted with the default "sort". +# 2. The file with path "$1". +# +# And the difference between: +# +# 1. What the CLI outputs on its standard error when given the arguments +# "$@" (excluding the first two arguments). +# 2. The file with path "$2". +# +# Returns 0 if there's no difference, and 1 if there is, also printing +# said difference to the standard error. +bt_diff_cli_sorted() { + local expected_stdout_file="$1" + local expected_stderr_file="$2" + shift 2 + local args=("$@") + + local temp_stdout_output_file + local temp_stderr_output_file + local ret=0 + + temp_stdout_output_file="$(mktemp -t actual_stdout.XXXXXX)" + temp_stderr_output_file="$(mktemp -t actual_stderr.XXXXXX)" + + # Run the CLI to get a detailed file. + run_python_bt2 "$BT_TESTS_BT2_BIN" "${args[@]}" 1>"$temp_stdout_output_file" 2>"$temp_stderr_output_file" + + # Sort the stdout file, use a subshell to do it in-place + # shellcheck disable=SC2005 + echo "$(LC_ALL=C sort "$temp_stdout_output_file")" > "$temp_stdout_output_file" + + bt_diff "$expected_stdout_file" "$temp_stdout_output_file" "$expected_stderr_file" "$temp_stderr_output_file" "${args[@]}" + ret=$? - rm -f "$temp_stdout_output_file" "$temp_stderr_output_file" "$temp_diff" + rm -f "$temp_stdout_output_file" "$temp_stderr_output_file" return $ret } -- 2.34.1