项目文件夹

文件
2026-07-13 12:32:21 +08:00

76 行
2.4 KiB
Raku

use Test::Nginx::Socket;
plan tests => repeat_each() * (blocks() * 5);
workers(1);
no_shuffle();
run_tests();
__DATA__
=== TEST 1: stale result triggers async timer
--- config
location = /t {
access_by_lua_block {
-- init
local client = require("kong.resty.dns.client")
assert(client.init({
nameservers = { "127.0.0.53" },
hosts = {}, -- empty tables to parse to prevent defaulting to /etc/hosts
resolvConf = {}, -- and resolv.conf files
order = { "A" },
validTtl = 1,
}))
local host = "konghq.com"
local typ = client.TYPE_A
-- first time
local answers, err, try_list = client.resolve(host, { qtype = typ })
if not answers then
ngx.say("failed to resolve: ", err)
return
end
ngx.say("first address name: ", answers[1].name)
ngx.say("first try_list: ", tostring(try_list))
-- sleep to wait for dns record to become stale
ngx.sleep(1.5)
-- second time: use stale result and trigger async timer
answers, err, try_list = client.resolve(host, { qtype = typ })
if not answers then
ngx.say("failed to resolve: ", err)
return
end
ngx.say("second address name: ", answers[1].name)
ngx.say("second try_list: ", tostring(try_list))
-- third time: use stale result and find triggered async timer
answers, err, try_list = client.resolve(host, { qtype = typ })
if not answers then
ngx.say("failed to resolve: ", err)
return
end
ngx.say("third address name: ", answers[1].name)
ngx.say("third try_list: ", tostring(try_list))
}
}
--- request
GET /t
--- response_body
first address name: konghq.com
first try_list: ["(short)konghq.com:1 - cache-miss","konghq.com:1 - cache-miss/querying"]
second address name: konghq.com
second try_list: ["(short)konghq.com:1 - cache-hit/stale","konghq.com:1 - cache-hit/stale/scheduled"]
third address name: konghq.com
third try_list: ["(short)konghq.com:1 - cache-hit/stale","konghq.com:1 - cache-hit/stale/in progress (async)"]
--- no_error_log
[error]
dns lookup pool exceeded retries
API disabled in the context of init_worker_by_lua