feca-mailshots-plugin/scripts/run_fixture_server.sh

74 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
FIXTURE_HOST="${FIXTURE_HOST:-127.0.0.1}"
FIXTURE_PORT="${FIXTURE_PORT:-8080}"
TUNNEL_PORT="${MYSQL_TUNNEL_LOCAL_PORT:-13306}"
FIXTURE_DOCROOT="${ROOT_DIR}/tests/fixture"
PID_FILE="${ROOT_DIR}/working/fixture_server_${FIXTURE_PORT}.pid"
LOG_FILE="${ROOT_DIR}/working/fixture_server_${FIXTURE_PORT}.log"
mkdir -p "${ROOT_DIR}/working"
start_server() {
if [[ -f "${PID_FILE}" ]] && kill -0 "$(cat "${PID_FILE}")" >/dev/null 2>&1; then
echo "Fixture server already running on http://${FIXTURE_HOST}:${FIXTURE_PORT} (pid $(cat "${PID_FILE}"))"
return 0
fi
export MYSQL_TUNNEL_LOCAL_PORT="${TUNNEL_PORT}"
nohup php -S "${FIXTURE_HOST}:${FIXTURE_PORT}" -t "${FIXTURE_DOCROOT}" >"${LOG_FILE}" 2>&1 &
echo $! >"${PID_FILE}"
sleep 0.4
if kill -0 "$(cat "${PID_FILE}")" >/dev/null 2>&1; then
echo "Fixture server started: http://${FIXTURE_HOST}:${FIXTURE_PORT}"
echo "Fixture index: http://${FIXTURE_HOST}:${FIXTURE_PORT}/index.php"
echo "Mailshots UI: http://${FIXTURE_HOST}:${FIXTURE_PORT}/mailshots_fixture.php"
echo "Using MySQL tunnel port: ${MYSQL_TUNNEL_LOCAL_PORT}"
else
echo "Failed to start fixture server; check ${LOG_FILE}" >&2
exit 1
fi
}
stop_server() {
if [[ ! -f "${PID_FILE}" ]]; then
echo "Fixture server not running (no pid file)."
return 0
fi
local pid
pid="$(cat "${PID_FILE}")"
if kill -0 "${pid}" >/dev/null 2>&1; then
kill "${pid}" >/dev/null 2>&1 || true
sleep 0.2
if kill -0 "${pid}" >/dev/null 2>&1; then
kill -9 "${pid}" >/dev/null 2>&1 || true
fi
fi
rm -f "${PID_FILE}"
echo "Fixture server stopped."
}
status_server() {
if [[ -f "${PID_FILE}" ]] && kill -0 "$(cat "${PID_FILE}")" >/dev/null 2>&1; then
echo "Fixture server running on http://${FIXTURE_HOST}:${FIXTURE_PORT} (pid $(cat "${PID_FILE}"))"
else
echo "Fixture server not running on http://${FIXTURE_HOST}:${FIXTURE_PORT}"
fi
}
case "${1:-start}" in
start) start_server ;;
stop) stop_server ;;
status) status_server ;;
restart) stop_server; start_server ;;
*)
echo "Usage: $(basename "$0") [start|stop|status|restart]"
exit 2
;;
esac