74 lines
2.1 KiB
Lua
74 lines
2.1 KiB
Lua
local helpers = require "spec.helpers"
|
|
local cjson = require "cjson"
|
|
|
|
for pool_size, backlog_size in ipairs({ 2, 3 }) do
|
|
describe("#postgres Postgres connection pool with pool=" .. pool_size .. "and backlog=" .. backlog_size, function()
|
|
local client
|
|
lazy_setup(function()
|
|
local bp = helpers.get_db_utils("postgres", {
|
|
"plugins",
|
|
}, {
|
|
"slow-query"
|
|
})
|
|
|
|
bp.plugins:insert({
|
|
name = "slow-query",
|
|
})
|
|
|
|
assert(helpers.start_kong({
|
|
database = "postgres",
|
|
nginx_conf = "spec/fixtures/custom_nginx.template",
|
|
plugins = "slow-query",
|
|
nginx_worker_processes = 1,
|
|
pg_pool_size = pool_size,
|
|
pg_backlog = backlog_size,
|
|
log_level = "info",
|
|
}))
|
|
client = helpers.admin_client()
|
|
end)
|
|
|
|
lazy_teardown(function()
|
|
if client then
|
|
client:close()
|
|
end
|
|
helpers.stop_kong()
|
|
end)
|
|
|
|
it("results in query error too many waiting connect operations when pool and backlog sizes are exceeded", function()
|
|
helpers.wait_timer("slow-query", true, "all-finish", 10)
|
|
|
|
local delay = 4
|
|
assert
|
|
.with_timeout(10)
|
|
-- wait for any ongoing query to finish before retrying
|
|
.with_step(delay)
|
|
.ignore_exceptions(true)
|
|
.eventually(function()
|
|
local ok = true
|
|
for _ = 1, pool_size + backlog_size do
|
|
local res = assert(client:send {
|
|
method = "GET",
|
|
path = "/slow-resource?prime=true&delay=" .. delay,
|
|
headers = { ["Content-Type"] = "application/json" }
|
|
})
|
|
res:read_body()
|
|
ok = ok and res.status == 204
|
|
end
|
|
return ok
|
|
end)
|
|
.is_truthy("expected both requests to succeed with empty pool and backlog")
|
|
|
|
ngx.sleep(2)
|
|
|
|
local res = assert(client:send {
|
|
method = "GET",
|
|
path = "/slow-resource?delay=-1",
|
|
headers = { ["Content-Type"] = "application/json" }
|
|
})
|
|
local body = assert.res_status(500, res)
|
|
local json = cjson.decode(body)
|
|
assert.same({ error = "too many waiting connect operations" }, json)
|
|
end)
|
|
end)
|
|
end
|