diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:57:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:57:58 +0000 |
commit | be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97 (patch) | |
tree | 9754ff1ca740f6346cf8483ec915d4054bc5da2d /fluent-bit/tests/lib/shunit2/shunit2_test_helpers | |
parent | Initial commit. (diff) | |
download | netdata-be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97.tar.xz netdata-be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97.zip |
Adding upstream version 1.44.3.upstream/1.44.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'fluent-bit/tests/lib/shunit2/shunit2_test_helpers')
-rw-r--r-- | fluent-bit/tests/lib/shunit2/shunit2_test_helpers | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/fluent-bit/tests/lib/shunit2/shunit2_test_helpers b/fluent-bit/tests/lib/shunit2/shunit2_test_helpers new file mode 100644 index 00000000..7ff4c9cc --- /dev/null +++ b/fluent-bit/tests/lib/shunit2/shunit2_test_helpers @@ -0,0 +1,234 @@ +# vim:et:ft=sh:sts=2:sw=2 +# +# shUnit2 unit test common functions +# +# Copyright 2008 Kate Ward. All Rights Reserved. +# Released under the Apache 2.0 license. +# +# Author: kate.ward@forestent.com (Kate Ward) +# https://github.com/kward/shunit2 +# +### ShellCheck (http://www.shellcheck.net/) +# Commands are purposely escaped so they can be mocked outside shUnit2. +# shellcheck disable=SC1001,SC1012 +# expr may be antiquated, but it is the only solution in some cases. +# shellcheck disable=SC2003 +# $() are not fully portable (POSIX != portable). +# shellcheck disable=SC2006 + +# Treat unset variables as an error when performing parameter expansion. +set -u + +# Set shwordsplit for zsh. +\[ -n "${ZSH_VERSION:-}" ] && setopt shwordsplit + +# +# Constants. +# + +# Path to shUnit2 library. Can be overridden by setting SHUNIT_INC. +TH_SHUNIT=${SHUNIT_INC:-./shunit2}; export TH_SHUNIT + +# Configure debugging. Set the DEBUG environment variable to any +# non-empty value to enable debug output, or TRACE to enable trace +# output. +TRACE=${TRACE:+'th_trace '} +\[ -n "${TRACE}" ] && DEBUG=1 +\[ -z "${TRACE}" ] && TRACE=':' + +DEBUG=${DEBUG:+'th_debug '} +\[ -z "${DEBUG}" ] && DEBUG=':' + +# +# Variables. +# + +th_RANDOM=0 + +# +# Functions. +# + +# Logging functions. +th_trace() { echo "${MY_NAME}:TRACE $*" >&2; } +th_debug() { echo "${MY_NAME}:DEBUG $*" >&2; } +th_info() { echo "${MY_NAME}:INFO $*" >&2; } +th_warn() { echo "${MY_NAME}:WARN $*" >&2; } +th_error() { echo "${MY_NAME}:ERROR $*" >&2; } +th_fatal() { echo "${MY_NAME}:FATAL $*" >&2; } + +# Output subtest name. +th_subtest() { echo " $*" >&2; } + +th_oneTimeSetUp() { + # These files will be cleaned up automatically by shUnit2. + stdoutF="${SHUNIT_TMPDIR}/stdout" + stderrF="${SHUNIT_TMPDIR}/stderr" + returnF="${SHUNIT_TMPDIR}/return" + expectedF="${SHUNIT_TMPDIR}/expected" + export stdoutF stderrF returnF expectedF +} + +# Generate a random number. +th_generateRandom() { + tfgr_random=${th_RANDOM} + + while \[ "${tfgr_random}" = "${th_RANDOM}" ]; do + # shellcheck disable=SC2039 + if \[ -n "${RANDOM:-}" ]; then + # $RANDOM works + # shellcheck disable=SC2039 + tfgr_random=${RANDOM}${RANDOM}${RANDOM}$$ + elif \[ -r '/dev/urandom' ]; then + tfgr_random=`od -vAn -N4 -tu4 </dev/urandom |sed 's/^[^0-9]*//'` + else + tfgr_date=`date '+%H%M%S'` + tfgr_random=`expr "${tfgr_date}" \* $$` + unset tfgr_date + fi + \[ "${tfgr_random}" = "${th_RANDOM}" ] && sleep 1 + done + + th_RANDOM=${tfgr_random} + unset tfgr_random +} + +# This section returns the data section from the specified section of a file. A +# data section is defined by a [header], one or more lines of data, and then a +# blank line. +th_getDataSect() { + th_sgrep "\\[$1\\]" "$2" |sed '1d' +} + +# This function greps a section from a file. a section is defined as a group of +# lines preceded and followed by blank lines.. +th_sgrep() { + th_pattern_=$1 + shift + + # shellcheck disable=SC2068 + sed -e '/./{H;$!d;}' -e "x;/${th_pattern_}/"'!d;' $@ |sed '1d' + + unset th_pattern_ +} + +# Custom assert that checks for true return value (0), and no output to STDOUT +# or STDERR. If a non-zero return value is encountered, the output of STDERR +# will be output. +# +# Args: +# th_test_: string: name of the subtest +# th_rtrn_: integer: the return value of the subtest performed +# th_stdout_: string: filename where stdout was redirected to +# th_stderr_: string: filename where stderr was redirected to +th_assertTrueWithNoOutput() { + th_test_=$1 + th_rtrn_=$2 + th_stdout_=$3 + th_stderr_=$4 + + assertTrue "${th_test_}; expected return value of zero" "${th_rtrn_}" + \[ "${th_rtrn_}" -ne "${SHUNIT_TRUE}" ] && \cat "${th_stderr_}" + assertFalse "${th_test_}; expected no output to STDOUT" \ + "[ -s '${th_stdout_}' ]" + assertFalse "${th_test_}; expected no output to STDERR" \ + "[ -s '${th_stderr_}' ]" + + unset th_test_ th_rtrn_ th_stdout_ th_stderr_ +} + +# Custom assert that checks for non-zero return value, output to STDOUT, but no +# output to STDERR. +# +# Args: +# th_test_: string: name of the subtest +# th_rtrn_: integer: the return value of the subtest performed +# th_stdout_: string: filename where stdout was redirected to +# th_stderr_: string: filename where stderr was redirected to +th_assertFalseWithOutput() +{ + th_test_=$1 + th_rtrn_=$2 + th_stdout_=$3 + th_stderr_=$4 + + assertFalse "${th_test_}; expected non-zero return value" "${th_rtrn_}" + assertTrue "${th_test_}; expected output to STDOUT" \ + "[ -s '${th_stdout_}' ]" + assertFalse "${th_test_}; expected no output to STDERR" \ + "[ -s '${th_stderr_}' ]" + \[ -s "${th_stdout_}" -a ! -s "${th_stderr_}" ] || \ + _th_showOutput "${SHUNIT_FALSE}" "${th_stdout_}" "${th_stderr_}" + + unset th_test_ th_rtrn_ th_stdout_ th_stderr_ +} + +# Custom assert that checks for non-zero return value, no output to STDOUT, but +# output to STDERR. +# +# Args: +# th_test_: string: name of the subtest +# th_rtrn_: integer: the return value of the subtest performed +# th_stdout_: string: filename where stdout was redirected to +# th_stderr_: string: filename where stderr was redirected to +th_assertFalseWithError() { + th_test_=$1 + th_rtrn_=$2 + th_stdout_=$3 + th_stderr_=$4 + + assertFalse "${th_test_}; expected non-zero return value" "${th_rtrn_}" + assertFalse "${th_test_}; expected no output to STDOUT" \ + "[ -s '${th_stdout_}' ]" + assertTrue "${th_test_}; expected output to STDERR" \ + "[ -s '${th_stderr_}' ]" + \[ ! -s "${th_stdout_}" -a -s "${th_stderr_}" ] || \ + _th_showOutput "${SHUNIT_FALSE}" "${th_stdout_}" "${th_stderr_}" + + unset th_test_ th_rtrn_ th_stdout_ th_stderr_ +} + +# Some shells, zsh on Solaris in particular, return immediately from a sub-shell +# when a non-zero return value is encountered. To properly catch these values, +# they are either written to disk, or recognized as an error the file is empty. +th_clearReturn() { cp /dev/null "${returnF}"; } +th_queryReturn() { + if \[ -s "${returnF}" ]; then + th_return=`\cat "${returnF}"` + else + th_return=${SHUNIT_ERROR} + fi + export th_return +} + +# Providing external and internal calls to the showOutput helper function. +th_showOutput() { _th_showOutput "$@"; } +_th_showOutput() { + _th_return_=$1 + _th_stdout_=$2 + _th_stderr_=$3 + + isSkipping + if \[ $? -eq "${SHUNIT_FALSE}" -a "${_th_return_}" != "${SHUNIT_TRUE}" ]; then + if \[ -n "${_th_stdout_}" -a -s "${_th_stdout_}" ]; then + echo '>>> STDOUT' >&2 + \cat "${_th_stdout_}" >&2 + fi + if \[ -n "${_th_stderr_}" -a -s "${_th_stderr_}" ]; then + echo '>>> STDERR' >&2 + \cat "${_th_stderr_}" >&2 + fi + if \[ -n "${_th_stdout_}" -o -n "${_th_stderr_}" ]; then + echo '<<< end output' >&2 + fi + fi + + unset _th_return_ _th_stdout_ _th_stderr_ +} + +# +# Main. +# + +${TRACE} 'trace output enabled' +${DEBUG} 'debug output enabled' |