kong--kong
136 行
4.3 KiB
Lua
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)
|