87 lines
2.5 KiB
Lua
87 lines
2.5 KiB
Lua
local helpers = require "spec.helpers"
|
|
|
|
for _, strategy in helpers.each_strategy() do
|
|
describe("Observability Logs", function ()
|
|
describe("ngx.log patch", function()
|
|
local proxy_client
|
|
local post_function_access = [[
|
|
local threads = {}
|
|
local n_threads = 100
|
|
|
|
for i = 1, n_threads do
|
|
threads[i] = ngx.thread.spawn(function()
|
|
ngx.log(ngx.INFO, "thread_" .. i .. " logged")
|
|
end)
|
|
end
|
|
|
|
for i = 1, n_threads do
|
|
ngx.thread.wait(threads[i])
|
|
end
|
|
]]
|
|
|
|
lazy_setup(function()
|
|
local bp = helpers.get_db_utils(strategy, {
|
|
"routes",
|
|
"services",
|
|
"plugins",
|
|
})
|
|
|
|
local http_srv = assert(bp.services:insert {
|
|
name = "mock-service",
|
|
host = helpers.mock_upstream_host,
|
|
port = helpers.mock_upstream_port,
|
|
})
|
|
|
|
local logs_route = assert(bp.routes:insert({ service = http_srv,
|
|
protocols = { "http" },
|
|
paths = { "/logs" }}))
|
|
|
|
assert(bp.plugins:insert({
|
|
name = "post-function",
|
|
route = logs_route,
|
|
config = {
|
|
access = { post_function_access },
|
|
},
|
|
}))
|
|
|
|
-- only needed to enable the log collection hook
|
|
assert(bp.plugins:insert({
|
|
name = "opentelemetry",
|
|
route = logs_route,
|
|
config = {
|
|
logs_endpoint = "http://" .. helpers.mock_upstream_host .. ":" .. helpers.mock_upstream_port,
|
|
}
|
|
}))
|
|
|
|
helpers.start_kong({
|
|
database = strategy,
|
|
nginx_conf = "spec/fixtures/custom_nginx.template",
|
|
plugins = "opentelemetry,post-function",
|
|
})
|
|
proxy_client = helpers.proxy_client()
|
|
end)
|
|
|
|
lazy_teardown(function()
|
|
if proxy_client then
|
|
proxy_client:close()
|
|
end
|
|
helpers.stop_kong()
|
|
end)
|
|
|
|
it("does not produce yielding and concurrent executions", function ()
|
|
local res = assert(proxy_client:send {
|
|
method = "GET",
|
|
path = "/logs",
|
|
})
|
|
assert.res_status(200, res)
|
|
|
|
-- plugin produced logs:
|
|
assert.logfile().has.line("thread_1 logged", true, 10)
|
|
assert.logfile().has.line("thread_100 logged", true, 10)
|
|
-- plugin did not produce concurrent accesses to ngx.log:
|
|
assert.logfile().has.no.line("[error]", true)
|
|
end)
|
|
end)
|
|
end)
|
|
end
|