kong/spec/02-integration/05-proxy/11-handler_spec.lua (165 lines of code) (raw):

local helpers = require "spec.helpers" for _, strategy in helpers.each_strategy() do describe("OpenResty phases [#" .. strategy .. "]", function() describe("rewrite_by_lua", function() describe("enabled on all routes", function() local admin_client local proxy_client lazy_setup(function() local bp = helpers.get_db_utils(strategy, { "routes", "services", "plugins", }) -- insert plugin-less route and a global plugin local service = bp.services:insert { name = "mock_upstream", } bp.routes:insert { protocols = { "http" }, hosts = { "mock_upstream" }, service = service, } bp.plugins:insert { name = "rewriter", config = { value = "global plugin", }, } assert(helpers.start_kong({ database = strategy, nginx_conf = "spec/fixtures/custom_nginx.template", })) admin_client = helpers.admin_client() proxy_client = helpers.proxy_client() end) lazy_teardown(function() if admin_client then admin_client:close() end helpers.stop_kong(nil, true) end) it("runs", function() local res = assert(proxy_client:send { method = "GET", path = "/request", headers = { host = "mock_upstream", }, }) assert.response(res).has.status(200) local value = assert.request(res).has.header("rewriter") assert.equal("global plugin", value) end) end) describe("enabled on a specific routes", function() local admin_client local proxy_client lazy_setup(function() local bp = helpers.get_db_utils(strategy, { "routes", "services", "plugins", }) -- route specific plugin local service = bp.services:insert { name = "mock_upstream", } local route = bp.routes:insert { hosts = { "mock_upstream" }, service = service, } bp.plugins:insert { route = { id = route.id }, service = { id = service.id }, name = "rewriter", config = { value = "route-specific plugin", }, } assert(helpers.start_kong({ database = strategy, nginx_conf = "spec/fixtures/custom_nginx.template" })) admin_client = helpers.admin_client() proxy_client = helpers.proxy_client() end) lazy_teardown(function() if admin_client then admin_client:close() end helpers.stop_kong(nil, true) end) it("doesn't run", function() local res = assert(proxy_client:send { method = "GET", path = "/request", headers = { host = "mock_upstream", }, }) assert.response(res).has.status(200) assert.request(res).has.no.header("rewriter") end) end) describe("enabled on a specific Consumer", function() local admin_client local proxy_client lazy_setup(function() local bp = helpers.get_db_utils(strategy, { "routes", "services", "plugins", "consumers", "keyauth_credentials", }) -- consumer specific plugin local service = bp.services:insert { name = "mock_upstream", } local route = bp.routes:insert { protocols = { "http" }, hosts = { "mock_upstream" }, service = service, } bp.plugins:insert { name = "key-auth", route = { id = route.id }, service = { id = service.id }, } local consumer3 = bp.consumers:insert { username = "test-consumer-3", } bp.keyauth_credentials:insert { consumer = { id = consumer3.id }, key = "kong", } bp.plugins:insert { consumer = { id = consumer3.id }, name = "rewriter", config = { value = "consumer-specific plugin", }, } assert(helpers.start_kong({ database = strategy, nginx_conf = "spec/fixtures/custom_nginx.template", })) admin_client = helpers.admin_client() proxy_client = helpers.proxy_client() end) lazy_teardown(function() if admin_client then admin_client:close() end helpers.stop_kong(nil, true) end) it("doesn't run", function() local res = assert(proxy_client:send { method = "GET", path = "/request", headers = { host = "mock_upstream", apikey = "kong", }, }) assert.response(res).has.status(200) local value = assert.request(res).has.header("x-consumer-username") assert.equal("test-consumer-3", value) assert.request(res).has.no.header("rewriter") end) end) end) end) end