Files
kong--kong/spec/03-plugins/03-http-log/04-legacy_queue_sharing_spec.lua
2026-07-13 12:32:21 +08:00

178 lines
4.4 KiB
Lua

local cjson = require "cjson"
local helpers = require "spec.helpers"
for _, strategy in helpers.each_strategy() do
describe("legacy queue sharing [#" .. strategy .. "]", function()
local proxy_client
lazy_setup(function()
local bp = helpers.get_db_utils(strategy, {
"routes",
"services",
"plugins",
})
local service1 = bp.services:insert{
protocol = "http",
host = helpers.mock_upstream_host,
port = helpers.mock_upstream_port,
}
local route1 = bp.routes:insert {
hosts = { "sharing.test.route1" },
service = service1
}
bp.plugins:insert {
route = { id = route1.id },
name = "http-log",
config = {
http_endpoint = "http://" .. helpers.mock_upstream_host
.. ":"
.. helpers.mock_upstream_port
.. "/post_log/http",
queue = {
max_coalescing_delay = 1000,
max_batch_size = 2,
},
}
}
local service2 = bp.services:insert{
protocol = "http",
host = helpers.mock_upstream_host,
port = helpers.mock_upstream_port,
}
local route2 = bp.routes:insert {
hosts = { "sharing.test.route2" },
service = service2
}
bp.plugins:insert {
route = { id = route2.id },
name = "http-log",
config = {
http_endpoint = "http://" .. helpers.mock_upstream_host
.. ":"
.. helpers.mock_upstream_port
.. "/post_log/http",
queue = {
max_coalescing_delay = 1000,
max_batch_size = 2,
},
}
}
local service3 = bp.services:insert{
protocol = "http",
host = helpers.mock_upstream_host,
port = helpers.mock_upstream_port,
}
local route3 = bp.routes:insert {
hosts = { "sharing.test.route3" },
service = service3
}
bp.plugins:insert {
route = { id = route3.id },
name = "http-log",
config = {
http_endpoint = "http://" .. helpers.mock_upstream_host
.. ":"
.. helpers.mock_upstream_port
.. "/post_log/http_unshared",
queue = {
max_coalescing_delay = 0.01,
max_batch_size = 2,
},
}
}
end)
lazy_teardown(function()
helpers.stop_kong()
end)
before_each(function()
assert(helpers.start_kong({
database = strategy,
nginx_conf = "spec/fixtures/custom_nginx.template",
}))
proxy_client = helpers.proxy_client()
end)
after_each(function()
if proxy_client then
proxy_client:close()
end
helpers.stop_kong()
end)
it("queues are shared based on upstream parameters", function()
local res = assert(proxy_client:send({
method = "GET",
path = "/status/200",
headers = {
["Host"] = "sharing.test.route1"
}
}))
assert.res_status(200, res)
local res = assert(proxy_client:send({
method = "GET",
path = "/status/200",
headers = {
["Host"] = "sharing.test.route2"
}
}))
assert.res_status(200, res)
local res = assert(proxy_client:send({
method = "GET",
path = "/status/200",
headers = {
["Host"] = "sharing.test.route3"
}
}))
assert.res_status(200, res)
helpers.wait_until(function()
local client = assert(helpers.http_client(helpers.mock_upstream_host,
helpers.mock_upstream_port))
local res = client:get("/read_log/http", {
headers = {
Accept = "application/json"
}
})
local raw = assert.res_status(200, res)
local body = cjson.decode(raw)
if #body.entries == 2 then
return true
end
end, 10)
helpers.wait_until(function()
local client = assert(helpers.http_client(helpers.mock_upstream_host,
helpers.mock_upstream_port))
local res = client:get("/read_log/http_unshared", {
headers = {
Accept = "application/json"
}
})
local raw = assert.res_status(200, res)
local body = cjson.decode(raw)
if #body.entries == 1 then
return true
end
end, 10)
end)
end)
end