run.sh 1.6 KB

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