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

173 lines
4.6 KiB
Lua

local helpers = require "spec.helpers"
local cjson = require "cjson"
for _, strategy in helpers.each_strategy() do
describe("[#traditional] Status API - DNS client route with [#" .. strategy .. "]" , function()
local client
local tcp_status_port
lazy_setup(function()
tcp_status_port = helpers.get_available_port()
local bp = helpers.get_db_utils(strategy, {
"upstreams",
"targets",
})
local upstream = bp.upstreams:insert()
bp.targets:insert({
upstream = upstream,
target = "_service._proto.srv.test",
})
assert(helpers.start_kong({
database = strategy,
status_listen = "127.0.0.1:" .. tcp_status_port,
new_dns_client = "on",
}))
client = helpers.http_client("127.0.0.1", tcp_status_port, 20000)
end)
teardown(function()
if client then
client:close()
end
helpers.stop_kong()
end)
it("/status/dns - status code 200", function ()
local res = assert(client:send {
method = "GET",
path = "/status/dns",
headers = { ["Content-Type"] = "application/json" }
})
local body = assert.res_status(200 , res)
local json = cjson.decode(body)
assert(type(json.worker.id) == "number")
assert(type(json.worker.count) == "number")
assert(type(json.stats) == "table")
assert(type(json.stats["127.0.0.1|A/AAAA"].runs) == "number")
-- Wait for the upstream target to be updated in the background
helpers.wait_until(function ()
local res = assert(client:send {
method = "GET",
path = "/status/dns",
headers = { ["Content-Type"] = "application/json" }
})
local body = assert.res_status(200 , res)
local json = cjson.decode(body)
return type(json.stats["_service._proto.srv.test|SRV"]) == "table"
end, 5)
end)
end)
describe("[#traditional] Status API - DNS client route with [#" .. strategy .. "]" , function()
local client
local tcp_status_port
lazy_setup(function()
tcp_status_port = helpers.get_available_port()
helpers.get_db_utils(strategy)
assert(helpers.start_kong({
database = strategy,
status_listen = "127.0.0.1:" .. tcp_status_port,
new_dns_client = "off",
}))
client = helpers.http_client("127.0.0.1", tcp_status_port, 20000)
end)
teardown(function()
if client then
client:close()
end
helpers.stop_kong()
end)
it("/status/dns - status code 501", function ()
local res = assert(client:send {
method = "GET",
path = "/status/dns",
headers = { ["Content-Type"] = "application/json" }
})
local body = assert.res_status(501, res)
local json = cjson.decode(body)
assert.same("not implemented with the legacy DNS client", json.message)
end)
end)
end
-- hybrid mode
for _, strategy in helpers.each_strategy() do
describe("[#hybrid] Status API - DNS client route with [#" .. strategy .. "]" , function()
local client
local tcp_status_port
lazy_setup(function()
tcp_status_port = helpers.get_available_port()
helpers.get_db_utils(strategy) -- runs migrations
assert(helpers.start_kong({
role = "control_plane",
cluster_cert = "spec/fixtures/kong_clustering.crt",
cluster_cert_key = "spec/fixtures/kong_clustering.key",
database = strategy,
cluster_listen = "127.0.0.1:9005",
nginx_conf = "spec/fixtures/custom_nginx.template",
new_dns_client = "on",
}))
assert(helpers.start_kong({
role = "data_plane",
database = "off",
prefix = "servroot2",
cluster_cert = "spec/fixtures/kong_clustering.crt",
cluster_cert_key = "spec/fixtures/kong_clustering.key",
cluster_control_plane = "127.0.0.1:9005",
proxy_listen = "0.0.0.0:9002",
nginx_conf = "spec/fixtures/custom_nginx.template",
status_listen = "127.0.0.1:" .. tcp_status_port,
new_dns_client = "on",
}))
client = helpers.http_client("127.0.0.1", tcp_status_port, 20000)
end)
teardown(function()
if client then
client:close()
end
helpers.stop_kong("servroot2")
helpers.stop_kong()
end)
it("/status/dns - status code 200", function ()
local res = assert(client:send {
method = "GET",
path = "/status/dns",
headers = { ["Content-Type"] = "application/json" }
})
local body = assert.res_status(200 , res)
local json = assert(cjson.decode(body))
assert(type(json.stats) == "table")
end)
end)
end