kong/spec/02-integration/04-admin_api/05-cache_routes_spec.lua (152 lines of code) (raw):
local helpers = require "spec.helpers"
local cjson = require "cjson"
for _, strategy in helpers.each_strategy() do
describe("Admin API /cache [#" .. strategy .. "]", function()
local proxy_client
local admin_client
lazy_setup(function()
local bp = helpers.get_db_utils(strategy, {
"routes",
"services",
"plugins",
}, {
"cache"
})
local service = bp.services:insert()
bp.routes:insert {
hosts = { "cache.com" },
service = service,
}
bp.routes:insert {
hosts = { "cache.com" },
methods = { "POST" },
service = service,
}
bp.plugins:insert {
name = "cache",
service = { id = service.id },
}
assert(helpers.start_kong({
database = strategy,
nginx_conf = "spec/fixtures/custom_nginx.template",
plugins = "cache",
}))
proxy_client = helpers.proxy_client()
admin_client = helpers.admin_client()
end)
lazy_teardown(function()
if admin_client then
admin_client:close()
end
if proxy_client then
proxy_client:close()
end
helpers.stop_kong()
end)
describe("/cache/:key", function()
describe("GET", function()
it("returns 404 if cache miss", function()
local res = assert(admin_client:send {
method = "GET",
path = "/cache/_inexistent_",
})
assert.res_status(404, res)
end)
it("returns 200 and value if cache hit", function()
-- populate cache
local res = assert(proxy_client:send {
method = "POST",
path = "/",
body = {
cache_key = "my_key",
cache_value = "my_value",
},
headers = {
["Host"] = "cache.com",
["Content-Type"] = "application/x-www-form-urlencoded",
},
})
assert.res_status(200, res)
local admin_res = assert(admin_client:send {
method = "GET",
path = "/cache/my_key",
})
local body = assert.res_status(200, admin_res)
local json = cjson.decode(body)
assert.equal("my_value", json.message)
end)
end)
describe("DELETE", function()
it("purges a cached value", function()
-- populate cache
local res = assert(proxy_client:send {
method = "POST",
path = "/",
body = {
cache_key = "purge_me",
cache_value = "value_to_purge",
},
headers = {
["Host"] = "cache.com",
["Content-Type"] = "application/x-www-form-urlencoded",
},
})
assert.res_status(200, res)
-- delete cache
local admin_res = assert(admin_client:send {
method = "DELETE",
path = "/cache/purge_me",
})
assert.res_status(204, admin_res)
admin_res = assert(admin_client:send {
method = "GET",
path = "/cache/purge_me",
})
assert.res_status(404, admin_res)
end)
end)
end)
describe("DELETE", function()
it("purges all cached values", function()
-- populate cache
local res = assert(proxy_client:send {
method = "POST",
path = "/",
body = {
cache_key = "key_1",
cache_value = "value_to_purge",
},
headers = {
["Host"] = "cache.com",
["Content-Type"] = "application/x-www-form-urlencoded",
},
})
assert.res_status(200, res)
res = assert(proxy_client:send {
method = "POST",
path = "/",
body = {
cache_key = "key_2",
cache_value = "value_to_purge",
},
headers = {
["Host"] = "cache.com",
["Content-Type"] = "application/x-www-form-urlencoded",
},
})
assert.res_status(200, res)
local admin_res = assert(admin_client:send {
method = "DELETE",
path = "/cache",
})
assert.res_status(204, admin_res)
admin_res = assert(admin_client:send {
method = "GET",
path = "/cache/key_1",
})
assert.res_status(404, admin_res)
admin_res = assert(admin_client:send {
method = "GET",
path = "/cache/key_2",
})
assert.res_status(404, admin_res)
end)
end)
end)
end