143 lines
4.4 KiB
Lua
143 lines
4.4 KiB
Lua
local helpers = require "spec.helpers"
|
|
local conf_loader = require "kong.conf_loader"
|
|
local insert = table.insert
|
|
local factories = require "spec.fixtures.factories.plugins"
|
|
|
|
local PluginFactory = factories.PluginFactory
|
|
local EntitiesFactory = factories.EntitiesFactory
|
|
|
|
for _, strategy in helpers.each_strategy() do
|
|
describe("Plugins Iterator - Ensure correctness #" .. strategy, function()
|
|
local proxy_client, expected_header, must_not_have_headers, n_entities
|
|
|
|
lazy_teardown(function()
|
|
helpers.stop_kong()
|
|
helpers.kill_all()
|
|
assert(conf_loader(nil, {}))
|
|
end)
|
|
|
|
lazy_setup(function()
|
|
proxy_client = helpers.proxy_client
|
|
helpers.stop_kong()
|
|
helpers.kill_all()
|
|
assert(conf_loader(nil, {}))
|
|
n_entities = 10
|
|
|
|
local ef = EntitiesFactory:setup(strategy)
|
|
ef.bp.plugins:insert(
|
|
{
|
|
name = "response-transformer",
|
|
-- scope to default route
|
|
route = { id = ef.route_id },
|
|
config = {
|
|
add = {
|
|
headers = { "response-transformed:true" }
|
|
}
|
|
}
|
|
}
|
|
)
|
|
ef.bp.plugins:insert(
|
|
{
|
|
name = "correlation-id",
|
|
-- scope to default route
|
|
route = { id = ef.route_id },
|
|
config = {
|
|
header_name = "correlation-id-added"
|
|
}
|
|
}
|
|
)
|
|
|
|
for i = 0, n_entities do
|
|
local service = ef.bp.services:insert {
|
|
path = "/anything/service-" .. i
|
|
}
|
|
ef.bp.routes:insert {
|
|
hosts = { "route.bar." .. i },
|
|
service = { id = service.id }
|
|
}
|
|
ef.bp.plugins:insert(
|
|
{
|
|
name = "correlation-id",
|
|
service = { id = service.id },
|
|
config = {
|
|
header_name = "correlation-id-added-service" .. i
|
|
}
|
|
}
|
|
)
|
|
ef.bp.plugins:insert(
|
|
{
|
|
name = "response-transformer",
|
|
service = { id = service.id },
|
|
config = {
|
|
add = {
|
|
headers = { "response-transformed-" .. i .. ":true" }
|
|
}
|
|
}
|
|
}
|
|
)
|
|
end
|
|
|
|
local pf = PluginFactory:setup(ef)
|
|
-- add a plugin scoped to Consumer, Route and Service
|
|
expected_header = pf:consumer_route_service()
|
|
must_not_have_headers = {}
|
|
|
|
-- scoped to Consumer, Route
|
|
insert(must_not_have_headers, (pf:consumer_route()))
|
|
-- assure we don't iterate over #{}
|
|
assert.is_equal(#must_not_have_headers, 1)
|
|
|
|
assert(helpers.start_kong({
|
|
database = strategy,
|
|
nginx_conf = "spec/fixtures/custom_nginx.template",
|
|
}))
|
|
end)
|
|
|
|
it("ensure no cross-contamination", function()
|
|
-- meaning that we don't run plugins that are scoped to a specific service
|
|
for i = 0, n_entities do
|
|
local r = proxy_client():get("/anything/service-" .. i, {
|
|
headers = {
|
|
host = "route.bar." .. i,
|
|
-- authenticate as `alice`
|
|
apikey = "alice",
|
|
},
|
|
})
|
|
assert.response(r).has.status(200)
|
|
|
|
-- The plugin for _THIS_ service is executed
|
|
assert.request(r).has_header("correlation-id-added-service" .. i)
|
|
assert.response(r).has_header("response-transformed-" .. i)
|
|
-- check that no header of any other service is present
|
|
for j = 0, n_entities do
|
|
if j ~= i then
|
|
assert.request(r).has_no_header("correlation-id-added-service"..j)
|
|
assert.response(r).has_no_header("response-transformed-" .. j)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
it("runs plugins in various phases", function()
|
|
local r = proxy_client():get("/anything", {
|
|
headers = {
|
|
host = "route.test",
|
|
-- authenticate as `alice`
|
|
apikey = "alice",
|
|
},
|
|
})
|
|
assert.response(r).has.status(200)
|
|
-- assert that request-termination was executed
|
|
assert.request(r).has_header(expected_header)
|
|
-- assert that no other `request-transformer` plugin was executed that had lesser scopes configured
|
|
for _, header in pairs(must_not_have_headers) do
|
|
assert.request(r).has_no_header(header)
|
|
end
|
|
-- assert that the `response-transformer` plugin was executed
|
|
assert.response(r).has_header("response-transformed")
|
|
-- assert that the `correlation-id` plugin was executed
|
|
assert.request(r).has_header("correlation-id-added")
|
|
end)
|
|
end)
|
|
end
|