项目文件夹

文件
2026-07-13 12:32:21 +08:00

136 行
4.3 KiB
Lua

local schema_def = require "kong.plugins.response-ratelimiting.schema"
local helpers = require "spec.helpers"
local v = helpers.validate_plugin_config_schema
local null = ngx.null
describe("Plugin: response-rate-limiting (schema)", function()
it("proper config validates", function()
local config = {limits = {video = {second = 1}}}
local ok, err = v(config, schema_def)
assert.truthy(ok)
assert.is_nil(err)
end)
it("proper config validates (bis)", function()
local config = {limits = {video = {second = 1, minute = 2, hour = 3, day = 4, month = 5, year = 6}}}
local ok, err = v(config, schema_def)
assert.truthy(ok)
assert.is_nil(err)
end)
describe("errors", function()
it("empty config", function()
local ok, err = v({}, schema_def)
assert.falsy(ok)
assert.equal("required field missing", err.config.limits)
local ok, err = v({ limits = {} }, schema_def)
assert.falsy(ok)
assert.equal("length must be at least 1", err.config.limits)
end)
it("invalid limit", function()
local config = {limits = {video = {seco = 1}}}
local ok, err = v(config, schema_def)
assert.falsy(ok)
assert.equal("unknown field", err.config.limits.seco)
end)
it("limits: \'null\' value does not cause 500, issue #8314", function()
local config = {limits = {video = {second = null, minute = 1}}}
local ok, err = v(config, schema_def)
assert.truthy(ok)
assert.falsy(err)
end)
it("limits: smaller unit is less than bigger unit", function()
local config = {limits = {video = {second = 2, minute = 1}}}
local ok, err = v(config, schema_def)
assert.falsy(ok)
assert.equal("the limit for minute(1.0) cannot be lower than the limit for second(2.0)",
err.config.limits)
end)
it("limits: smaller unit is less than bigger unit (bis)", function()
local config = {limits = {video = {second = 1, minute = 2, hour = 3, day = 4, month = 6, year = 5}}}
local ok, err = v(config, schema_def)
assert.falsy(ok)
assert.equal("the limit for year(5.0) cannot be lower than the limit for month(6.0)",
err.config.limits)
end)
it("invaldid unit type", function()
local config = {limits = {second = 10}}
local ok, err = v(config, schema_def)
assert.falsy(ok)
assert.equal("expected a record", err.config.limits)
end)
it("proper config validates with redis new structure", function()
local config = {
limits = {
video = {
second = 10
}
},
policy = "redis",
redis = {
host = helpers.redis_host,
port = helpers.redis_port,
database = 0,
username = "test",
password = "testXXX",
ssl = true,
ssl_verify = false,
timeout = 1100,
server_name = helpers.redis_ssl_sni,
} }
local ok, _, err = v(config, schema_def)
assert.truthy(ok)
assert.is_nil(err)
end)
it("proper config validates with redis legacy structure", function()
local config = {
limits = {
video = {
second = 10
}
},
policy = "redis",
redis_host = helpers.redis_host,
redis_port = helpers.redis_port,
redis_database = 0,
redis_username = "test",
redis_password = "testXXX",
redis_ssl = true,
redis_ssl_verify = false,
redis_timeout = 1100,
redis_server_name = helpers.redis_ssl_sni,
}
local ok, _, err = v(config, schema_def)
assert.truthy(ok)
assert.is_nil(err)
end)
it("verifies that redis required fields are supplied", function()
local config = {
limits = {
video = {
second = 10
}
},
policy = "redis",
redis = {
port = helpers.redis_port,
database = 0,
username = "test",
password = "testXXX",
ssl = true,
ssl_verify = false,
timeout = 1100,
server_name = helpers.redis_ssl_sni,
} }
local ok, err = v(config, schema_def)
assert.falsy(ok)
assert.equal("required field missing", err.config.redis.host)
end)
end)
end)