Files
2026-07-13 12:32:21 +08:00

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)