instance-mock-http 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/sh
  2. set -eu
  3. die() {
  4. echo >&2 "$@"
  5. exit 1
  6. }
  7. about() {
  8. die "usage: $0 [ start <port> | stop ]"
  9. }
  10. #shellcheck disable=SC1007
  11. THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
  12. #shellcheck disable=SC1090
  13. . "${THIS_DIR}/.environment.sh"
  14. # you have not removed set -u above, have you?
  15. [ -z "${LOG_DIR-}" ] && die "\$LOG_DIR must be defined."
  16. [ -z "${PID_DIR-}" ] && die "\$PID_DIR must be defined."
  17. if ! command -v python3 >/dev/null 2>&2; then
  18. die "The python3 executable is is missing. Please install it and try again."
  19. fi
  20. wait_for_port() {
  21. for _ in $(seq 40); do
  22. nc -z localhost "$1" && return
  23. sleep .05
  24. done
  25. # send to &3 if open
  26. if { true >&3; } 2>/dev/null; then
  27. # cat "${LOG_DIR}/mock-http.out" >&3
  28. echo "Can't connect to port $1" >&3
  29. else
  30. # cat "${LOG_DIR}/mock-http.out" >&2
  31. echo "Can't connect to port $1" >&2
  32. fi
  33. return 1
  34. }
  35. DAEMON_PID=${PID_DIR}/mock-http.pid
  36. start_instance() {
  37. [ $# -lt 1 ] && about
  38. OUT_FILE="${LOG_DIR}/mock-http.out" \
  39. DAEMON_PID="${DAEMON_PID}" \
  40. "${TEST_DIR}/run-as-daemon" /usr/bin/env python3 -u "${THIS_DIR}/mock-http.py" "$1"
  41. wait_for_port "$1"
  42. echo "mock http started on port $1"
  43. }
  44. stop_instance() {
  45. if [ -f "${DAEMON_PID}" ]; then
  46. # terminate with extreme prejudice, all the application data will be thrown away anyway
  47. kill -9 "$(cat "${DAEMON_PID}")" > /dev/null 2>&1
  48. rm -f -- "${DAEMON_PID}"
  49. fi
  50. }
  51. # ---------------------------
  52. [ $# -lt 1 ] && about
  53. case "$1" in
  54. start)
  55. shift
  56. start_instance "$@"
  57. ;;
  58. stop)
  59. stop_instance
  60. ;;
  61. *)
  62. about
  63. ;;
  64. esac;