#!/bin/bash # This file ensures that the helper functions in util.sh behave as expected set -o errexit set -o nounset set -o pipefail # set -x OS_ROOT=$(dirname "${BASH_SOURCE}")/.. source "${OS_ROOT}/hack/util.sh" source "${OS_ROOT}/hack/cmd_util.sh" os::log::install_errexit BASETMPDIR="${TMPDIR:-/tmp}/openshift/test-tools" JUNIT_OUTPUT_FILE="${BASETMPDIR}/junit_output.txt" # set verbosity so we can see that command output renders correctly VERBOSE=1 # positive tests os::cmd::expect_success 'exit 0' os::cmd::expect_failure 'exit 10' os::cmd::expect_success_and_text 'printf "hello" && exit 0' 'hello' os::cmd::expect_failure_and_text 'printf "hello" && exit 19' 'hello' os::cmd::expect_success_and_not_text 'echo "goodbye" && exit 0' 'hello' os::cmd::expect_failure_and_not_text 'echo "goodbye" && exit 19' 'hello' os::cmd::expect_code 'exit 195' '195' os::cmd::expect_code_and_text 'echo "hello" && exit 213' '213' 'hello' os::cmd::expect_code_and_not_text 'echo "goodbye" && exit 213' '213' 'hello' echo "positive tests: ok" # negative tests if os::cmd::expect_success 'exit 1'; then exit 1 fi if os::cmd::expect_failure 'exit 0'; then exit 1 fi if os::cmd::expect_success_and_text 'echo "goodbye" && exit 0' 'hello'; then exit 1 fi if os::cmd::expect_success_and_text 'echo "hello" && exit 1' 'hello'; then exit 1 fi if os::cmd::expect_success_and_text 'echo "goodbye" && exit 1' 'hello'; then exit 1 fi if os::cmd::expect_failure_and_text 'echo "goodbye" && exit 1' 'hello'; then exit 1 fi if os::cmd::expect_failure_and_text 'echo "hello" && exit 0' 'hello'; then exit 1 fi if os::cmd::expect_failure_and_text 'echo "goodbye" && exit 0' 'hello'; then exit 1 fi if os::cmd::expect_success_and_not_text 'echo "hello" && exit 0' 'hello'; then exit 1 fi if os::cmd::expect_success_and_not_text 'echo "goodbye" && exit 1' 'hello'; then exit 1 fi if os::cmd::expect_success_and_not_text 'echo "hello" && exit 1' 'hello'; then exit 1 fi if os::cmd::expect_failure_and_not_text 'echo "goodbye" && exit 0' 'hello'; then exit 1 fi if os::cmd::expect_failure_and_not_text 'echo "hello" && exit 1' 'hello'; then exit 1 fi if os::cmd::expect_failure_and_not_text 'echo "hello" && exit 0' 'hello'; then exit 1 fi if os::cmd::expect_code 'exit 1' '200'; then exit 1 fi if os::cmd::expect_code_and_text 'echo "hello" && exit 0' '1' 'hello'; then exit 1 fi if os::cmd::expect_code_and_text 'echo "goodbye" && exit 1' '1' 'hello'; then exit 1 fi if os::cmd::expect_code_and_text 'echo "goodbye" && exit 0' '1' 'hello'; then exit 1 fi if os::cmd::expect_code_and_not_text 'echo "goodbye" && exit 0' '1' 'hello'; then exit 1 fi if os::cmd::expect_code_and_not_text 'echo "hello" && exit 1' '1' 'hello'; then exit 1 fi if os::cmd::expect_code_and_not_text 'echo "hello" && exit 0' '1' 'hello'; then exit 1 fi echo "negative tests: ok" # complex input tests # pipes os::cmd::expect_success 'echo "hello" | grep hello' os::cmd::expect_success 'echo "-1" | xargs ls' # variables VAR=hello os::cmd::expect_success_and_text 'echo $(echo "${VAR}")' 'hello' unset VAR # semicolon os::cmd::expect_success 'echo "hello"; pwd' # spaces in strings os::cmd::expect_success_and_text 'echo "-v marker"' 'v marker' # curly braces os::cmd::expect_success_and_text 'ls "${OS_ROOT}"/hack/update-generated-co{n,m}*.sh' 'completions' os::cmd::expect_success_and_text 'ls "${OS_ROOT}"/hack/update-generated-co{n,m}*.sh' 'conversions' # integer arithmetic os::cmd::expect_success_and_text 'if (( 1 )); then echo "hello"; fi' 'hello' os::cmd::expect_success_and_text 'echo $(( 1 - 20 ))' '\-19' # we need to escape for grep # redirects os::cmd::expect_failure_and_text 'grep' '(Usage|usage)' os::cmd::expect_success_and_not_text 'pwd 1>/dev/null' '.' os::cmd::expect_failure_and_not_text 'grep 2>/dev/null' '(Usage|usage)' # here document/string os::cmd::expect_success 'grep hello < ${TEST_DIR}/compress_test.txt echo "success line 2 ... repeated 3 times success NEW line 2 ... repeated 4 times success OLD line 2 ... repeated 3 times" > ${TEST_DIR}/expected-compressed.out os::cmd::internal::compress_output ${TEST_DIR}//compress_test.txt > ${TEST_DIR}/actual-compressed.out diff ${TEST_DIR}/expected-compressed.out ${TEST_DIR}/actual-compressed.out echo "compression: ok"