Files
kong--kong/spec/02-integration/11-dbless/03-config_persistence_spec.lua
2026-07-13 12:32:21 +08:00

164 lines
4.4 KiB
Lua

local helpers = require "spec.helpers"
local fmt = string.format
local SERVICE_YML = [[
- name: my-service-%d
url: https://example%d.dev
plugins:
- name: key-auth
routes:
- name: my-route-%d
paths:
- /%d
]]
describe("dbless persistence #off", function()
lazy_setup(function()
assert(helpers.start_kong({
database = "off",
}))
end)
lazy_teardown(function()
helpers.stop_kong()
end)
it("loads the lmdb config on restarts", function()
local buffer = {"_format_version: '3.0'", "services:"}
for i = 1, 1001 do
buffer[#buffer + 1] = fmt(SERVICE_YML, i, i, i, i)
end
local config = table.concat(buffer, "\n")
local admin_client = assert(helpers.admin_client())
local res = admin_client:post("/config",{
body = { config = config },
headers = {
["Content-Type"] = "application/json",
}
})
assert.res_status(201, res)
admin_client:close()
assert(helpers.restart_kong({
database = "off",
}))
local proxy_client = assert(helpers.proxy_client())
res = assert(proxy_client:get("/1", { headers = { host = "example1.dev" } }))
assert.res_status(401, res)
res = assert(proxy_client:get("/1000", { headers = { host = "example1.dev" } }))
assert.res_status(401, res)
proxy_client:close()
assert.logfile().has.line("found persisted lmdb config")
end)
end)
describe("dbless persistence with a declarative config #off", function()
local yaml_file
lazy_setup(function()
yaml_file = helpers.make_yaml_file([[
_format_version: "3.0"
services:
- name: my-service
url: https://example1.dev
plugins:
- name: key-auth
routes:
- name: my-route
paths:
- /test
]])
end)
before_each(function()
assert(helpers.start_kong({
database = "off",
declarative_config = yaml_file,
}))
local admin_client = assert(helpers.admin_client())
local proxy_client = assert(helpers.proxy_client())
local res = assert(proxy_client:get("/test", { headers = { host = "example1.dev" } }))
assert.res_status(401, res)
proxy_client:close()
local buffer = {"_format_version: '3.0'", "services:"}
local i = 500
buffer[#buffer + 1] = fmt(SERVICE_YML, i, i, i, i)
local config = table.concat(buffer, "\n")
local res = admin_client:post("/config", {
body = { config = config },
headers = {
["Content-Type"] = "application/json",
}
})
assert.res_status(201, res)
admin_client:close()
assert
.with_timeout(5)
.eventually(function()
proxy_client = assert(helpers.proxy_client())
res = proxy_client:get("/500", { headers = { host = "example1.dev" } })
res:read_body()
proxy_client:close()
return res and res.status == 401
end)
.is_truthy()
end)
after_each(function()
helpers.stop_kong()
end)
lazy_teardown(function()
os.remove(yaml_file)
end)
it("doesn't load the persisted lmdb config if a declarative config is set on restart", function()
assert(helpers.restart_kong({
database = "off",
declarative_config = yaml_file,
}))
assert
.with_timeout(15)
.eventually(function ()
local proxy_client = helpers.proxy_client()
local res = proxy_client:get("/test", { headers = { host = "example1.dev" } })
assert.res_status(401, res) -- 401, should load the declarative config
res = proxy_client:get("/500", { headers = { host = "example1.dev" } })
assert.res_status(404, res) -- 404, should not load the persisted lmdb config
proxy_client:close()
end)
.has_no_error()
end)
it("doesn't load the persisted lmdb config if a declarative config is set on reload", function()
assert(helpers.reload_kong("reload --prefix " .. helpers.test_conf.prefix, {
database = "off",
declarative_config = yaml_file,
}))
assert
.with_timeout(15)
.eventually(function ()
local proxy_client = helpers.proxy_client()
local res = proxy_client:get("/test", { headers = { host = "example1.dev" } })
assert.res_status(401, res) -- 401, should load the declarative config
res = proxy_client:get("/500", { headers = { host = "example1.dev" } })
assert.res_status(404, res) -- 404, should not load the persisted lmdb config
proxy_client:close()
end)
.has_no_error()
end)
end)