run.sh 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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" \
  22. nc memcached 11211 \
  23. | tr -d '\r'
  24. }
  25. # https://github.com/memcached/memcached/blob/d9dfbe0e2613b9c20cb3c4fdd3c55d1bf3a8c8bd/doc/protocol.txt#L129-L205
  26. memcached-set() {
  27. local key="$1"; shift
  28. local flags="$1"; shift
  29. local exptime="$1"; shift
  30. local value="$1"; shift
  31. local bytes="$(echo -n "$value" | wc -c)"
  32. memcached-command \
  33. "set $key $flags $exptime $bytes" \
  34. "$value"
  35. }
  36. # https://github.com/memcached/memcached/blob/d9dfbe0e2613b9c20cb3c4fdd3c55d1bf3a8c8bd/doc/protocol.txt#L213-L247
  37. memcached-get() {
  38. local key="$1"; shift
  39. memcached-command \
  40. "get $key"
  41. }
  42. memcached-conn-test() {
  43. memcached-command 'stats' > /dev/null
  44. }
  45. . "$dir/../../retry.sh" 'memcached-conn-test'
  46. value='somevalue'
  47. res="$(memcached-set mykey 0 0 "$value")"
  48. exp='STORED'
  49. [ "$res" = "$exp" ]
  50. valLen="$(echo -n "$value" | wc -c)"
  51. res="$(memcached-get mykey)"
  52. exp='VALUE mykey 0 '"$valLen"$'\n'"$value"$'\n''END'
  53. [ "$res" = "$exp" ]