Files
2026-07-13 12:32:21 +08:00

98 lines
2.9 KiB
Lua

local v = require("spec.helpers").validate_plugin_config_schema
local mock_fn_one = '("hello world!"):find("world")'
local mock_fn_two = 'local x = 1'
local mock_fn_three = 'local x = 1 return function() x = x + 1 end'
local mock_fn_invalid = 'print('
local mock_fn_invalid_return = 'return "hello-world"'
for _, plugin_name in ipairs({ "pre-function", "post-function" }) do
for _, method in ipairs({ "phase=functions" }) do
local function get_conf(functions)
return { access = functions }
end
local function get_functions_from_error(err)
return err.config.access
end
describe("Plugin: " .. plugin_name .. string.format(" (by %s)", method) .. " schema", function()
local schema
setup(function()
schema = require("kong.plugins." .. plugin_name .. ".schema")
spy.on(kong.log, "warn")
end)
teardown(function()
kong.log.warn:revert()
end)
it("validates single function", function()
local ok, err = v(get_conf { mock_fn_one }, schema)
assert.truthy(ok)
assert.falsy(err)
end)
it("error in function is not triggered during validation", function()
local ok, err = v(get_conf {
[[error("should never happen")]],
}, schema)
assert.truthy(ok)
assert.falsy(err)
end)
it("validates single function with upvalues", function()
local ok, err = v(get_conf{ mock_fn_three }, schema)
assert.truthy(ok)
assert.falsy(err)
end)
it("validates multiple functions", function()
local ok, err = v(get_conf { mock_fn_one, mock_fn_two }, schema)
assert.truthy(ok)
assert.falsy(err)
end)
it("a valid chunk with an invalid return type", function()
local ok, err = v(get_conf { mock_fn_invalid_return }, schema)
assert.truthy(ok)
assert.falsy(err)
end)
if method == "functions" then
it("throws a log warning when being used", function()
v(get_conf { mock_fn_one, mock_fn_two }, schema)
assert.spy(kong.log.warn).was_called.with(string.format("[%s] 'config.functions' will be deprecated in favour of 'config.access'", plugin_name))
end)
end
describe("errors", function()
it("with an invalid function", function()
local ok, err = v(get_conf { mock_fn_invalid }, schema)
assert.falsy(ok)
assert.equals("error parsing " .. plugin_name .. ": [string \"print(\"]:1: unexpected symbol near '<eof>'", get_functions_from_error(err)[1])
end)
it("with a valid and invalid function", function()
local ok, err = v(get_conf { mock_fn_one, mock_fn_invalid }, schema)
assert.falsy(ok)
assert.equals("error parsing " .. plugin_name .. ": [string \"print(\"]:1: unexpected symbol near '<eof>'", get_functions_from_error(err)[2])
end)
end)
end)
end
end