114 lines
3.1 KiB
Lua
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
|