run.sh 1.6 KB

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