kong/spec/03-plugins/31-proxy-cache/05-cache_key_spec.lua (109 lines of code) (raw):
local utils = require "kong.tools.utils"
local key_utils = require "kong.plugins.proxy-cache.cache_key"
describe("prefix_uuid", function()
local consumer1_uuid = utils.uuid()
local consumer2_uuid = utils.uuid()
local route1_uuid = utils.uuid()
local route2_uuid = utils.uuid()
it("returns distinct prefixes for a consumer on different routes", function()
local prefix1 = assert(key_utils.prefix_uuid(consumer1_uuid, route1_uuid))
local prefix2 = assert(key_utils.prefix_uuid(consumer1_uuid, route2_uuid))
assert.not_equal(prefix1, prefix2)
assert.not_equal("default", prefix1)
assert.not_equal("default", prefix2)
end)
it("returns distinct prefixes for different consumers on a route", function()
local prefix1 = assert(key_utils.prefix_uuid(consumer1_uuid, route1_uuid))
local prefix2 = assert(key_utils.prefix_uuid(consumer2_uuid, route1_uuid))
assert.not_equal(prefix1, prefix2)
assert.not_equal("default", prefix1)
assert.not_equal("default", prefix2)
end)
it("returns the same prefix for a route with no consumer", function()
local prefix1 = assert(key_utils.prefix_uuid(nil, route1_uuid))
local prefix2 = assert(key_utils.prefix_uuid(nil, route1_uuid))
assert.equal(prefix1, prefix2)
assert.not_equal("default", prefix1)
end)
it("returns a consumer-specific prefix for routes", function()
local prefix1 = assert(key_utils.prefix_uuid(nil, route1_uuid))
local prefix2 = assert(key_utils.prefix_uuid(consumer1_uuid, route1_uuid))
assert.not_equal(prefix1, prefix2)
end)
describe("returns 'default' if", function()
it("no consumer_id, api_id, or route_id was given", function()
assert.equal("default", key_utils.prefix_uuid())
end)
it("only consumer_id was given", function()
assert.equal("default", key_utils.prefix_uuid(consumer1_uuid))
end)
end)
describe("does not return 'default' if", function()
it("route_id is non-nil", function()
assert.not_equal("default", key_utils.prefix_uuid(nil, route1_uuid))
end)
end)
end)
describe("params_key", function()
it("defaults to all", function()
assert.equal("a=1:b=2", key_utils.params_key({a = 1, b = 2},{}))
end)
it("empty query_string returns empty", function()
assert.equal("", key_utils.params_key({},{}))
end)
it("empty query_string returns empty with vary query_params", function()
assert.equal("", key_utils.params_key({},{"a"}))
end)
it("sorts the arguments", function()
for i = 1, 100 do
local s1 = "a" .. utils.random_string()
local s2 = "b" .. utils.random_string()
assert.equal(s1.."=1:".. s2 .. "=2", key_utils.params_key({[s2] = 2, [s1] = 1},{}))
end
end)
it("uses only params specified in vary", function()
assert.equal("a=1", key_utils.params_key({a = 1, b = 2},
{vary_query_params = {"a"}}))
end)
it("deals with multiple params with same name", function()
assert.equal("a=1,2", key_utils.params_key({a = {1, 2}},
{vary_query_params = {"a"}}))
end)
it("deals with multiple params with same name and sorts", function()
assert.equal("a=1,2", key_utils.params_key({a = {2, 1}},
{vary_query_params = {"a"}}))
end)
it("discards params in config that are not in the request", function()
assert.equal("a=1,2:b=2", key_utils.params_key({a = {1, 2}, b = 2},
{vary_query_params = {"a", "b", "c"}}))
end)
end)
describe("headers_key", function()
it("defaults to none", function()
assert.equal("", key_utils.headers_key({a = 1, b = 2},{}))
end)
it("sorts the arguments", function()
for i = 1, 100 do
local s1 = "a" .. utils.random_string()
local s2 = "b" .. utils.random_string()
assert.equal(s1.."=1:".. s2 .. "=2", key_utils.params_key({[s2] = 2, [s1] = 1},
{vary_headers = {"a", "b"}}))
end
end)
it("uses only params specified in vary", function()
assert.equal("a=1", key_utils.headers_key({a = 1, b = 2},
{vary_headers = {"a"}}))
end)
it("deals with multiple params with same name", function()
assert.equal("a=1,2", key_utils.headers_key({a = {1, 2}},
{vary_headers = {"a"}}))
end)
it("deals with multiple params with same name and sorts", function()
assert.equal("a=1,2", key_utils.headers_key({a = {2, 1}},
{vary_headers = {"a"}}))
end)
it("discards params in config that are not in the request", function()
assert.equal("a=1,2:b=2", key_utils.headers_key({a = {1, 2}, b = 2},
{vary_headers = {"a", "b", "c"}}))
end)
end)