118 lines
2.7 KiB
Lua
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)
|