项目文件夹

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

118 行
2.7 KiB
Perl

# vim:set ts=4 sts=4 sw=4 et ft=:
use Test::Nginx::Socket::Lua;
use Cwd qw(cwd);
workers(2);
#repeat_each(2);
plan tests => repeat_each() * (blocks() * 3);
my $pwd = cwd();
our $HttpConfig = qq{
lua_package_path "$pwd/lib/?.lua;;";
lua_shared_dict cache_shm 1m;
lua_shared_dict ipc_shm 1m;
init_by_lua_block {
-- local verbose = true
local verbose = false
local outfile = "$Test::Nginx::Util::ErrLogFile"
-- local outfile = "/tmp/v.log"
if verbose then
local dump = require "jit.dump"
dump.on(nil, outfile)
else
local v = require "jit.v"
v.on(outfile)
end
require "resty.core"
-- jit.opt.start("hotloop=1")
-- jit.opt.start("loopunroll=1000000")
-- jit.off()
}
};
run_tests();
__DATA__
=== TEST 1: update() errors if no ipc
--- http_config eval: $::HttpConfig
--- config
location = /t {
content_by_lua_block {
local mlcache = require "kong.resty.mlcache"
local cache = assert(mlcache.new("my_mlcache", "cache_shm"))
local ok, err = pcall(cache.update, cache, "foo")
ngx.say(err)
}
}
--- request
GET /t
--- response_body
no polling configured, specify opts.ipc_shm or opts.ipc.poll
--- no_error_log
[error]
=== TEST 2: update() calls ipc poll() with timeout arg
--- http_config eval: $::HttpConfig
--- config
location = /t {
content_by_lua_block {
local mlcache = require "kong.resty.mlcache"
local cache = assert(mlcache.new("my_mlcache", "cache_shm", {
ipc = {
register_listeners = function() end,
broadcast = function() end,
poll = function(...)
ngx.say("called poll() with args: ", ...)
return true
end,
}
}))
assert(cache:update(3.5, "not me"))
}
}
--- request
GET /t
--- response_body
called poll() with args: 3.5
--- no_error_log
[error]
=== TEST 3: update() JITs when no events to catch up
--- http_config eval: $::HttpConfig
--- config
location = /t {
content_by_lua_block {
local mlcache = require "kong.resty.mlcache"
local cache = assert(mlcache.new("my_mlcache", "cache_shm", {
ipc_shm = "ipc_shm",
}))
for i = 1, 10e3 do
assert(cache:update())
end
}
}
--- request
GET /t
--- ignore_response_body
--- no_error_log
[error]
--- error_log eval
qr/\[TRACE\s+\d+ content_by_lua\(nginx\.conf:\d+\):8 loop\]/