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

94 lines
3.2 KiB
Lua

require "kong.tools.utils"
describe("Observability/Logs unit tests", function()
describe("maybe_push()", function()
local o11y_logs, maybe_push, get_request_logs, get_worker_logs
local old_ngx, old_kong
lazy_setup(function()
old_ngx = _G.ngx
old_kong = _G.kong
_G.ngx = {
config = { subsystem = "http" },
ctx = {},
DEBUG = ngx.DEBUG,
INFO = ngx.INFO,
WARN = ngx.WARN,
}
_G.kong = {
configuration = {
log_level = "info",
},
}
o11y_logs = require "kong.observability.logs"
maybe_push = o11y_logs.maybe_push
get_request_logs = o11y_logs.get_request_logs
get_worker_logs = o11y_logs.get_worker_logs
end)
before_each(function()
_G.ngx.ctx = {}
end)
lazy_teardown(function()
_G.ngx = old_ngx
_G.kong = old_kong
end)
it("has no effect when log level is lower than the configured value", function()
maybe_push(1, nil, ngx.DEBUG, "Don't mind me, I'm just a debug log")
local worker_logs = get_worker_logs()
assert.same({}, worker_logs)
local request_logs = get_request_logs()
assert.same({}, request_logs)
end)
it("considers log message as optional", function()
local log_level = ngx.INFO
maybe_push(1, nil, log_level)
local worker_logs = get_worker_logs()
assert.equals(1, #worker_logs)
local logged_entry = worker_logs[1]
assert.same(log_level, logged_entry.log_level)
assert.equals("", logged_entry.body)
assert.is_table(logged_entry.attributes)
assert.is_number(logged_entry.observed_time_unix_nano)
assert.is_number(logged_entry.time_unix_nano)
assert.is_number(logged_entry.attributes["introspection.current.line"])
assert.is_string(logged_entry.attributes["introspection.name"])
assert.is_string(logged_entry.attributes["introspection.namewhat"])
assert.is_string(logged_entry.attributes["introspection.source"])
assert.is_string(logged_entry.attributes["introspection.what"])
end)
it("generates worker-scoped log entries", function()
local log_level = ngx.WARN
local body = "Careful! I'm a warning!"
maybe_push(1, { foo = "bar", tst = "baz" }, log_level, body, true, 123, ngx.null, nil, function()end, { foo = "bar" })
local worker_logs = get_worker_logs()
assert.equals(1, #worker_logs)
local logged_entry = worker_logs[1]
assert.same(log_level, logged_entry.log_level)
assert.matches(body .. "true123nilnilfunction:%s0x%x+table:%s0x%x+", logged_entry.body)
assert.is_table(logged_entry.attributes)
assert.is_number(logged_entry.attributes["introspection.current.line"])
assert.is_string(logged_entry.attributes["introspection.name"])
assert.is_string(logged_entry.attributes["introspection.namewhat"])
assert.is_string(logged_entry.attributes["introspection.source"])
assert.is_string(logged_entry.attributes["introspection.what"])
assert.equals("bar", logged_entry.attributes.foo)
assert.equals("baz", logged_entry.attributes.tst)
assert.is_number(logged_entry.observed_time_unix_nano)
assert.is_number(logged_entry.time_unix_nano)
end)
end)
end)