run.sh 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. set -Eeuo pipefail
  3. dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
  4. image="$1"
  5. # for "nc"
  6. clientImage='busybox'
  7. cname="memcached-container-$RANDOM-$RANDOM"
  8. cid="$(docker run -d --name "$cname" "$image")"
  9. trap "docker rm -vf $cid > /dev/null" EXIT
  10. # usage: memcached-command command-line [extra-line ...]
  11. # ie: memcached-command 'stats'
  12. # memcached-command 'set a 0 0 2' 'hi'
  13. memcached-command() {
  14. {
  15. for line; do
  16. echo -n "$line"$'\r\n'
  17. done
  18. } \
  19. | docker run --rm -i \
  20. --link "$cname":memcached \
  21. "$clientImage" nc memcached 11211 \
  22. | tr -d '\r'
  23. }
  24. # https://github.com/memcached/memcached/blob/d9dfbe0e2613b9c20cb3c4fdd3c55d1bf3a8c8bd/doc/protocol.txt#L129-L205
  25. memcached-set() {
  26. local key="$1"; shift
  27. local flags="$1"; shift
  28. local exptime="$1"; shift
  29. local value="$1"; shift
  30. local bytes="$(echo -n "$value" | wc -c)"
  31. memcached-command \
  32. "set $key $flags $exptime $bytes" \
  33. "$value"
  34. }
  35. # https://github.com/memcached/memcached/blob/d9dfbe0e2613b9c20cb3c4fdd3c55d1bf3a8c8bd/doc/protocol.txt#L213-L247
  36. memcached-get() {
  37. local key="$1"; shift
  38. memcached-command \
  39. "get $key"
  40. }
  41. memcached-conn-test() {
  42. memcached-command 'stats' > /dev/null
  43. }
  44. . "$dir/../../retry.sh" 'memcached-conn-test'
  45. value='somevalue'
  46. res="$(memcached-set mykey 0 0 "$value")"
  47. exp='STORED'
  48. [ "$res" = "$exp" ]
  49. valLen="$(echo -n "$value" | wc -c)"
  50. res="$(memcached-get mykey)"
  51. exp='VALUE mykey 0 '"$valLen"$'\n'"$value"$'\n''END'
  52. [ "$res" = "$exp" ]