run.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/bin/bash
  2. set -eo pipefail
  3. dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
  4. image="$1"
  5. # Build a client image with cgi-fcgi for testing
  6. clientImage="librarytest/monica-fpm-run:fcgi-client"
  7. docker build -t "$clientImage" - > /dev/null <<'EOF'
  8. FROM debian:bookworm-slim
  9. RUN set -x && apt-get update && apt-get install -y --no-install-recommends libfcgi-bin && rm -rf /var/lib/apt/lists/*
  10. ENTRYPOINT ["cgi-fcgi"]
  11. EOF
  12. dbImage='mysql:8.0'
  13. # ensure the dbImage is ready and available
  14. if ! docker image inspect "$dbImage" &> /dev/null; then
  15. docker pull "$dbImage" > /dev/null
  16. fi
  17. # Create an instance of the container-under-test
  18. mysqlCid="$(docker run -d \
  19. -e MYSQL_RANDOM_ROOT_PASSWORD=true \
  20. -e MYSQL_DATABASE=monica \
  21. -e MYSQL_USER=monica \
  22. -e MYSQL_PASSWORD=secret \
  23. "$dbImage")"
  24. trap "docker rm -vf $mysqlCid > /dev/null" EXIT
  25. cid="$(docker run -d \
  26. --link "$mysqlCid":mysql \
  27. -e DB_HOST=mysql \
  28. -e DB_CONNECTION=mysql \
  29. -e DB_DATABASE=monica \
  30. -e DB_USERNAME=monica \
  31. -e DB_PASSWORD=secret \
  32. "$image")"
  33. trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT
  34. fcgi-request() {
  35. local method="$1"
  36. local url="$2"
  37. local requestUri="$3"
  38. local queryString=
  39. if [[ "$url" == *\?* ]]; then
  40. queryString="${url#*\?}"
  41. url="${url%%\?*}"
  42. fi
  43. docker run --rm -i --link "$cid":fpm \
  44. -e REQUEST_METHOD="$method" \
  45. -e SCRIPT_NAME="$url" \
  46. -e SCRIPT_FILENAME=/var/www/html/public/"${url#/}" \
  47. -e QUERY_STRING="$queryString" \
  48. -e REQUEST_URI="$requestUri" \
  49. "$clientImage" \
  50. -bind -connect fpm:9000
  51. }
  52. # Make sure that PHP-FPM is listening and ready
  53. . "$dir/../../retry.sh" --tries 30 'fcgi-request GET /index.php' > /dev/null 2>&1
  54. # Check that we can request /register and that it contains the pattern "Monica" somewhere
  55. fcgi-request GET '/index.php' register | grep -i "Monica" > /dev/null