run.sh 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/env bash
  2. set -Eeuo pipefail
  3. # https://www.rabbitmq.com/tutorials/tutorial-one-python.html
  4. dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
  5. serverImage="$1"
  6. clientImage="$("$dir/../image-name.sh" librarytest/rabbitmq-basics "$serverImage")"
  7. "$dir/../docker-build.sh" "$dir" "$clientImage" <<EOD
  8. FROM python:3.7-alpine
  9. # ensure pip does not complain about a new version being available
  10. ENV PIP_DISABLE_PIP_VERSION_CHECK=1
  11. RUN pip install pika==1.1.0
  12. COPY dir/*.py /usr/local/bin/
  13. EOD
  14. cname="rabbitmq-container-$RANDOM-$RANDOM"
  15. # use sh to create a minimal config so that we don't get this error on 3.9+:
  16. # PLAIN login refused: user 'guest' can only connect via localhost
  17. cid="$(
  18. docker run -d \
  19. --name "$cname" \
  20. --user rabbitmq \
  21. --entrypoint sh \
  22. "$serverImage" \
  23. -c 'echo "loopback_users.guest = false" >> /etc/rabbitmq/rabbitmq.conf && exec rabbitmq-server'
  24. )"
  25. trap "docker rm -vf $cid > /dev/null" EXIT
  26. client() {
  27. docker run -i --rm \
  28. --link "$cname":rabbitmq \
  29. "$clientImage" \
  30. "$@"
  31. }
  32. . "$dir/../../retry.sh" 'client testconn.py'
  33. test-send-recv() {
  34. local payload="$1"; shift
  35. client send.py "$payload"
  36. response="$(client receive.py)"
  37. if [ "$payload" != "$response" ]; then
  38. echo >&2 "error: expected '$payload' but got '$response' instead"
  39. return 1
  40. fi
  41. }
  42. test-send-recv 'hello'
  43. test-send-recv "$RANDOM"
  44. test-send-recv $'a\nb\nc\td'