#!/bin/sh
set -e

cat <<EOF > "/etc/nginx/sites-enabled/default"
server {
  listen 80 default_server;

  location /t {
    content_by_lua_block {
      local lrucache = require "resty.lrucache"
      local c = lrucache.new(3)

      collectgarbage()

      -- set values
      c:set("int-value", 0)
      c:set("string-value", "abc")
      c:set("bool-value", true)
      ngx.say("int-value: ", (c:get("int-value")))
      ngx.say("string-value: ", (c:get("string-value")))
      ngx.say("string-value: ", (c:get("bool-value")))

      -- update values
      c:set("int-value", 1)
      c:set("string-value", "def")
      c:set("bool-value", false)
      ngx.say("int-value: ", (c:get("int-value")))
      ngx.say("string-value: ", (c:get("string-value")))
      ngx.say("string-value: ", (c:get("bool-value")))

      -- delete values
      c:delete("int-value")
      c:delete("string-value")
      c:delete("bool-value")
      ngx.say("int-value: ", (c:get("int-value")))
      ngx.say("string-value: ", (c:get("string-value")))
      ngx.say("string-value: ", (c:get("bool-value")))

      -- set values again
      c:set("int-value", 0)
      c:set("string-value", "abc")
      c:set("bool-value", true)
      ngx.say("int-value: ", (c:get("int-value")))
      ngx.say("string-value: ", (c:get("string-value")))
      ngx.say("string-value: ", (c:get("bool-value")))

      -- flush cache
      c:flush_all()
      ngx.say("int-value: ", (c:get("int-value")))
      ngx.say("string-value: ", (c:get("string-value")))
      ngx.say("string-value: ", (c:get("bool-value")))
    }
  }
}
EOF

exp="int-value: 0
string-value: abc
string-value: true
int-value: 1
string-value: def
string-value: false
int-value: nil
string-value: nil
string-value: nil
int-value: 0
string-value: abc
string-value: true
int-value: nil
string-value: nil
string-value: nil
response_code: 200"

nginx -t
invoke-rc.d nginx restart || { journalctl -n all -xu nginx.service; exit 1; }
out=`curl --fail -w "response_code: %{http_code}\n" http://127.0.0.1/t`

if [ x"${out}" != x"${exp}" ]; then
  echo "output:"
  echo "====================="
  echo "${out}"
  echo "====================="
  echo "expected output:"
  echo "====================="
  echo "${exp}"
  echo "====================="
  exit 1
fi
