crowdsec/tests/lib/setup_file.sh

129 lines
3 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
2022-06-15 13:36:36 +00:00
# this should have effect globally, for all tests
# https://github.com/bats-core/bats-core/blob/master/docs/source/warnings/BW02.rst
2022-06-22 08:29:02 +00:00
bats_require_minimum_version 1.5.0
# this should have effect globally, for all tests
# https://github.com/bats-core/bats-core/blob/master/docs/source/warnings/BW02.rst
2022-06-15 13:36:36 +00:00
bats_require_minimum_version 1.5.0
debug() {
echo 'exec 1<&-; exec 2<&-; exec 1>&3; exec 2>&1'
}
export -f debug
# redirects stdout and stderr to &3 otherwise the errors in setup, teardown would
# go unreported.
# BUT - don't do this in test functions. Everything written to stdout and
# stderr after this line will go to the terminal, but in the tests, these
# are supposed to be collected and shown only in case of test failure
# (see options --print-output-on-failure and --show-output-of-passing-tests)
eval "$(debug)"
# Allow tests to use relative paths for helper scripts.
# shellcheck disable=SC2164
cd "${TEST_DIR}"
# complain if there's a crowdsec running system-wide or leftover from a previous test
./assert-crowdsec-not-running
# we can prepend the filename to the test descriptions (useful to feed a TAP consumer)
if [[ "${PREFIX_TEST_NAMES_WITH_FILE:-false}" == "true" ]]; then
BATS_TEST_NAME_PREFIX="$(basename "${BATS_TEST_FILENAME}" .bats): "
export BATS_TEST_NAME_PREFIX
fi
# before bats 1.7, we did that by hand
FILE=
export FILE
# the variables exported here can be seen in other setup/teardown/test functions
# MYVAR=something
# export MYVAR
# functions too
cscli() {
"${CSCLI}" "$@"
}
export -f cscli
config_get() {
cfg="${CONFIG_YAML}"
if [[ $# -ge 2 ]]; then
cfg="$1"
shift
fi
yq e "$1" "${cfg}"
}
export -f config_get
config_set() {
cfg="${CONFIG_YAML}"
if [[ $# -ge 2 ]]; then
cfg="$1"
shift
fi
yq e "$1" -i "${cfg}"
}
export -f config_set
config_disable_agent() {
config_set 'del(.crowdsec_service)'
}
export -f config_disable_agent
config_disable_lapi() {
config_set 'del(.api.server)'
}
export -f config_disable_lapi
config_disable_capi() {
config_set 'del(.api.server.online_client)'
}
export -f config_disable_capi
config_enable_capi() {
online_api_credentials="$(dirname "${CONFIG_YAML}")/online_api_credentials.yaml" \
config_set '.api.server.online_client.credentials_path=strenv(online_api_credentials)'
}
export -f config_enable_capi
# We use these functions like this:
# somecommand <(stderr)
# to provide a standard input to "somecommand".
# The alternatives echo "$stderr" or <<<"$stderr"
# ("here string" in bash jargon)
# are worse because they add a newline,
# even if the variable is empty.
# shellcheck disable=SC2154
stderr() {
printf '%s' "${stderr}"
}
export -f stderr
# shellcheck disable=SC2154
output() {
printf '%s' "${output}"
}
export -f output
is_db_postgres() {
[[ "${DB_BACKEND}" =~ ^postgres|pgx$ ]]
}
export -f is_db_postgres
is_db_mysql() {
[[ "${DB_BACKEND}" == "mysql" ]]
}
export -f is_db_mysql
is_db_sqlite() {
[[ "${DB_BACKEND}" == "sqlite" ]]
}
export -f is_db_sqlite