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

114 lines
3.1 KiB
Lua

local helpers = require "spec.helpers"
for _, strategy in helpers.each_strategy() do
describe("opentelemetry regression #" .. strategy, function()
local bp
setup(function()
bp = assert(helpers.get_db_utils(strategy, {
"services",
"routes",
"plugins",
}, { "opentelemetry" }))
end)
describe("#KAG-1061", function ()
if strategy == "off" then
return -- not relevant
end
local mock1, mock2
local mock_port1, mock_port2
setup(function()
mock_port1 = helpers.get_available_port()
mock_port2 = helpers.get_available_port()
local http_srv = assert(bp.services:insert {
name = "mock-service",
host = helpers.mock_upstream_host,
port = helpers.mock_upstream_port,
})
local route = assert(bp.routes:insert({ service = http_srv,
protocols = { "http" },
paths = { "/" }}))
bp.plugins:insert({
name = "opentelemetry",
instance_name = "test1",
route = route,
service = http_srv,
config = {
traces_endpoint = "http://127.0.0.1:" .. mock_port1,
batch_flush_delay = 0, -- report immediately
}
})
assert(helpers.start_kong({
database = strategy,
nginx_conf = "spec/fixtures/custom_nginx.template",
plugins = "opentelemetry",
tracing_instrumentations = "all",
tracing_sampling_rate = 1,
}))
-- we do not wait too long for the mock to receive the request
mock1 = helpers.http_mock(mock_port1, {
timeout = 5,
})
mock2 = helpers.http_mock(mock_port2, {
timeout = 5,
})
end)
teardown(function()
helpers.stop_kong()
end)
it("test", function ()
local client = assert(helpers.proxy_client())
local res = assert(client:send {
method = "GET",
path = "/",
})
assert.res_status(200, res)
-- sent to mock1
assert(mock1())
local admin_client = assert(helpers.admin_client())
local res = assert(admin_client:send {
method = "PATCH",
path = "/plugins/test1",
body = {
config = {
endpoint = "http://127.0.0.1:" .. mock_port2,
}
},
headers = {
["Content-Type"] = "application/json",
}
})
assert.res_status(200, res)
-- keep sending requests until the reconfigure takes effect and
-- the traces are sent to mock2
local done
local send_co = coroutine.create(function ()
local time = 0
while not done and time < 10 do
local res = assert(client:send {
method = "GET",
path = "/",
})
assert.res_status(200, res)
time = time + 1
end
end)
coroutine.resume(send_co)
assert(mock2())
done = true
end)
end)
end)
end