168 lines
4.9 KiB
Lua
168 lines
4.9 KiB
Lua
local helpers = require "spec.helpers"
|
|
local cjson = require "cjson"
|
|
|
|
describe("Reconfiguration completion detection helper", function()
|
|
|
|
local STATE_UPDATE_FREQUENCY = .2
|
|
|
|
local admin_client
|
|
local proxy_client
|
|
|
|
local function helper_tests(make_proxy_client)
|
|
local res = admin_client:post("/plugins", {
|
|
body = {
|
|
name = "request-termination",
|
|
config = {
|
|
status_code = 200,
|
|
body = "kong terminated the request",
|
|
}
|
|
},
|
|
headers = { ["Content-Type"] = "application/json" },
|
|
})
|
|
local body = assert.res_status(201, res)
|
|
local request_termination_plugin_id = cjson.decode(body).id
|
|
|
|
res = admin_client:post("/services", {
|
|
body = {
|
|
name = "test-service",
|
|
url = "http://127.0.0.1",
|
|
},
|
|
headers = { ["Content-Type"] = "application/json" },
|
|
})
|
|
body = assert.res_status(201, res)
|
|
local service = cjson.decode(body)
|
|
|
|
local path = "/foo-barak"
|
|
|
|
res = admin_client:post("/services/" .. service.id .. "/routes", {
|
|
body = {
|
|
paths = { path }
|
|
},
|
|
headers = { ["Content-Type"] = "application/json" },
|
|
})
|
|
assert.res_status(201, res)
|
|
|
|
res = proxy_client:get(path)
|
|
body = assert.res_status(200, res)
|
|
assert.equals("kong terminated the request", body)
|
|
|
|
res = admin_client:patch("/plugins/" .. request_termination_plugin_id, {
|
|
body = {
|
|
config = {
|
|
status_code = 404,
|
|
body = "kong terminated the request with 404",
|
|
}
|
|
},
|
|
headers = { ["Content-Type"] = "application/json" },
|
|
})
|
|
assert.res_status(200, res)
|
|
|
|
res = proxy_client:get(path)
|
|
body = assert.res_status(404, res)
|
|
assert.equals("kong terminated the request with 404", body)
|
|
|
|
local second_admin_client = helpers.admin_client()
|
|
admin_client:synchronize_sibling(second_admin_client)
|
|
|
|
res = second_admin_client:patch("/plugins/" .. request_termination_plugin_id, {
|
|
body = {
|
|
config = {
|
|
status_code = 405,
|
|
body = "kong terminated the request with 405",
|
|
}
|
|
},
|
|
headers = { ["Content-Type"] = "application/json" },
|
|
})
|
|
assert.res_status(200, res)
|
|
|
|
local second_proxy_client = make_proxy_client()
|
|
proxy_client:synchronize_sibling(second_proxy_client)
|
|
|
|
res = second_proxy_client:get(path)
|
|
body = assert.res_status(405, res)
|
|
assert.equals("kong terminated the request with 405", body)
|
|
end
|
|
|
|
describe("#traditional mode", function()
|
|
|
|
local function make_proxy_client()
|
|
return helpers.proxy_client()
|
|
end
|
|
|
|
lazy_setup(function()
|
|
helpers.get_db_utils()
|
|
assert(helpers.start_kong({
|
|
plugins = "bundled,reconfiguration-completion",
|
|
worker_consistency = "eventual",
|
|
worker_state_update_frequency = STATE_UPDATE_FREQUENCY,
|
|
}))
|
|
proxy_client, admin_client = helpers.make_synchronized_clients()
|
|
end)
|
|
|
|
teardown(function()
|
|
if admin_client then
|
|
admin_client:close()
|
|
end
|
|
if proxy_client then
|
|
proxy_client:close()
|
|
end
|
|
helpers.stop_kong()
|
|
end)
|
|
|
|
it('', function () helper_tests(make_proxy_client) end)
|
|
end)
|
|
|
|
describe("#hybrid mode", function()
|
|
|
|
local function make_proxy_client()
|
|
return helpers.proxy_client("127.0.0.1", 9002)
|
|
end
|
|
|
|
lazy_setup(function()
|
|
helpers.get_db_utils()
|
|
|
|
assert(helpers.start_kong({
|
|
plugins = "bundled,reconfiguration-completion",
|
|
role = "control_plane",
|
|
database = "postgres",
|
|
prefix = "cp",
|
|
cluster_cert = "spec/fixtures/kong_clustering.crt",
|
|
cluster_cert_key = "spec/fixtures/kong_clustering.key",
|
|
lua_ssl_trusted_certificate = "spec/fixtures/kong_clustering.crt",
|
|
cluster_listen = "127.0.0.1:9005",
|
|
cluster_telemetry_listen = "127.0.0.1:9006",
|
|
nginx_conf = "spec/fixtures/custom_nginx.template",
|
|
db_update_frequency = STATE_UPDATE_FREQUENCY,
|
|
}))
|
|
|
|
assert(helpers.start_kong({
|
|
plugins = "bundled,reconfiguration-completion",
|
|
role = "data_plane",
|
|
database = "off",
|
|
prefix = "dp",
|
|
cluster_cert = "spec/fixtures/kong_clustering.crt",
|
|
cluster_cert_key = "spec/fixtures/kong_clustering.key",
|
|
lua_ssl_trusted_certificate = "spec/fixtures/kong_clustering.crt",
|
|
cluster_control_plane = "127.0.0.1:9005",
|
|
cluster_telemetry_endpoint = "127.0.0.1:9006",
|
|
proxy_listen = "0.0.0.0:9002",
|
|
worker_state_update_frequency = STATE_UPDATE_FREQUENCY,
|
|
}))
|
|
proxy_client, admin_client = helpers.make_synchronized_clients({ proxy_client = make_proxy_client() })
|
|
end)
|
|
|
|
teardown(function()
|
|
if admin_client then
|
|
admin_client:close()
|
|
end
|
|
if proxy_client then
|
|
proxy_client:close()
|
|
end
|
|
helpers.stop_kong("dp")
|
|
helpers.stop_kong("cp")
|
|
end)
|
|
|
|
it('', function () helper_tests(make_proxy_client) end)
|
|
end)
|
|
end)
|