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

72 lines
1.6 KiB
Lua

local function reload_module(name)
package.loaded[name] = nil
return require(name)
end
local function reset_globals(id)
_G.ngx.ctx = {}
_G.ngx.var = {
kong_request_id = id,
}
_G.ngx.get_phase = function() -- luacheck: ignore
return "access"
end
_G.kong = {
log = {
notice = function() end,
info = function() end,
},
}
end
describe("Request ID unit tests", function()
local ngx_var_request_id = "1234"
describe("get()", function()
local old_ngx_ctx
local old_ngx_var
local old_ngx_get_phase
lazy_setup(function()
old_ngx_ctx = _G.ngx.ctx
old_ngx_var = _G.ngx.var
old_ngx_get_phase = _G.ngx.get_phase
end)
before_each(function()
reset_globals(ngx_var_request_id)
end)
lazy_teardown(function()
_G.ngx.ctx = old_ngx_ctx
_G.ngx.var = old_ngx_var
_G.ngx.get_phase = old_ngx_get_phase
end)
it("returns the expected Request ID and caches it in ctx", function()
local request_id = reload_module("kong.observability.tracing.request_id")
local id, err = request_id.get()
assert.is_nil(err)
assert.equal(ngx_var_request_id, id)
local ctx_request_id = request_id._get_ctx_request_id()
assert.equal(ngx_var_request_id, ctx_request_id)
end)
it("fails if accessed from phase that cannot read ngx.var", function()
_G.ngx.get_phase = function() return "init" end
local request_id = reload_module("kong.observability.tracing.request_id")
local id, err = request_id.get()
assert.is_nil(id)
assert.equal("cannot access ngx.var in init phase", err)
end)
end)
end)