crowdsec/tests/instance-crowdsec

89 lines
1.9 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
set -eu
script_name=$0
die() {
echo >&2 "$@"
exit 1
}
about() {
die "usage: $script_name [ start | stop ]"
}
#shellcheck disable=SC1007
THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
#shellcheck disable=SC1090
. "${THIS_DIR}/.environment.sh"
# you have not removed set -u above, have you?
[ -z "${CROWDSEC-}" ] && die "\$CROWDSEC must be defined."
[ -z "${LOG_DIR-}" ] && die "\$LOG_DIR must be defined."
[ -z "${PID_DIR-}" ] && die "\$PID_DIR must be defined."
if [ ! -f "${CROWDSEC}" ]; then
die "${CROWDSEC} is missing. Please build (with 'make bats-build') or install it."
fi
wait_for_port() {
for _ in $(seq 40); do
2022-03-10 11:19:02 +00:00
nc -z localhost "$1" >/dev/null 2>&1 && return
sleep .05
done
# send to &3 if open
if { true >&3; } 2>/dev/null; then
# cat "${LOG_DIR}/crowdsec.out" >&3
# cat "${LOG_DIR}/crowdsec.log" >&3
echo "Can't connect to port $1" >&3
else
# cat "${LOG_DIR}/crowdsec.out" >&2
# cat "${LOG_DIR}/crowdsec.log" >&2
echo "Can't connect to port $1" >&2
fi
return 1
}
DAEMON_PID=${PID_DIR}/crowdsec.pid
start_instance() {
OUT_FILE="${LOG_DIR}/crowdsec.out" \
DAEMON_PID="${DAEMON_PID}" \
"${TEST_DIR}/run-as-daemon" "${CROWDSEC}"
wait_for_port 6060
}
stop_instance() {
if [ -f "${DAEMON_PID}" ]; then
# terminate quickly with extreme prejudice, all the application data will be
# thrown away anyway. also terminate the child processes (notification plugin).
2022-03-10 11:19:02 +00:00
PGID="$(ps -o pgid= -p "$(cat "${DAEMON_PID}")" | tr -d ' ')"
# ps above should work on linux, freebsd, busybox..
if [ -n "${PGID}" ]; then
kill -- "-${PGID}"
fi
rm -f -- "${DAEMON_PID}"
fi
}
# ---------------------------
[ $# -lt 1 ] && about
case "$1" in
start)
start_instance
;;
stop)
stop_instance
;;
*)
about
;;
esac;