Files
2026-07-13 12:32:21 +08:00

128 lines
3.5 KiB
Lua

local helpers = require "spec.helpers"
local merge = kong.table.merge
local cjson = require "cjson"
for _, strategy in helpers.all_strategies() do
describe("db.key_sets #" .. strategy, function()
local bp, db, keyset, jwk, pem_pub, pem_priv
lazy_setup(function()
bp, db = helpers.get_db_utils(strategy ~= "off" and strategy or nil, {
"keys",
"key_sets"})
local jwk_pub, jwk_priv = helpers.generate_keys("JWK")
pem_pub, pem_priv = helpers.generate_keys("PEM")
jwk = merge(cjson.decode(jwk_pub), cjson.decode(jwk_priv))
keyset = assert(bp.key_sets:insert {
name = "testset",
})
end)
lazy_teardown(function()
db:truncate("keys")
db:truncate("key_sets")
end)
it(":select returns an item", function()
local key_set, err = kong.db.key_sets:select(keyset)
assert.is_nil(err)
assert(key_set.name == keyset.name)
end)
it(":insert creates a keyset with name 'this'", function()
local key_set, err = kong.db.key_sets:insert {
name = "this"
}
assert.is_nil(err)
assert(key_set.name == "this")
end)
it(":delete works", function()
local key_set, err = kong.db.key_sets:insert {
name = "that"
}
assert.is_nil(err)
assert(key_set.name == "that")
local ok, d_err = kong.db.key_sets:delete(key_set)
assert.is_nil(d_err)
assert.is_truthy(ok)
end)
it(":update updates a keyset's fields", function()
local key_set, err = kong.db.key_sets:update(keyset, {
name = "changed"
})
assert.is_nil(err)
assert(key_set.name == "changed")
end)
it(":delete cascades correctly", function ()
local key_set, err = kong.db.key_sets:insert {
name = "deletecascade"
}
assert(key_set.name == "deletecascade")
assert.is_nil(err)
local key, ins_err = kong.db.keys:insert {
name = "testkey",
kid = jwk.kid,
set = key_set,
jwk = cjson.encode(jwk)
}
assert.is_nil(ins_err)
-- verify creation
local key_select, select_err = kong.db.keys:select(key)
assert.is_nil(select_err)
assert.is_not_nil(key_select)
-- delete the set
local ok, d_err = kong.db.key_sets:delete(key_set)
assert.is_true(ok)
assert.is_nil(d_err)
-- verify if key is gone
local key_select_deleted, select_deleted_err = kong.db.keys:select(key)
assert.is_nil(select_deleted_err)
assert.is_nil(key_select_deleted)
end)
it("allows to have multiple keys with different formats in a set", function ()
local key_set, err = kong.db.key_sets:insert {
name = "multikeys"
}
assert(key_set.name == "multikeys")
assert.is_nil(err)
local pem_key, ins_err = kong.db.keys:insert {
name = "pem_k",
kid = "2",
set = key_set,
pem = {
private_key = pem_priv,
public_key = pem_pub,
}
}
assert.is_nil(ins_err)
assert.is_not_nil(pem_key)
local jwk, jwk_ins_err = kong.db.keys:insert {
name = "jwk_k",
kid = jwk.kid,
jwk = cjson.encode(jwk),
set = key_set,
}
assert.is_nil(jwk_ins_err)
assert.is_not_nil(jwk)
local rows = {}
local i = 1
for row, err_t in kong.db.keys:each_for_set(key_set) do
assert.is_nil(err_t)
rows[i] = row
i = i + 1
end
assert.is_nil(err)
assert.is_same(2, #rows)
end)
end)
end