run.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/bin/bash
  2. [ "$DEBUG" ] && set -x
  3. set -eo pipefail
  4. dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
  5. image="$1"
  6. # Use a client image with curl for testing
  7. clientImage='buildpack-deps:trixie-curl'
  8. # ensure the clientImage is ready and available
  9. if ! docker image inspect "$clientImage" &> /dev/null; then
  10. docker pull "$clientImage" > /dev/null
  11. fi
  12. # input via HTTP (default port 0.0.0.0:8080)
  13. # output via stdout, newline-delimited nothing-but-the-message
  14. config='
  15. input {
  16. http {
  17. }
  18. }
  19. output {
  20. stdout {
  21. codec => line {
  22. format => "%{message}"
  23. }
  24. }
  25. }
  26. '
  27. # Create an instance of the container-under-test
  28. cid="$(docker run -d "$image" -e "$config")"
  29. trap "docker rm -vf $cid > /dev/null" EXIT
  30. _request() {
  31. # https://github.com/docker/docker/issues/14203#issuecomment-129865960 (DOCKER_FIX)
  32. docker run --rm \
  33. --link "$cid":logstash \
  34. -e DOCKER_FIX=' ' \
  35. "$clientImage" \
  36. curl -fs "$@" "http://logstash:8080"
  37. }
  38. _trimmed() {
  39. _request "$@" | sed -r 's/^[[:space:]]+|[[:space:]]+$//g'
  40. }
  41. _req-comp() {
  42. local expected="$1"; shift
  43. response="$(_trimmed "$@")"
  44. [ "$response" = "$expected" ]
  45. }
  46. _req-exit() {
  47. local expectedRet="$1"; shift
  48. [ "$(_request "$@" --output /dev/null || echo "$?")" = "$expectedRet" ]
  49. }
  50. _req-msg() {
  51. local msg="$1"; shift
  52. _req-comp 'ok' --data "$msg"
  53. # use "retry.sh" to give logstash just a tiny bit of time to actually print the message to stdout
  54. . "$dir/../../retry.sh" --tries 3 --sleep 0.5 '
  55. logLine="$(docker logs --tail=1 "$cid")";
  56. [ "$logLine" = "$msg" ];
  57. '
  58. }
  59. # Make sure our container is listening
  60. . "$dir/../../retry.sh" --tries 60 '! _req-exit 7' # "Failed to connect to host."
  61. for msg in \
  62. 'hi' \
  63. "hello $RANDOM world" \
  64. "hello $RANDOM world" \
  65. "hello $RANDOM world" \
  66. 'bye' \
  67. ; do
  68. _req-msg "$msg"
  69. done