Files
kong--kong/spec/01-unit/12-plugins_order_spec.lua
2026-07-13 12:32:21 +08:00

118 lines
2.7 KiB
Lua

require "spec.helpers" -- initializes 'kong' global for plugins
local conf_loader = require "kong.conf_loader"
local fmt = string.format
describe("Plugins", function()
local plugins
lazy_setup(function()
local conf = assert(conf_loader(nil, {
plugins = "bundled",
}))
local kong_global = require "kong.global"
_G.kong = kong_global.new()
kong_global.init_pdk(kong, conf)
plugins = {}
for plugin in pairs(conf.loaded_plugins) do
local handler = require("kong.plugins." .. plugin .. ".handler")
table.insert(plugins, {
name = plugin,
handler = handler
})
end
end)
it("don't have identical `PRIORITY` fields", function()
local priorities = {}
for _, plugin in ipairs(plugins) do
local priority = plugin.handler.PRIORITY
assert.not_nil(priority)
if priorities[priority] then
assert.fail(fmt("plugins have the same priority: '%s' and '%s' (%d)",
priorities[priority], plugin.name, priority))
end
priorities[priority] = plugin.name
end
end)
it("run in the following order", function()
-- here is the order as of 0.10.1 with OpenResty 1.11.2.2
--
-- since 1.11.2.3 and the LuaJIT string hashing change, we hard-code
-- that those plugins execute in this order, only to preserve
-- backwards-compatibility
local order = {
"pre-function",
"correlation-id",
"zipkin",
"bot-detection",
"cors",
"session",
"acme",
"jwt",
"oauth2",
"key-auth",
"ldap-auth",
"basic-auth",
"hmac-auth",
"grpc-gateway",
"ip-restriction",
"request-size-limiting",
"acl",
"rate-limiting",
"response-ratelimiting",
"request-transformer",
"response-transformer",
"redirect",
"ai-request-transformer",
"ai-prompt-template",
"ai-prompt-decorator",
"ai-prompt-guard",
"ai-proxy",
"ai-response-transformer",
"standard-webhooks",
"aws-lambda",
"azure-functions",
"proxy-cache",
"opentelemetry",
"prometheus",
"http-log",
"statsd",
"datadog",
"file-log",
"udp-log",
"tcp-log",
"loggly",
"syslog",
"grpc-web",
"request-termination",
"post-function",
}
table.sort(plugins, function(a, b)
local priority_a = a.handler.PRIORITY or 0
local priority_b = b.handler.PRIORITY or 0
return priority_a > priority_b
end)
local sorted_plugins = {}
for _, plugin in ipairs(plugins) do
table.insert(sorted_plugins, plugin.name)
end
assert.same(order, sorted_plugins)
end)
end)